Scrapy模拟登陆豆瓣抓取数据

news/2024/7/19 9:26:06 标签: python, 爬虫, 开发工具

scrapy  startproject douban

其中douban是我们的项目名称

2创建爬虫文件

进入到douban 然后创建爬虫文件

scrapy genspider dou douban.com

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

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

创建后的dou.py的内容为:

 

3然后使用pycharm打开douban工程

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

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

# -*- 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,我们可以在该方法下提取我们想要的字段。可以参考上面提到的博客连接,本文主要记录自己在学习爬取豆瓣需要破解的一些反爬取的手段。
--------------------- 

转载于:https://www.cnblogs.com/ly570/p/11284682.html


http://www.niftyadmin.cn/n/928100.html

相关文章

windows搭建ntp时间服务器

2019独角兽企业重金招聘Python工程师标准>>> 参加文献 windows搭建ntp时间服务器全球可用的NTP服务器列表与解析服务注意事项 执行net stop w32time && net start w32time报错 错误描述:"时间服务器未启动" 解决方案:直接执…

后一单点击触发事件

最后返回数据到页面中//点击维修单后一单事件$("#HouYiWXD").click(function () {//查询维修单行总数j;DanShu;i shuzu[j];if (j shuzu.length) {layer.msg(“这是最后一张维修单了!老板”, { icon: 0, skin: “layui-layer-molv” });j–;DanShu–;} e…

Unity Shader基础

Shader NameShader “Custom/Myshader” //“Custom/Myshader”是在unity中找到该shader的路径{}Shader Properties//决定哪些参数在shader Inspector中显示//_Name("Display Name",type)defualtValue[{options}]Shader "Custom/MyShader"{Properties{_Int…

前一单点击触发事件

在日常项目中,总会有很多单子,有时候为了方便查找,就做了一个查询功能,但是,这里讲的是一个前一单后一单的点击事件,在单子少的时候查找十分的方便,在查找两个相邻的单子时,很好做对…

hadoop-3.0.0与hbase-2.1.0 快速安装

基于环境:centos7.6.1810,jdk 1.8.0_77,4G的系统内存,建议安装CentOS7-Minimal版本 hadoop-3.0.0安装 vi /etc/hosts192.168.118.129 master vi /etc/hostnamemaster vi /etc/security/limits.conf * soft nproc 4096* hard nproc 4096* soft nofile 655…

认识setFactory

平常设置或者获取一个View时,用的较多的是setContentView或LayoutInflater#inflate,setContentView内部也是通过调用LayoutInflater#inflate实现(具体调用在AppCompatViewInflater#setContentView(ind resId)中)。 通过LayoutInflater#inflate可以将xml布…

Chef宣布100%开源,要走红帽模式?\n

4月2日,自动化配置管理工具Chef官方博客发布博文宣布了两件事情: 从现在起,Chef将扩展开源许可范围,将其100%的软件纳入Apache 2.0许可证(与现有的Chef Infra,Chef InSpec和Chef Habitat许可条款…

如何创建自定义的Resource实例

由Resource的构造函数Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)了解到,需要获取app外部apk文件资源的Resource对象,首先需要创建对应的AssetManager对象。 public final class AssetManager implements AutoClosea…