BOOM! 一天100万条数据,5G种子文件,EpicScrapy1024轻松拿下小草网站所有种子,哈哈哈哈。php
你们好,我是铲屎官,继上一篇「Python实战:用代码来访问1024网站」以后,铲屎官利用铲屎的休息时间,专门为你们作了这期Scrapy超级爬虫实战! 专门爬取小草网站的各个板块的帖子,并下载种子文件保存在本地。哎呦,真的刁到起飞哦。废话很少说,赶忙来看吧。html
咱们此次主要使用的核心技术,是Scrapy爬虫框架。这是一款Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。框架的结构,相信不少同窗都看过这张图:python
那这里就简单的说几句:程序员
那这个东西这么牛逼,还不赶忙拿来快快用。web
在爬取东西以前,咱们须要简单分析一下小草网站的结构。爬虫,是依照URL来爬取的,那么咱们首先来分析一下小草的URL吧。编程
# 不骑马的日本人板块
http://bc.ghuws.men/thread0806.php?fid=2&search=&page=2
# 骑马的日本人板块
http://bc.ghuws.men/thread0806.php?fid=15&search=&page=2
# 英语老师板块
http://bc.ghuws.men/thread0806.php?fid=4&search=&page=2
复制代码
这是挑选了几个不一样的板块之间的URL,咱们发现,他们就是fid=XX
这个数字不一样啊。传入不一样的page参数,应该就是第几页。这样,咱们就能连续的爬取不一样page之间的信息了。
爬到页面了,咱们接下来就是要找每一个页面的post了,这就要涉及到html的知识了。因为这些页面长的都同样,他们的结构也都是差很少的,因此,咱们随便选取一个页面,来看看他post的html长什么样子。bash
<td class="tal" style="padding-left:8px" id="">
<h3><a href="htm_data/15/1805/3140529.html" target="_blank" id="">[MP4/ 1.53G] SDMU-742 和歌山から来たリアルマゾ女子 [vip1136]</a></h3>
</td>
复制代码
找到,关键信息在这里,这个 <a>
标签里。咱们看到href="htm_data/15/1805/3140529.html"
这个应该就是每个帖子的后半段URL,前半段应该是域名。最后的那个数字,应该是帖子的ID,每个帖子都有惟一的ID与之对应。标签中包裹的文字是帖子的标题,那么好,咱们就拿到这个URL来拼接出每个帖子的地址,而后在Scrapy的Spider里面yeild
出来。网络
http://bc.ghuws.men/htm_data/15/1805/3140529.html
复制代码
由于咱们的目的是要拿到:每一个帖子的标题,帖子的预览图,还有帖子的种子文件。 既然咱们已经拿到了帖子的URL,那么咱们就接着来爬第二层:帖子。 在每一个帖子的html文件中,咱们须要找到两个东西:一是缩略图,二是种子的下载地址。通过简单的点击右键,检查,发现这两个东西的html代码长这个样子:框架
<!--图片-->
<br>
<img src='https://imagizer.imageshack.com/v2/XXX/XXX/XXX.jpg' onclick="XXXXXX" style='cursor:pointer'>
<br>
<!--种子文件-->
<a target="_blank" onmouseover="this.style.background='#DEF5CD';" onmouseout="this.style.background='none';" style="cursor:pointer;color:#008000;" href="http://www.viidii.info/?http://www______rmdown______com/link______php?hash=XXXXXX&z">http://www.rmdown.com/link.php?hash=XXXXXX</a>
复制代码
这样,就能够找了图片的标签<img>
和种子文件的下载地址的标签<a>
,可是,这里就有个问题,每个post的html里面,若是找<img>
标签的话,会找到不少图片,好多图片都不是咱们想要的,这里就得根据src
里面的值来区分,我这里只是找了文件格式是非gif
图片,而且只挑选了前三个做为image_url来存储起来。而种子文件的下载地址,这就是<a>
标签包裹的内容就能够。编程语言
在这一层,咱们拿到了post的标题,图片,还有种子文件的下载URL。那么咱们下一步就是,去爬取下载种子文件的URL。这就到了爬虫的第三层。
在第三层里面,这里只有一个download
按钮,因此,咱们只须要看每一个种子的下载地址的url就能够了。
http://www.rmdown.com/download.php?reff=495894&ref=182a4da555f6935e11ff2ba0300733c9769a104d51c
复制代码
这个URL颇有意思,里面最关键的信息,就是reff
和ref
,然而,这两个值的位置,在网页的html文件中是能够找到的:
<INPUT TYPE="hidden" NAME="reff" value="495894">
<INPUT TYPE="hidden" name="ref" value="182a4da555f6935e11ff2ba0300733c9769a104d51c">
复制代码
在这个文件里面,name
的值为reff
和ref
是惟一的两个标签,这样就炒鸡好找,而后拿到他们的value
值,拼凑一下,就成了电影种子文件的的下载地址。
拿到下载地址,咱们就只须要用python进行网络请求,而后,将返回数据保存成torrent文件就能够了。这里有个小插曲:原本我尝试着用urllib3来作的,可是发现urllib3在网络请求的时候,会卡顿,这样很不爽,我google,发现这个问题仍是很广泛的,有一我的就建议用“人类最伟大的库”requests来作请求。果真,名头不是盖的,requests轻松解决了个人烦恼,之后就粉requests了,太强大了。
OK,走到这里,咱们就算是爬完了一个post,那么将爬取的信息,yield出来一个Scrapy的Item,再在pipeline中,咱们将item存储到MongoDB中,就完成啦。当这一步作完,爬虫会接着爬取下一个post或者page,直到爬取结束。
过程就是这么简单,光说不练是不行滴,尤为是我们 程序员,既得会纸上谈兵,又得会实战操练。那么咱们就看一下运行时的效果,绝对震撼:
就看到一条一条的item在产生,一个一个的torrent文件在本地磁盘保存,console里面一行一行的打印log。心里那个,酸爽。果然是,有了爬虫,简直就是有了天下。哈哈哈哈哈
好了,下面是运行了30
分钟,爬取小草网站5个板块的战果:
看到这里是否是心动了啊?想不想看代码啊?我认为学习一门编程语言,最简洁的方式就是去看别人写的好的源码,这样进步最快。想要获取EpicScrapy1024
的源码,只须要关注公众号“皮克啪的铲屎官”,回复“1024爬虫”就能够得到惊喜!源码 + 使用说明
。并且,多试几回,公众号里面有彩蛋,可能有意外惊喜哦~
至于下载的速度,这个根据你我的网络情况来定。网络若是好的话,能够多开一些请求进程。这样下载速度更疯狂。最后来扯一点这个项目中用到的关键技术吧。
DOWNLOAD_DELAY
须要设置一下。我的感受,Python的意义就是简单,方便,好玩。并且,要拿Python来干可以提高本身效率的事儿。好比下载种子,整合网站信息,为的都是节约本身宝贵的时间。如今这个年代,时间就是成本,时间就是金钱,作程序员的,就要发挥出程序员的优点,用程序,代码,来为本身节省时间,赚钱。
最后来一波福利:喜欢文章的朋友,铲屎官想请您帮忙分享一下,让更多的人来了解Python,学习Python,体会Python带来的乐趣。您也能够留言评论,分享您学习Python的感觉。您的分享,就是对我最大的支持。
关注公众号“皮克啪的铲屎官”,回复“1024爬虫”就能够得到惊喜!或者回复“1024”也能够试试哦~
Python并无结束,随之而来的,是一大波Pyton项目,关注公众号,尽请期待。
![关注公众号“皮克啪的铲屎官”,回复“1024爬虫”就能够得到惊喜](底部二维码.png