如何使用函数内的机械化包登录网站?

马达马丹

我正在使用机械化功能登录网站并用beautifulsoap刮擦它。虽然不用功能就可以使用它,但是我不知道如何将登录功能放入功能中,然后再在主程序中使用它。到目前为止,这是我目前无法正常工作的代码:

#!/usr/bin/env python

import http.cookiejar as cookielib
import mechanize
from bs4 import BeautifulSoup

def set_browser():
    br = mechanize.Browser()
    cookiejar = cookielib.LWPCookieJar()
    br.set_cookiejar(cookiejar)
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1)
    br.addheaders = [( 'User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1' )]
    return br

def login(br):
    br.open("https://example.com/login/index.php")
    br.select_form(nr=0)
    br.form['username'] = "admin"
    br.form['password'] = "mypassword"
    br.submit()

def scrape():
    url = "https://example.com/content"
    data = br.open(url).get_data()
    soup = BeautifulSoup(data, 'html.parser')
    with open("source.html", "w") as text_file:
        print(soup.prettify(), file=text_file)

if __name__ == "__main__":
    set_browser()
    login(br)
    scrape()

我希望有人能帮助我如何编写适当的功能。在上面的代码中,我编写了两个函数set_browser()和login(),但是拥有两个函数并不重要;它们分别是:如果将两者组合为一个,就可以了,我只是将其拆分为两个,以便真正学习使用函数。

奥利弗·纳特

我认为返回值时,需要将其存储在某个地方,然后在下一个函数中使用它,因此它应该像这样

def login(br):
    br.open("https://example.com/login/index.php")
    br.select_form(nr=0)
    br.form['username'] = "admin"
    br.form['password'] = "mypassword"
    br.submit()

if __name__ == "__main__":
    br = set_browser()
    login(br)
    scrape()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章