bs4--mechanize模拟浏览器

发布时间:2018-07-09 11:29:46编辑:Run阅读(6059)

    Mechanize模块,只支持python2,而我的环境是python3

    使用pycharm创建虚拟环境,使用py2.7

    如果非要使用py3,可以使用mechanicalsoup模块(网上大概看了下,都说不好用,这里不多介绍)

    blob.png


    Mechanize安装

    这里使用pycharm安装,点击Settings配置文件,找到Project Interpreter

    blob.png


    点击后边的+号,如图

    blob.png


    搜索mechanize包

    blob.png


    点击Install Package安装

    blob.png


    安装成功后,可看见mechanize包版本信息

    blob.png


    Mechanize常用函数

    .CookieJar():设置cookie 

    .Browser():打开浏览器 

    .addheaders():User-Agent,用来欺骗服务器的 

    .open():打开网页,按照官网描述可以打开任意网页,不仅限于http 

    .select_form():选择表单的,选择表单的ID的时候需要注意。 

    .form[]:填写信息 

    .submit():提交


    Mechanize测试

    百闻不如一见,说得再多也不如直接测试一次

    下面演示如何使用Mechanize模拟浏览器,搜索关键字

    创建一个my_mechanize.py文件

    import mechanize
    import sys
    from bs4 import BeautifulSoup
    
    # py2.7声明使用utf-8编码
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    # 打开浏览器
    br = mechanize.Browser()
    
    # 设置浏览器
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_gzip(False)
    
    # Follows refresh 0 but not hangs on refresh > 0
    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')]
    
    # 上面的代码主要用于初始化设置
    
    # 打开百度
    br.open('https://www.baidu.com')
    # 获取百度的表单
    for form in br.forms():
        print(form)
    
    # 搜索关键字
    br.select_form(name='f')
    br.form['wd'] = 'www.py3study.com'
    br.submit()
    
    # 查看搜索结果
    print(br.response().read())
    
    # 查看返回页面的所有链接
    for link in br.links():
        print("%s : %s" % (link.url, link.text))
    
    # 使用mechanize浏览器打开指定链接,执行命令
    newlink = br.click_link(text='python3学习')
    new_content = br.open(newlink)
    html = new_content.read()
    
    # 使用bs4过滤器
    soup = BeautifulSoup(html, 'lxml')
    
    # 获取所有标题,返回一个列表
    tagsli = soup.find_all('div', attrs={'class': 'desc'})
    for i in tagsli:
        print(i)

    运行结果

    blob.png

关键字