session 验证码登录豆瓣看《头号玩家》评论

本文介绍了一种使用Python爬取豆瓣电影评论的方法,包括处理登录验证、验证码识别等关键步骤。

豆瓣前面的评论是不需要登录就可以get下来的的,后面到一定页数就需要验证了,不登录就爬不了。我还是采用了session先post在get 的方法

  1. 本人小白,不喜勿喷,一起交流,一起进步
  2. 代码地址:https://github.com/1400720231/Python-Spider/tree/master/session_post_douban

1、在登录界面观察需要提交的表单数据

这里写图片描述


2、找到captcha-id 和captcha-solution的位置

其中captcha-solution表示验证码的值,captcha-id表示此时验证码图片的id标号,隐藏标签,在登陆页面是这样的:
这里写图片描述


3、构建准备提交的data信息


data = {
    'data = {
    'captcha-id':captcha_id,
    'captcha-solution':solution,  # 验证码的值
    'source':'movie',
    'redir':'https://movie.douban.com/',
    'form_email': '你的帐号',
    'form_password': '你的密码',
    'login':'登录'
    }
}

4、获取captcha-id的值 和识别图片验证码的内容赋值给data中的captcha-solution

  1. 图片验证码我采用的是人工识别的方法,先下载到本地,查看内容后在用input函数输入进去
  2. captcha-id则是之间在html中用BeautifulSoup匹配出来
import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve   # 登录界面的url
s = requests.session()
login_url = 'https://accounts.douban.com/login'
res =s.get(login_url)
html = BeautifulSoup(res.text,'html.parser')
href_tagert = html.find_all('img',{'id':'captcha_image'}) # 验证码图片的匹配结果,此时是一个列表
solution_href = href_tagert[0]['src']  #真正的图片地址 https://....
urlretrieve(solution_href)  # 下载到本地默认的图片下载保存地址了
solution = input('输入你的验证码:')  # 去找到图片的下载地方,去识别然后输入
captcha_id = html.find_all('input',{'name':'captcha-id'})[0]['value']  # 获取captcha_id的值

5、先session.post再session.get

login_url = 'https://accounts.douban.com/login'  # 登录界面的url
# 头号玩家你评论能看到的最后一页的地址
headers = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}  #构建了一个头信息,保险
get_url = 'https://movie.douban.com/subject/4920389/comments?start=480&limit=20&sort=new_score&status=P&percent_type=' 
res = s.post(login_url,headers=headers,data=data)  # 登录
res = s.get(get_url)  # 登录成功后再去get评论页面,这样就可以获取所有页面的评论的html

6、完整过程:

# coding:utf-8
import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
s = requests.session()
login_url = 'https://accounts.douban.com/login' # 登陆界面的url
# 最后一页评论的url
get_url = 'https://movie.douban.com/subject/4920389/comments?start=480&limit=20&sort=new_score&status=P&percent_type=' 
res =s.get(login_url)
html = BeautifulSoup(res.text,'html.parser')
# 验证码图片地址
href_tagert = html.find_all('img',{'id':'captcha_image'})

# 有时候没有验证码,所以我这里判断了一下
#如果有验证码存在就用构建一个有验证码信息的data,没有就构建另一个data
if len(href_tagert)==0:
    data = {
    'source':'movie',
    'redir':'https://movie.douban.com/',
    'form_email': '你的帐号',
    'form_password': '你的密码',
    'login':'登录'}
else:
    solution_href = href_tagert[0]['src']
    urlretrieve(solution_href)  # 下载到本地默认的图片下载保存地址了
    solution = input('输入你的验证码:')
    captcha_id = html.find_all('input',{'name':'captcha-id'})[0]['value']
    data = {
    'captcha-id':captcha_id,
    'captcha-solution':solution,  # 验证码的值
    'source':'movie',
    'redir':'https://movie.douban.com/',
    'form_email': '你的帐号',
    'form_password': '你的密码',
    'login':'登录'
    }
headers = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
res = s.post(login_url,headers=headers,data=data)
res = s.get(get_url)
html = BeautifulSoup(res.text, 'html.parser')
comments = html.find_all('div', {'class':'comment-item'})
for i in comments:
    print(i.find('p').string)

结果:

这里写图片描述
这里写图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值