python - 如何使用函数内的 Mechanize 包登录网站?

标签 python function mechanize

我正在使用 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()

关于python - 如何使用函数内的 Mechanize 包登录网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64642317/

相关文章:

php - 从函数返回时访问数组元素

function - Lua 返回多个值作为参数

python - 与 Mechanize submit() 方法等效的 urllib 代码是什么?

python - 在 Django 1.5 中导入 AUTH_USER_MODEL 的更好方法

Python - Pandas - 仅删除只有数字的拆分,但如果有字母则保留

python - Pygame - 运行时错误 : maximum recursion depth exceeded while calling a Python object

python - 使用 numpy 方法计算核矩阵

javascript - 将 javascript 函数传递给使用 window.open() 打开的子窗口

python - 使用python Mechanize访问时没有显示网站表,我如何找到它?

php - 如何使用php编程在文本字段中填充数据