# -*- 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 lxml import etree 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): data = { 'source': 'movie', 'redir': 'https: // movie.douban.com / top250', 'form_email': self.us, 'form_password':self.ps, 'login': '登录' } data2 = { 'source': 'movie', 'redir': 'https: // movie.douban.com / top250', 'form_email': self.us, 'form_password': self.ps, # ‘captcha - solution: input('--->>') # captcha - id: PwPK7lqB1EZNJMqYIkvzhVlM:en # 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])
当要输入验证码时,要提交的值为data2,
其中 captcha - solution 的值为验证码
captcha - id 在页面源码中 ctrl + f 搜索
用 xpath 找到节点,可取其值