簡單scrapy爬蟲爬取北美一手sneaker新聞
1 人贊了文章
0. 背景
最近由於Nike連續發力,Ins上又一次被各種聯名刷屏。。。
讓我這個偽鞋販子突然又有點小想法。
那麼第一步就是要找出最近新鞋的發售方向,所以來寫一個scrapy的爬蟲來爬取每天的sneaker新聞。
1. 需求
1.1 爬取各北美新聞網站(目前已添加hypebeast和sneakernews)P.S. hypebeast是有中國站但是和美國版的新聞並不是同步的考慮再三還是寫一下。
1.2 實現自動化。畢竟不自動的話和自己上網看有什麼分別
1.3 篩選、清洗新聞。畢竟我這個偽販子只關心最火的和最賺錢的,當然好看也很重要但是再寫個CNN給鞋打分還是太費時了。。(其實不是不行)
2. 環境
macOS Sierra
python 3.6
scrapy
Pycharm
3. 準備工作
開始項目
scrapy startproject hypebeast_sneaker
用Pycharm打開項目,是這樣的:
這樣我們就有了一個爬蟲。
4. 正式寫碼
4.1 單頁面爬蟲
要知道我們用scrapy爬下所有的頁面是沒有用的,我們要的只需要每一篇文章的發布時間、瀏覽量、題目以及文章url。
首先我們要做的就是觀察hypebeast的html。。。
在頁面右鍵「檢查」
還好chrome有滑鼠跟隨功能(檢查窗口左上角滑鼠型按鈕,這條命都是它給的。。。)
我們要找的信息都在這個塊中。
所以我們只需要先在爬蟲的parse中用selector找出每個文章塊:
articals = selector.xpath(//div[@class="post-box-content-container"])
具體的xpath使用教程大家可以上網找有很多都寫的很全面
下一步我們就需要處理每一篇文章的信息了。
我們用同樣的辦法找出文章塊中各種信息的位置:
title_div = artical.xpath(div[@class="post-box-content-title"])artical_mata = artical.xpath(div[@class="post-box-content-meta"])title_text = title_div.xpath(a/@title).extract()[0]artical_url = title_div.xpath(a/@href).extract()[0]datetime = artical_mata.xpath(span[@class="time"]/time).extract()[0]views = artical_mata.xpath(div[@class="post-box-stats"]/hype-count/span[@class="hype-count"]/text()).extract()[0]
下面要做的就是把爬到的數據輸出,我們暫時先用scarpy輸出到本地csv文件。
打開items.py,把我們想要的數據寫入Item Class:
下一步是在parse中加入輸出所爬取的信息的代碼:
item[url] = artical_urlitem[title] = title_textitem[views] = viewsitem[time] = datetimeyield item
然後在setting中加入輸出設置:
FEED_URI = u"/Users/stev/Desktop/news/test.csv"FEED_FORMAT = CSVFEED_EXPORT_ENCODING = utf-8
記得一定要設置encoding,不然出來會是亂碼。
好的下面,就可以運行一下:
發現只爬了十個就停了。。。。。。。。。。。。。
原來網頁是動態載入的。。。。。。。
那麼就需要模擬瀏覽器找出request。。。。。。。。
還好在絕望的時候滑著hypebeast的頁面,看了一眼它的url:
https://hypebeast.com/footwear/page/2
那麼只需要用到多URL爬蟲的方法就可以了
4.2多URL爬蟲
目前沒什麼其他思路。。。用的方法是用 for loop爬1-4頁(每天的feed量在兩到三頁左右),同時對比昨天存儲的最晚的爬到的url,爬到即停止。
這裡我們需要yield和 callback
由於需要多url爬蟲,這裡需要把之前寫的parse方法獨立出去。
並在原來的parse中寫入,新的代碼:
for page_num in range(1,5,1): crawling_url = url + str(page_num) yield scrapy.Request(crawling_url, callback=self.parse_hype_pages)
需要注意的是,由於yield和return的機制不同,yield是直接生成generator。
4.3多網站
實在肝不動了。。。去複習會回來寫。。。。
推薦閱讀:
※UA、Nike、Adidas哪家更好?
※Nike有工裝馬甲嗎?
※咕咚運動和 Nike running 有哪些區別?哪個好用些?
※nike roshe是什麼意思?
※女生為什麼大部分喜歡NIKE、NEW BALANCE,而不是ADIDAS的波鞋?