python网络爬虫---模拟登陆

为什么要模拟登陆

      网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面。

模拟登陆的步骤: 

    一 保存用户的登录信息 :Session和Cookie

       session:      

import requests
s=requests.Session()
r=s.post(url,data)

     Cookie:


import urllib.request, http.cookiejar
# 初始化Cookie
cookie = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
# 把opener配置为全局 当然也可以不配置全局通过opener来请求网页
urllib.request.install_opener(opener

二 查看表单信息并且构造表单

    在豆瓣登陆页面(https://accounts.douban.com/login),输入用户名,再输入密码,验证码(不管密码和验证是否正确)

     右击检查,找到network,可以在右边看到这样的信息

    

 

        

 

我们关注的是request url 和format data这两行数据

因此构造表单 

formdata={
    'redir': 'https://www.douban.com',
    'form_email':'你的账户',
    'form_password': '你的密码',
    'login': u'登录'
}

Url:

三 伪装浏览器进行登陆 

#伪装浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/55.0.2883.87 Safari/537.36'}

 

其中里面的数据源于第二步所查看内容中的,注意chrome/地址  地址不同

四  验证码的获取

我们发现登陆还需要输入验证码,还需要在foemat data中加入验证码的信息,而验证码是一个动态的过程,因此我们需要手动获取。

 

#获取session中的内容
content=r.text
#解析文本
soup=BeautifulSoup(content,'lxml')
#查找验证码的内容,放入字典
captcha=soup.find('img',id='captcha_image')
if captcha:
    #获取验证码的地址
    captcha_url=captcha['src']
    #这是一个正则表达式的匹配
    re_captcha_id=r'<input type="hidden" name="captcha_id" value="(.*?)"/'
    captcha_id=re.findall(re_captcha_id,content)

    print(captcha_url)
    print(captcha_id)
    captcha_text = input('Please input the captcha:')  # 手动输入验证码
    formdata['captcha-solution'] = captcha_text # 添加表单信息
    formdata['captcha-id'] = captcha_id
 

五 登录

 r=s.post(url_login,data=formdata,headers=headers)

最终代码

import requests
from bs4 import BeautifulSoup
import re
#session保存表单信息
s=requests.Session()
url_login='https://accounts.douban.com/login'
#构造表单
formdata={
    'redir': 'https://www.douban.com',
    'form_email':'18850004849',
    'form_password': 'xcz1818418',
    'login': u'登录'
}
#伪装浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/55.0.2883.87 Safari/537.36'}
r=s.post(url_login,data=formdata,headers=headers)

#获取session中的内容
content=r.text

#解析文本
soup=BeautifulSoup(content,'lxml')
#查找验证码的内容,放入字典
captcha=soup.find('img',id='captcha_image')
if captcha:
    #获取验证码的地址
    captcha_url=captcha['src']
    #这是一个正则表达式的匹配
    re_captcha_id=r'<input type="hidden" name="captcha-id" value="(.*?)"/'
    captcha_id=re.findall(re_captcha_id,content)
    print(captcha_url)
    print(captcha_id)
    captcha_text = input('Please input the captcha:')  # 手动输入验证码
    formdata['captcha-solution'] = captcha_text # 添加表单信息
    formdata['captcha-id'] = captcha_id
    r=s.post(url_login,data=formdata,headers=headers)
#最后写入并运行contacts.html可以看到已经登录
with open('contacts.html','w+',encoding='utf-8') as f:
     f.write(r.text)

运行结果:

   

运行太多导致了这个??现在在网页里都进不去啦,233333。

引用:https://blog.csdn.net/qq_38520096/article/details/79577618 感谢大佬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值