一个基于Scrapy框架的pixiv爬虫
源码 https://github.com/vicety/Pixiv-Crawler,功能什么的都在这里介绍了
说几个重要的部分吧
登录部分
困扰我最久的部分,网上找的其他pixiv爬虫的登录方式大多已经不再适用或者根本就没打算登录……
首先,登录时显然要提交FormData,一开始我请求的是 https://accounts.pixiv.net/login?lang=zh 这个页面

这个postkey可以发现和网页代码中的这个部分(下图)中是一样的,但是用这个postKey是登录不上去的,结果见下图


登录可以成功(收到异常登录邮件),但无论你访问什么页面,它都会无限重定向回这个页面,一开始以为是header填得不完整,可是怎么改都不对
后来发现request请求 http://www.pixiv.net 得到的页面中也有一个postKey(不太明白上一个postKey的含义,难道是特意骗我们一下……)

改用这个,成功登录,剩下应该不是什么问题了
日榜部分
对于日榜的获取(虽然还没有写进去)也值得提一下,日榜的展现是下拉到底端自动获取下一页式的,分析网络请求,发现这一条的链接应该指向的就是下一页,并且去除后面的&tt=96a6bd8c731d3a46a9388f1e8cd90edf也是一样可以访问的

我们进入链接,发现是一个json文件,对于我们来说其实更加易于处理

另外说一下,这里推荐Chrome浏览器的JSONView插件,自动解析JSON成方便看的模式,火狐似乎自带这个功能
import json js = json.loads(response.text) url = js["content"][""]["url”]
可以使用类似这样的代码方便地读取json文件
另外注意load和loads函数的区别,loads用于处理字符串而load用于处理文件,对于将文件或是字符串转为json则有dump和dumps函数,就像下面这个例子
import json
data = {
'a': '',
'b': True,
'c': None,
'd': 456,
}
with open("test.json", 'w') as f:
json.dump(data, f) # test.json 内容
# {"a": "123", "b": true, "c": null, "d": 456}
搜索部分
在完成按tag搜索的部分时发现,图片div的class都是这种奇怪的格式,尽管在我的电脑上搜索了其他几个tag这些class的名字都是一样的,但是看这种class的名字就有种莫名的不安啊……可能在换个环境class也是会动态变化的

另外发现网页中的这个部分data-items的结构就是json,于是剩下的部分又变得方便很多了

图片获取
在pipeline中获取图片时header中一定要记得带referer,否则会触发p站的防盗链机制,返回403
重要的部分差不多就这些,其他按scrapy的套路走就行
最后,本来想做个GUI的,尝试用pyqt5,发现分离GUI线程和爬虫线程好像挺难解决的,两个线程间用signal通信也很困难,毕竟临时学的qypt,解决不了也正常,于是放弃做GUI的打算……
渣代码,轻喷,欢迎交流指教
一个基于Scrapy框架的pixiv爬虫的更多相关文章
- 基于scrapy框架的分布式爬虫
分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...
- python基于scrapy框架的反爬虫机制破解之User-Agent伪装
user agent是指用户代理,简称 UA. 作用:使服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等. 网站常常通过判断 UA 来给不同 ...
- 基于Scrapy框架的Python新闻爬虫
概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...
- 基于scrapy框架的爬虫
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. scrapy 框架 高性能的网络请求 高性能的数据解析 高性能的 ...
- 基于scrapy框架输入关键字爬取有关贴吧帖子
基于scrapy框架输入关键字爬取有关贴吧帖子 站点分析 首先进入一个贴吧,要想达到输入关键词爬取爬取指定贴吧,必然需要利用搜索引擎 点进看到有四种搜索方式,分别试一次,观察url变化 我们得知: 搜 ...
- 基于Scrapy的B站爬虫
基于Scrapy的B站爬虫 最近又被叫去做爬虫了,不得不拾起两年前搞的东西. 说起来那时也是突发奇想,想到做一个B站的爬虫,然后用的都是最基本的Python的各种库. 不过确实,实现起来还是有点麻烦的 ...
- 基于scrapy框架的爬虫基本步骤
本文以爬取网站 代码的边城 为例 1.安装scrapy框架 详细教程可以查看本站文章 点击跳转 2.新建scrapy项目 生成一个爬虫文件.在指定的目录打开cmd.exe文件,输入代码 scrapy ...
- python学习之-用scrapy框架来创建爬虫(spider)
scrapy简单说明 scrapy 为一个框架 框架和第三方库的区别: 库可以直接拿来就用, 框架是用来运行,自动帮助开发人员做很多的事,我们只需要填写逻辑就好 命令: 创建一个 项目 : cd 到需 ...
- Scrapy框架——CrawlSpider类爬虫案例
Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...
随机推荐
- mysql命令、mysqldump命令找不到解决
1.解决bash: mysql: command not found 的方法 [root@DB-02 ~]# mysql -u root -bash: mysql: command not found ...
- Ubuntu LVS DR模式生产环境部署
1.环境说明 系统版本:ubuntu14.04 LVS服务器:14.17.64.3 真实服务器:14.17.64.4-12 VIP:14.17.64.13 部署目的:用户请求14.17.64.13的报 ...
- Java中用FileInputStream和FileOutputStream读写txt文件,文件内容乱码的问题,另附循环代码小错误
乱码问题大概就是编码格式不一样,搜了很多都是这么说的,修改编码解决乱码问题链接: https://blog.csdn.net/weixin_42496466/article/details/81189 ...
- 软件测试开发人员需要掌握的一些基本数据结构算法(php编写)
一:冒泡排序算法 冒泡排序(Bubble Sort)算法是一种典型的交换排序算法,通过两两数据交换进行排序.如果有n个数,则要进行n-1趟比较,在第1趟比较中要进行n-1次两两比较,在第j趟比较 ...
- Centos安装Python3及设置对应版本pip
安装Python3 安装Python依赖: yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...
- opencv 直方图
1.简介 对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见.此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量. 图像直方图均衡化 ...
- C语言程序设计II—第十二周教学
第十二周教学总结(13/5-19/5) 教学内容 本周的教学内容为:11.1 知识点:指针数组的概念.11.2 知识点:函数指针.11.3知识点:单链表的基本概念,链表节点的结构定义方法,以及单向链表 ...
- K8S从入门到放弃系列-(6)kubernetes集群之kube-controller-manager部署
摘要: 1.Kubernetes控制器管理器是一个守护进程它通过apiserver监视集群的共享状态,并进行更改以尝试将当前状态移向所需状态. 2.kube-controller-manager是有状 ...
- ConcurrentHashMap能完全替代HashTable吗?
至此你应该能够明白,ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间.因为C ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的htmlreport模块
生成htmlreport的模块是我在网上随意找的一个版本,主要生成的report包括接口名称,接口url,请求数据,响应数据,断言词,断言结果等 具体的htmlreport代码如下: # -*- en ...