我的编程空间,编程开发者的网络收藏夹
学习永远不晚

bs4+mechanize模拟登陆

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

bs4+mechanize模拟登陆

Mechanize常用函数

.CookieJar():设置cookie 

.Browser():打开浏览器 

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

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

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

.form[]:填写form表单信息 

.submit():提交


环境介绍:

本地有个django服务,访问http://127.0.0.1:8000如下

blob.png


成功登陆后,会有登陆账号,登陆时间

blob.png


利用mechanize模拟登陆,在用bs4获取登陆信息

注意:mechanize版本只支持python2x版本

完整代码如下

#!/usr/bin/env python
# coding: utf-8
import mechanize
import sys
from bs4 import BeautifulSoup

# py2.7声明使用utf-8编码
reload(sys)
sys.setdefaultencoding('utf-8')

class Item(object):  # 定义一个Item类,爬取的字段类
    landing_name = None  # 登陆账号
    landing_time = None  # 登陆时间

class SimulateLogin(object):
    def __init__(self, url, username, password):
        self.url = url
        self.username = username
        self.password = password
        self.bs4_filter()

    def mechanize_setting(self):
        # 打开浏览器
        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)

        # 设置user-agent
        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(self):
        br = self.mechanize_setting()
        br.open(self.url)
        # 打印form表单需要提交的信息
        for form in br.forms():
            print(form)
        # 注意:
        # post 指的是请求方式
        # TextControl(name=)对应的是账号
        # PasswordControl(pwd=)对应的是密码
        try:
            br.select_form(method='post')
            br.form['name'] = self.username
            br.form['pwd'] = self.password
            br.submit()
        except Exception as e:
            print('form表信息填写错误:%s' % e)
        else:
            ret = br.response().read()
            return ret

    def bs4_filter(self):
        items = []
        ret = self.login()
        # 利用bs4 获取登陆成功后的一些信息
        soup = BeautifulSoup(ret, 'lxml')
        tagsli = soup.find_all('ul', attrs={'class': 'nav navbar-nav navbar-right'})
        for tag in tagsli:
            item = Item()  # 实例化Item类
            item.landing_name = tag.find_all('li')[0].get_text().strip()
            item.landing_time = tag.find_all('li')[1].get_text().strip()
            items.append(item)
        for item in items:
            print('登陆账号:%s\n登陆时间:%s'%(item.landing_name,item.landing_time))


if __name__ == '__main__':
    url = 'http://127.0.0.1:8000/'
    SimulateLogin(url, 'zhangsan', '123')


运行效果:

blob.png


如果需要改成外网的爬取,代码改成:

#!/usr/bin/env python
# coding: utf-8
import mechanize
import sys
from bs4 import BeautifulSoup

# py2.7声明使用utf-8编码
reload(sys)
sys.setdefaultencoding('utf-8')


class Item(object):  # 定义一个Item类,爬取的字段类
    landing_name = None  # 登陆账号
    landing_time = None  # 登陆时间


class SimulateLogin(object):
    def __init__(self, url, username, password):
        self.url = url
        self.username = username
        self.password = password
        self.login()

    def mechanize_setting(self):
        # 打开浏览器
        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)

        # 设置user-agent
        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(self):
        br = self.mechanize_setting()
        br.open(self.url)
        # 打印form表单需要提交的信息
        for form in br.forms():
            print(form)
        # 注意:
        # post 指的是请求方式
        # TextControl(name=)对应的是账号
        # PasswordControl(pwd=)对应的是密码
        try:
            br.select_form(method='post')
            br.form['name'] = self.username
            br.form['pwd'] = self.password
            br.submit()
        except Exception as e:
            print('form表信息填写错误:%s' % e)
        else:
            # 读取登陆后页面
            ret = br.response().read()
            print(ret)


if __name__ == '__main__':
    url = 'http://127.0.0.1:8000/'  # 后台登陆地址
    SimulateLogin(url, 'zhangsan', '123')  # 传入url,账号,密码参数


运行结果:可以根据需求去提取对应的数据

blob.png

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

bs4+mechanize模拟登陆

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

bs4+mechanize模拟登陆

Mechanize常用函数.CookieJar():设置cookie.Browser():打开浏览器.addheaders():User-Agent,用来欺骗服务器的.open():打开网页,按照官网描述可以打开任意网页,不仅限于http.
2023-01-30

bs4--mechanize模拟浏览器

Mechanize模块,只支持python2,而我的环境是python3使用pycharm创建虚拟环境,使用py2.7如果非要使用py3,可以使用mechanicalsoup模块(网上大概看了下,都说不好用,这里不多介绍)Mechanize
2023-01-30

Python 模拟登陆

import urllibimport urllib.requestimport gzipimport httpimport http.cookiejar#定义一个方法用于生成请求头信息,处理cookie  def getOpener(he
2023-01-31

