Scrapy模拟登录豆瓣抓取数据

scrapy  startproject doubanhtml

其中douban是咱们的项目名称python

2建立爬虫文件cookie

进入到douban 而后建立爬虫文件python爬虫

scrapy genspider dou douban.comdom

或者 scrapy genspider -t crawl dou douban.com  # 这个在建立时使用的是模板crawlscrapy

这里须要注意的是Spider的名称不能和项目的名称重复。ide

建立后的dou.py的内容为:函数

 

3而后使用pycharm打开douban工程post

模拟登录(关于模拟登陆下面这个博客写的很详细了)学习

代码中一些参数什么含义已经有注释了:以下显示

# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
from scrapy.http import Request ,FormRequest

class DouSpider(scrapy.Spider):
name = 'dou'
allowed_domains = ['douban.com']
# start_urls = ['http://douban.com/']
#target_url 表示咱们想爬取内容的地址,target_url 也能够是模拟登陆成功后你的我的中心
target_url = 'https://movie.douban.com/subject/1652592/comments?start={}&limit=20&sort=new_score&status=P'

# 编写start_requests()方法,第一次会默认调取该方法中的请求
def start_requests(self):
return [Request("https://www.douban.com/", meta={"cookiejar": 1}, callback=self.login)]
def login(self, response):
# 判断有误验证码
# 设置要传递的post信息
data = {
"ck":"",
"name":"*****",#帐号
"password":"******",密码
"remember":"false",
"ticket":""
}
# print("登陆中…")
# 经过FormRequest进行登录
return [FormRequest(url="https://accounts.douban.com/j/mobile/login/basic",
method = 'POST',
# 设置cookie信息
meta={"cookiejar": response.meta["cookiejar"]},
# 设置post表单中的数据
formdata=data,
# 不进行去重处理
dont_filter=True,
# 设置回调函数,此时回调函数为next
callback=self.next,
)]

def next(self, response):
data = response.body
with open("F:\\大讲台爬虫\\python爬虫\\scrapy\\douban\\a.html", 'wb') as f:
f.write(data)
yield Request(self.target_url,
callback=self.next2, meta={"cookiejar": True})

def next2(self, response): #response返回的是target_url对应的内容
print(response.xpath("/html/head/title/text()").extract(http://www.my516.com/heimitao/))
通过调试(调试方法能够参考个人scrapy项目如何进行调试)


login()方法中涉及的回调函数返回的信息是登陆是否成功的信息

下面是咱们的正常运行结果(中间须要在settings.py文件设置一些参数前面的一篇博客写的很好了)

 

总结:咱们能够将target_url改为咱们想在豆瓣上爬取的网页,next2方法是网页返回的response,咱们能够在该方法下提取咱们想要的字段。能够参考上面提到的博客链接,本文主要记录本身在学习爬取豆瓣须要破解的一些反爬取的手段。--------------------- 

相关文章
相关标签/搜索