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