Python爬蟲框架scrapy抓取旅行家網所有遊記!從此出遊不發愁!


Scrapy是一個用 Python 寫的 Crawler Framework ,簡單輕巧,並且非常方便。Scrapy 使用 Twisted 這個異步網絡庫來處理網絡通訊,架構清晰,並且包含了各種中間件接口,可以靈活的完成各種需求。

以上是網上摘錄的一段介紹scrapy框架的文字,大過年的,懶癌高發期...

安裝scrapy,pip可以解決你的問題: pip install scrapy。

這裏插一句,如果你運行代碼後看到這個錯誤:

ImportError: No module named win32api

深坑出現,你需要安裝pywin32,如果已經安裝了pywin32,還出現錯誤,你仍需手動將你python安裝目錄下\Lib\site-packages\pywin32_system32下:pythoncom27.dll, pywintypes27.dll兩個文件複製到c:\windows\system32下!當然如果不是windows系統的話,請無視!

話不多說,開始我們的爬蟲吧!

首先來分析網頁結構:

1、url:https://you.autohome.com.cn 打開旅行家的主頁,這裏我用的是火狐瀏覽器,看下圖

點擊精彩遊記,然後跳出遊記頁面,

然後在點擊全部遊記,我們的目標就出現了,拉到最下面,一共3993頁,1頁20篇

很簡單的一個網站

2、我們開始分析每頁的數據,直接打開F12抓包,然後刷新網頁或者點擊其他頁,看看服務器返回的請求都有哪些!

找到一個get請求,裏面是json格式的內容,裏面有遊記的作者、標題、縮略圖等等內容,ok,我們可以開始寫代碼了!

Ps:這裏我們只做個簡單的頁面目錄的爬蟲,就不一 一抓取文章內容了(如果有需要的小夥伴可以自行添加相關內容)。

3、打開cmd新建一個scrapy框架,命令爲:scrapy startproject autohome ,然後系統自動幫我們建立好相關的目錄和py文件,我們仍需手動建立一個spider.py(文件名可自取)來放入我們的爬蟲

先打開item.py,這裏存放的是我們的目標,告訴爬蟲我們要爬取的內容是什麼!代碼如下:

然後打開setting.py(如無必要,不要修改這裏的內容),將ROBOTSTXT_OBEY的值改爲False(不改的話,有些內容爬不到,這裏是選擇是否遵循robots協議),然後將你的UA寫入下面的頭部信息中!

其他都不用管了。最後打開spider文件夾,在這裏我們要開始寫我們的爬蟲了!

4、打開新建的py文件,先導入用到的模塊

(導入模塊後有錯誤提示可以不用理會),寫入如下代碼:

第6行的name是唯一的,可自行命名

第7行爲定義爬蟲的範圍,也就是允許執行的url範圍是:autohome.com.cn,注意這裏是列表形式

第9.10.11行爲抓取的內容所在url,通過yield Request返回,上圖未截全部分爲:

yield Request('https://you.autohome.com.cn/summary/getsearchresultlist?ps=20&pg={}&type=3&tagCode=&tagName=&sortType=3'.format(pg),self.parse)

因爲只有3993頁,直接for循環取到所有頁碼,定義了start_requests函數後可省略start_urls列表也就是起始列表

第14行開始定義爬取方法

第15行,將json格式的內容賦值給一個變量

第16行,初始化導入的Items文件中所定義的類

第17-24行,循環json格式的內容,並將相應的值賦值給item,這裏item是一個字典格式,然後返回給items文件

到這裏就寫完了這個爬蟲,爲方便使用,我們直接將結果寫入json格式

打開cmd,命令:scrapy crawl autohome -o autohome.json -t json

因爲我們爬取的內容很少,所以速度還是很快的

大概十來分鐘吧,數據就抓取完成!來看看結果,因爲是json格式,截取一小段找個在線解析的網頁就可以看了

驗證一下:

So easy!

喜歡就關注下唄(;°○° )!

發佈了32 篇原創文章 · 獲贊 41 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章