通过session模拟登陆

import requests# 这个练习对比的是上一个登陆练习,这个是不用自己传入cookie参数,而是利用session方法登陆# 实例化一个sessionsession = requests.session()# 使用session发
2023-01-30

pytesseract+mechanize识别验证码自动登陆

pytesseract+mechanize识别验证码自动登陆需要的模块安装Pillow,Python平台的图像处理标准库pipinstallpillow安装pytesseract,文字识别库pipinstallpytesseract安装te
2023-01-30

python模拟登陆Github示例

首先进入github登录页:https://github.com/login输入账号密码,打开开发者工具,在Network页勾选上Preserve Log(显示持续日志),点击登录,查看Session请求,找到其请求的URL与Form Da
2023-01-31

通过cookies信息模拟登陆

1 import requests 2 3 # 这个练习演示的是通过传入cookie信息模拟登陆,这样操作的前提是需要预先在浏览器登陆账户抓包得到cookie字段信息 4 5 url = "http://www.360wa.com/"
2023-01-30

Python 爬虫模拟登陆知乎

在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率。由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了一下python模拟登陆,网上关于这部分
2022-06-04

python怎么模拟登陆网站

这篇文章主要介绍了python怎么模拟登陆网站,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用已有cookie登陆使用浏览器登陆,获取浏览器中的cookie信息,来进行登陆
2023-06-14

NodeJs模拟登陆正方教务

网上已经有很多关于模拟登陆正方教务的作品了,基于 PHP,Python,Java,.Net 加上我自己尝试的NodeJs,这几门语言都可以实现模拟登陆,模拟登陆的技术点不是特别难,这里记录一下利用 Node 碰到的一些坑,以及一些我自己的解
NodeJs模拟登陆正方教务
2022-06-04

python项目实战:模拟登陆CSDN

前言今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练习吧,提高自己的代码水平,也了解Python如何做到模拟登陆的,下面来看代码导入库
2023-06-02

Python模拟登陆及个人经验(五)

实验名称:模拟登陆实验要求:输入用户名密码认证成功显示欢迎信息输错三次锁定用户 思路:用户输入username判断username是否为真(文件)。否:提示用户不存在;是:判断是否锁定(文件)如果用户锁定提示:该用户已锁定;没锁定就输入密码
2023-01-31

python模拟登陆、POST/GET请求方式

Python提供多种库用于模拟登录和发送HTTP请求。Requests-HTML和Selenium可用于模拟登录,而Requests和URLLib可用于发送GET和POST请求。模拟登录涉及创建会话、发送登录请求、提取会话cookie。发送POST请求需要准备请求参数并使用post()方法,而发送GET请求需要准备请求参数并使用get()方法。示例代码展示了使用Requests-HTML模拟登录、使用Requests发送POST请求、使用URLLib发送GET请求。还提供了注意事项,例如设置请求头、处理重
python模拟登陆、POST/GET请求方式
2024-04-02

Selenium模拟登陆百度(带验证码)

利用Selenium模拟登陆解决验证码的问题验证码解决方案有很多种:1 通过第三方的打码平台,识别率高...一般都是收费的,价格还不便宜2 自己通过切图,再结合图片识别的库,去识别验证码... 简单的验证码识别率还可以,但是复杂的验证码需要
2023-01-30

使用python模拟浏览器实现登陆

前言你有没有想过,当我们在某个网站上登陆时,网站是如何通过验证的,我们都提交给了网站哪些信息,浏览器都发起了哪些请求? 下图是某个网站的登陆界面,接下来就让我们通过命令行模拟浏览器实现登陆操作,看看一个简单的登陆操作,具体是如何实现的。
2023-01-31

Python模拟用户自动登陆网易126邮

Python模拟用户自动登陆网易126邮箱的源码详解,在这里主要来和大家讲一讲,关于利用Python程序来实现自动登录(登陆)网易的126邮箱email的源码与方法,其它邮箱可以借鉴此Python程序代码发邮件。涉及到Python针对邮箱操
2023-01-31

Python项目实战:密码模拟登陆猎聘网

前言今天为大家介绍一个模拟登陆猎聘网招聘网站的案列,加了一个输入密码不可的模块getpass,这样更有安全性,可能实际应用不大,但是存在必有价值,就当是一个案例的练习吧,看看是如何做到模拟登陆猎聘网的导入第三方库
2023-06-02

scrapy的一些容易忽视的点(模拟登陆

scrapy爬虫注意事项一、item数据只有最后一条这种情况一般存在于对标签进行遍历时,将item对象放置在了for循环的外部。解决方式:将item放置在for循环里面。 二、item字段传递后错误,混乱有时候会遇到这样的情况,item传递
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录