# -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/9/15 0015 4:52 #cookie 是服务器发给浏览器的特殊信息 # 可以理解为一个临时通行证 # 以 json 形式存放 # name: cookie 的名称 # value: coikie 的值 # domain: 可以使用此 cookie 的域名 # path: 可以使用此 cookie 的页面路径 # expires/Max-Age : cookie 的超时时间 默认是 session ,当浏览器关闭时失效 # secure : 设置是否只能通过 https 来传递此条 cookie # 豆瓣登录 # 抓包 按F12,在输入账号,密码框中输入相应值后,点登录, # 找到 302 页面跳转,这时所需要的数据就在这里 login import requests from urllib import request from lxml import etree from PIL import Image class DoubanSpider(): def __init__(self,us,ps): self.session = requests.session() self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'} self.login_url = 'https://accounts.douban.com/login' self.us = us self.ps = ps def start_res(self): # 第一步先不登录,先 get 看看有没有验证码出现, re = self.session.get(self.login_url).content.decode() ht = etree.HTML(re) self.pass_login(ht) def pass_login(self,ht): captcha_id = ht.xpath('//input[@name="captcha-id"]/@value') # print(captcha_id) # 验证码下载地址 captcha_solution = ht.xpath('//img[@id="captcha_image"]/@src') # print(captcha_solution) # 如果没有验证码 if captcha_solution == []: print('没有发现验证码') data = { 'source': 'movie', 'redir': 'https://movie.douban.com/top250', 'form_email': self.us, 'form_password':self.ps, 'login': '登录' } else: im_path = '1.png' # 验证码存放路径 # 文件下载方法, 下载地址, 路径文件名 request.urlretrieve(captcha_solution[0], im_path) img = Image.open(im_path).show() data = { 'source': 'movie', 'redir': 'https://movie.douban.com/top250', 'form_email': self.us, 'form_password':self.ps, 'captcha-solution': input('请输入验证码--->>'), # 验证码 'captcha-id': captcha_id[0], 'login': '登录' } res = self.session.post(self.login_url, data=data, headers = self.headers).content.decode() self.login_res(res) # 登录成功后获取页面内容 def login_res(self,res): html = etree.HTML(res) # 如果登录成功,r 列表中有值,否则为空列表 r = html.xpath( '//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()' ) if r ==[]: print('登录失败') else:print('登录成功,当前账号为:%s' %r[0]) if __name__ == '__main__': lo = DoubanSpider('账号', '密码') lo.start_res()
data = {
'source': 'movie',
'redir': 'https://movie.douban.com/top250',
'form_email': self.us,
'form_password':self.ps,
'captcha-solution': input('请输入验证码--->>'), # 验证码
'captcha-id': captcha_id[0],
'login': '登录'
}
当要输入验证码时,要提交的值为data2,
其中 captcha - solution 的值为验证码
captcha - id 在页面源码中 ctrl + f 搜索
用 xpath 找到节点,可取其值