# LoginDouban **Repository Path**: whitejavadog/logindouban ## Basic Information - **Project Name**: LoginDouban - **Description**: 模拟登录 豆瓣 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-04-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 模拟登录豆瓣 * 工具 fiddler scrapy * 首先访问登录界面 , ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/090316_d4ccae1d_642486.png "在这里输入图片标题") ``` def start_requests(self): print "get the gate..." return [scrapy.Request(url='https://www.douban.com/accounts/login', headers = self.headers, meta={'cookiejar':1}, callback=self.parse_login, )] ``` * 使用chrom的开发者工具 或是 火狐浏览器的 firebug和开发者工具分析登录界面 ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/090617_2d1a8c67_642486.png "在这里输入图片标题") * 输入账号密码 ,分析表单提交数据(豆瓣网刚开始登录的时候不会让输入验证码 ,但是频繁登录后 ,需要输入验证码) 第一次登录: ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/090730_54992ba4_642486.png "在这里输入图片标题") 多次登录后: ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/091021_8c7e80cc_642486.png "在这里输入图片标题") * 查看 表单 post 的网址,因为有些网站在post 数据时,会换另一个网站 ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/091217_5a84aaaf_642486.png "在这里输入图片标题") 写提交表单代码: ``` def parse_login(self,response): print "start logining..." print response.url """ 获取验证码的链接路径,判断是否出现验证码 """ captcha = response.xpath('//img[@class="captcha_image"]/@src').extract() if len(captcha)>0: print "need captcha..." print 'Copy the link:' link = response.xpath('//img[@class="captcha_image"]/@src').extract()[0] print link """ 通过控制台输入验证码, """ captcha_solution = raw_input('captcha_solution:') captcha_id = urlparse.parse_qs(urlparse.urlparse(link).query,True)['id'] self.formdata['captcha-solution'] = captcha_solution self.formdata['captcha-id'] = captcha_id open('e:\hanhan\\douban.txt', 'w+').write(response.body) print self.formdata print "logining..." """ 通过scrapy 提供的 FormRequest 实现表单数据的提交 """ return [scrapy.FormRequest.from_response( response, meta={"cookiejar":response.meta['cookiejar']}, headers=self.headers, formdata=self.formdata, callback=self.after_login )] ``` * 登录成功后,打印登录后的页面查看是否登录成功 cookiejar 携带登录后的cookie ``` def after_login(self,response): print "after login ..." open("e:\hanhan\\afterlogin.txt","w+").write(response.body) return scrapy.Request(url='https://www.douban.com/', headers=self.headers, meta={'cookiejar':response.meta['cookiejar']}, callback=self.parse_result, dont_filter=True) ``` * 递归爬取豆瓣网内容网站 ``` def parse_result(self,response): print response.url open("e:\hanhan\\ssss.txt","w+").write(response.body) sel = Selector(response) links = sel.xpath('//a[contains(@href,"//")]/@href').extract() for link in links: print link if not 'logout' in link: if not link.startswith('https://'): if not link.startswith('http://'): link = "https://www.douban.com" + link yield scrapy.Request(url=link, meta={'cookiejar':response.meta['cookiejar']}, callback=self.parse_result, dont_filter=True) else: print 'logout..' ``` 在递归抓取的过程中,刚开始的时候是携带登录后的cookie的,但是一段时间都就不携带了,并且出现302 重定向的问题, 后来通过分析日志,发现是 在抓取的过程中,爬虫抓去了 退出用户的链接,导致用户退出登录 ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/092447_cccb1eb6_642486.png "在这里输入图片标题") * 如何追踪cookie ![输入图片说明](https://git.oschina.net/uploads/images/2017/0426/092556_b20d6361_642486.png "在这里输入图片标题") * 本项目采用的是手动输入验证码 ,项目douban_login 采用块云打码平台实现自动输入验证码