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



我正在使用mechanize登录一个网站,并用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()

最新更新