javbus爬虫-老司机你值得拥有
起因
有个朋友叫我帮忙写个爬虫,爬取javbus5上面所有的详情页链接,也就是所有的https://www.javbus5.com/SRS-055这种链接,
我一看,嘿呀,这是司机的活儿啊,我绝对不能辱没我老司机的名声(被败坏了可不好),于是开始着手写了
构思
- 爬虫调度启动程序crawler.py
- 页面下载程序downloader.py
- 页面解析程序pageparser.py
- 数据库入库与去重管理程序controler.py
爬取入口为第一页,当页面中存在下一页的超链接继续往下爬,这是个死循环,跳出条件为没有了下一页的链接
在某一页中解析页面,返回所有的详情页链接,利用迭代器返回,然后在主程序中调用解析程序对页面信息进行解析并包装成字典返回,其中用详情页网址作为数据库主键,其他信息依次写入数据库
当这一页所有的子链接爬取完成后,继续爬取下一页。
将数据存入数据库,用的是sqllite3,失败的网址页存入一个fail_url.txt。
对于增量爬取,我是这么做的,当爬取到相同的网址时结束程序,这么做也有漏洞,才疏学浅,我没想到太好的办法,希望有好办法的给我说一声(布隆过滤正在研究之中),如果用数据库查询去重,那么势必导致二次爬取,我们都知道,爬虫更多的时间是花在网络等待上
问题
在写爬虫的过程中遇到了一些问题
在墙内爬不动,爬取几个之后就失败,这个解决方案只需要全局翻墙爬取就可以了
本来之前加了多线程并发爬取,但是发现爬取一段时间后会封ip导致整体无法运行,本来想搞个代理池进行并发,结果网上免费的代理太慢太慢,根本打不开网页,于是就改回了单线程
就是我的那个不完善的增量爬取,导致了你一次爬取就需要爬取完成,不然数据库里面存在你之前爬到的,爬取到你已有的会直接停止
存在反扒策略
详情页中的磁力链接是ajax动态加载的,通过分析抓包,可以在XHR中找到是一个get请求,至于参数,我开始不知道怎么得来的,后来在html代码中找到了,我放几张图大家就明白了
我们通过对响应内容的查看可以发现磁力的加载访问了类似于这样一个网址
https://www.javbus5.com/ajax/uncledatoolsbyajax.php?gid=30100637207&lang=zh&img=https://pics.javbus.info/cover/59pc_b.jpg&uc=0&floor=921
那么这些get参数是从哪里来呢,这就是通过经验与基本功去发现了
通过对html源文件的搜索,我们即可直接发现答案
通过分析发现,后面的floor是个随机数参数,一般这种参数可以去除无影响,事实也是这样我利用HttpRequest模拟发包,对这个请求直接get,发现所有数据隐藏
那么肯定是有反扒的策略,伪造请求头,反扒也就那么几种,通过分析发现是同源策略,对Referer请求头伪造成来源网址就可以直接获取到内容了
常见的Python2.x编码问题,全部转换为unicode字节流就可以了
这个问题在我博客中已经记录了http://www.53xiaoshuo.com/Python/77.html
有兴趣的童鞋可以看看遇到的最闹心问题是详情页的项目抓取,有的详情页的类别不同,我开始只分析了一个页面,导致写的规则在有的页面上频频出错
导致后面对抓取规则进行了大改,重写了分析规则,用了个笨办法,毕竟那小块的html写的十分不规范,正则规则有三种,挺烦人
比如上图的两个就不同,html代码更是稀烂,需要判断有没有这个项,没有就设置空字节入库在这其中纠结了一个问题
就是对于这两种的比较,我想上面这种变成下面这种,毕竟第一种的话,soup.find要执行两次,但是下面这种又要比上面那个多一行,丑一点
最后我选择了第二种,所有的信息分析代码就不贴了,具体想看的直接看我的代码文件就好了
小Tips
对于动态加载的内容的爬取,能不用selenium去模拟浏览器爬取就不用,耗费资源,更好的是自己分析网络请求,然后构造
对于页面信息的解析,要多看几个页面,看是否相同,别到时候做多事情
多看别人的博客学习思路
注意
爬虫依赖的第三方库有Requests,BeautifulSoup,使用前请先pip install这两个第三方库
测试展与地址
代码地址:
- coding.net javbus_crawler
- github.com javbus_crawler
司机的名声总算是没有辱没,秋名山依旧,嘿嘿
转载请注明来源作者
- 博客:akkuman.cnblogs.com | hacktech.cn
- 作者:Akkuman
javbus爬虫-老司机你值得拥有的更多相关文章
- 老司机教你下载tumblr上视频和图片的正确姿势
本文面向初学者. 很多同学问我:“我非常想学Python编程,但是找不到兴趣点”. 还有的同学呢,找到了很好的兴趣点,但是无从下手,“玄魂老师,我想下载tumblr上的视频, 怎么下载,Python能 ...
- [BZOJ4200][Noi2015]小园丁与老司机
4200: [Noi2015]小园丁与老司机 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 106 Solved ...
- 老司机学新平台 - Xamarin开发之我的第一个MvvmCross跨平台插件:SimpleAudioPlayer
大家好,老司机学Xamarin系列又来啦!上一篇MvvmCross插件精选文末提到,Xamarin平台下,一直没找到一个可用的跨平台AudioPlayer插件.那就自力更生,让我们就自己来写一个吧! ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- 老司机学新平台 - Xamarin开发环境及开发框架初探
随着被微软收购,最近一年间,Xamarin的火爆程度与日俱增.免费.更好的VS2015集成.更好的模拟器,甚至,在windows上运行和调试iOS平台程序,让我这样接触了十几年.NET平台的老司机,即 ...
- FJNU 1196 汪老司机(DP or 建图+最短路)
1196: 汪老司机 Time Limit: 1000 MS Memory Limit: 257792 KB 64-bit interger IO format: %lld ...
- 老司机带你走进Core Animation
为什么时隔这么久我又回来了呢? 回来圈粉. 开玩笑的,前段时间ipv6被拒啊,超级悲剧的,前后弄了好久,然后需求啊什么的又超多,所以写好的东西也没有时间整理.不过既然我现在回来了,那么这将是一个井喷的 ...
- 【Bugly干货分享】老司机教你 “飙” EventBus 3
Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. EventBus对于Android ...
- cdoj 1489 老司机采花
地址:http://acm.uestc.edu.cn/#/problem/show/1489 题目: 老司机采花 Time Limit: 3000/1000MS (Java/Others) M ...
随机推荐
- Eclipse + Pydev问题 : pydev unresolved import
http://blog.csdn.net/qq_22765745/article/details/71054030http://blog.csdn.net/amghost/article/detail ...
- linux文件目录管理命令
1.touch命令 touch命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”. touch test命令可以创建出一个名为test的空白文本文件 touch命令的参数 ...
- [1]windows 内核情景分析---说明
本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神. 说明 本文结合<Windows内核情景分析>(毛德操著).< ...
- django之admin源码解析
解析admin的源码 第一步:项目启动,加载settings文件中的 INSTALLED_APPS 里边有几个app就加载几个,按照注册顺序来执行. 第二步:其中加载的是admin.py,加载每一个a ...
- 输入输出无依赖型函数的GroovySpock单测模板的自动生成工具(上)
目标 在<使用Groovy+Spock轻松写出更简洁的单测> 一文中,讲解了如何使用 Groovy + Spock 写出简洁易懂的单测. 对于相对简单的无外部服务依赖型函数,通常可以使用 ...
- Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令
Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令 今天写sh脚本发现一终止命令程序就停止运行了,检查了很久才发现后面少了个&字符导致的!错误写法:nohup ...
- make: *** /lib/modules/3.10.0-327.el7.x86_64/build: 没有那个文件或目录。 停止。
1.问题: [root@localhost]# make make -C /lib/modules/-.el7.x86_64/build M=/home/csri/poc/adore modules ...
- [转载]css3的一个控制背景的属性,background-size可以缩放大小啦
background-size需要两个值,它的类型可以是像素(px).百分比(%)或是auto,还可以是cover和contain.第一个值为背景图的width,另外一个值用于指定背景图上的heigh ...
- How to use Nissan consult 3 plus to check, make key and program?
How to use Nissan consult 3 plus to test Nissan? Firstly: get one particular Nissan consult 3 plus. ...
- 监控MySQL主从脚本
示例一: cat check_mysql_health #!/bin/sh slave_is=($(mysql -S /tmp/mysql3307.sock -uroot -e "show ...