看的课程是21天搞定分布式爬虫,应该是几年前的了,课程当时还是验证码,现在登录和之前都不一样了现在需要你拖动滑块完成拼图
之前的页面
![](https://img-blog.csdn.net/20180221031317973?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3hpbmdmYW4zMTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
现在验证码都变成拼图了
![](https://img-blog.csdnimg.cn/20210325133853660.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NlcmVhc3Vlc3Vl,size_16,color_FFFFFF,t_70)
学学原理吧
首先创建scrapy项目
首先进入到你想把这个项目存放的目录。然后使用以下命令创建:
scrapy startproject [项目名称]
使用命令创建一个爬虫
cd 项目名称
scrapy gensipder douban "douban.com"
创建完成后目录如下:
创建一个start方便我们在pycharm进行打印
from scrapy import cmdline
cmdline.execute("scrapy crawl douban".split())
编写Scrapy项目代码:
1、settings.py(非常重要)
ROBOTSTXT_OBEY = False
设置头文件
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
}
DOWNLOADER_MIDDLEWARES = {
'douban_login.middlewares.DoubanLoginDownloaderMiddleware': None,
}
使用scrapy.Formrequest.from_response()
进行登陆, 自动解析当前登陆url,找到表单,发送post请求
参考代码:
import scrapy
from scrapy.http import Request,FormRequest
#导入用于爬取网页验证码
import urllib.request
class DoubanspiderSpider(scrapy.Spider):
name = 'doubanSpider'
allowed_domains = ['douban.com']
#浏览器的header
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 OPR/54.0.2952.71"}
#start_urls = ['http://www.douban.com/']
#设置提交登录信息的网址,注意要设置cookie储存登录信息以实现连续爬取
def start_requests(self):
return [Request("https://accounts.douban.com/login", callback=self.parse, meta={"cookiejar": 1})]
#处理数据的方法
def parse(self, response):
#尝试获取网页中的验证码链接
captcha = response.xpath("//img[@id='captcha_image']/@src").extract()
#根据是否爬取到了验证码图片执行相关处理
if len(captcha) > 0:
print("此时有验证码")
#爬取验证码图片至本地,提示用户进行输入
localpath = "E:/Scrapy/result/captcha.png"
urllib.request.urlretrieve(captcha[0], filename=localpath)
print("请查看本地验证码图片并输入验证码")
captcha_value = input()
#设置需要提交至登录URL的数据,包括用户名、密码、验证码以及登录成功的回调页
data = {
"form_email": "正确的用户名",
"form_password": "正确的对应密码",
"captcha-solution": captcha_value,
"redir": "https://www.douban.com/people/164741792/",
}
else:
print("此时没有验证码")
#设置需要提交至登录URL的数据,包括用户名、密码以及登录成功的回调页
data = {
"form_email": "正确的用户名",
"form_password": "正确的对应密码",
"redir": "https://www.douban.com/people/164741792/",
}
print("登录……")
#登录成功后执行后续方法
return [FormRequest.from_response(response,
meta={"cookiejar": response.meta["cookiejar"]},
headers=self.header,
formdata=data,
callback=self.next,
)]
#登录成功后,提取用户信息
def next(self, response):
print("此时已经登陆完成并爬取了个人中心的数据")
title = response.xpath("/html/head/title/text()").extract()
note = response.xpath("//div[@class='note']/text()").extract()
print(title[0])
print(note[0])
参考资料:https://blog.csdn.net/Smart3S/article/details/82946641
https://blog.csdn.net/qq_42293758/article/details/87925623
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)