设为首页 加入收藏

TOP

python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)(一)
2017-10-09 17:28:37 】 浏览:9880
Tags:python 爬虫 实战 -------- 模拟 登录 验证 处理 ----scrapy

在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息。

这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码

一般都是通过打码平台处理的,当然你也可以机器学习的知识去识别验证码。后期我想自己做一个关于机器学习识别验证码的API,训练主流的网站,方便自己调用。(还不知道能不能做出来呢,走一步看一步咯!)

思路

一、想要实现登录豆瓣关键点

  1. 分析真实post地址 ----寻找它的formdata,如下图,按浏览器的F12可以找到。
  2. 模拟post ----构造类似的formdata
  3. 验证码处理 ----打码平台

实战操作

相关代码已经调试成功----2017-4-5

目标网站豆瓣网

实现:模拟登录豆瓣,验证码处理,登录到个人主页就算是success

数据:没有抓取数据,此实战主要是模拟登录和处理验证码的学习。要是有需求要抓取数据,编写相关的抓取规则即可抓取内容。

登录成功展示如图:

我在这里贴出主要代码,完整代码请移步我的github:https://github.com/pujinxiao/douban_login

spiders文件夹中DouBan.py主要代码如下:

 1 # -*- coding: utf-8 -*-
 2 import scrapy,urllib,re
 3 from scrapy.http import Request,FormRequest
 4 import ruokuai
 5 class DoubanSpider(scrapy.Spider):
 6     name = "DouBan"
 7     allowed_domains = ["douban.com"]
 8     #start_urls = ['http://douban.com/']
 9     header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"} #供登录模拟使用
10     def start_requests(self):
11         url='https://www.douban.com/accounts/login'
12         return [Request(url=url,meta={"cookiejar":1},callback=self.parse)]#可以传递一个标示符来使用多个。如meta={'cookiejar': 1}这句,后面那个1就是标示符
13 
14     def parse(self, response):
15         captcha=response.xpath('//*[@id="captcha_image"]/@src').extract()  #获取验证码图片的链接
16         print captcha
17         if len(captcha)>0:
18             '''此时有验证码'''
19             #人工输入验证码
20             #urllib.urlretrieve(captcha[0],filename="C:/Users/pujinxiao/Desktop/learn/douban20170405/douban/douban/spiders/captcha.png")
21             #captcha_value=raw_input('查看captcha.png,有验证码请输入:')
22 
23             #用快若打码平台处理验证码--------验证码是任意长度字母,成功率较低
24             captcha_value=ruokuai.get_captcha(captcha[0])
25             reg=r'<Result>(.*?)</Result>'
26             reg=re.compile(reg)
27             captcha_value=re.findall(reg,captcha_value)[0]
28             print '验证码为:',captcha_value
29 
30             data={
31                 "form_email": "weisuen007@163.com",
32                 "form_password": "weijc7789",
33                 "captcha-solution": captcha_value,
34                 #"redir": "https://www.douban.com/people/151968962/",      #设置需要转向的网址,由于我们需要爬取个人中心页,所以转向个人中心页
35             }
36         else:
37             '''此时没有验证码'''
38             print '无验证码'
39             data={
40                 "form_email": "weisuen007@163.com",
41                 "form_password": "weijc7789",
42                 #"redir": "https://www.douban.com/people/151968962/",
43             }
44         print '正在登陆中......'
45         ####FormRequest.from_response()进行登陆
46         return [
47             FormRequest.from_response(
48                 response,
49                 meta={"cookiejar":response.meta["cookiejar"]},
50                 headers=self.header,
51                 formdata=data,
52                 callback=self.get_content,
53             )
54         ]
55     def get_content(self,response):
56         title=response.xpath('//title/text()').extract()[0]
57         if u'登录豆瓣' in title:
58             print '登录失败,请重试!'
59         else:
60             print '登录成功'
61             '''
62             可以继续后续的爬取工作
63             '''

ruokaui.py代码如下:

我所用的是若块打码平台,选择url识别验证码,直接给打码平台验证码图片的链接地址,传回验证码的值。

  1 # -*- coding: utf-8 -*-
  2 import sys, hashlib, os, random, urllib, urllib2
  3 from datetime import *
  4 
  5 class APIClient(object):
  6     def http_request(self, url, paramDict):
  7         post_content = ''
  8         for key i
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python--function 下一篇动态规划思想详解及示例实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目