簡單scrapy爬蟲爬取北美一手sneaker新聞

簡單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的波鞋?

TAG:Sneaker | python爬蟲 | 耐克Nike |