我們使用scrapy簡單代碼爬取豆瓣電影排行榜並生成excel表格:

1.首先還是創建一個scrapy項目:

命令行:

scrapy startproject dianying

最後一個dianying是項目名稱,自己填個喜歡的就行。

2.由於豆瓣電影需要檢查user-agent所以要在settings中添加一行:

USER_AGENT = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.

填自己的瀏覽器上的user-agent就行。

3.然後再spiders文件夾下,建立一個xxx.py文件,名字隨意,輸入代碼:

import scrapy

class DySpider(scrapy.Spider):
name = dy
start_urls = [https://movie.douban.com/top250,]

def parse(self, response):
for move in response.css(div.info):
yield {
name:move.css(span.title::text).extract(),
mark:move.css(span.rating_num::text).extract(),
quote:move.css(span.inq::text).extract(),
info:move.css(div.bd p::text).extract(),
}
next_page = response.css(span.next a::attr(href)).extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)

從是到下依次是:

爬蟲的名字

開始鏈接(可以的多個的)

parse這個函數是默認的初始函數,也就是會自動得到start_urls中的response

for開始先劃分大塊,再劃分小塊,這裡我故意用的css選擇scrapy還支持xpath選擇,建議用xpath(主要是大家都用這個),當然非要用正則表達式,Beautifulsoup也是可以的。直接用yield返回數據。

next_page部分,找出next中的鏈接部分,如果next_page有東西,那麼就使用urljoin將這個鏈接載入在初始url中,然後callback給自己,繼續爬取。urljoin這個函數,我幾乎沒有看到什麼人用,真的是良心推介,誰用就知道,省去構造鏈接的很多麻煩。

4.保存:

spiders目錄下運行命令行:

scrapy crawl dy -o 1.csv

這個命令的意思是:scrapy craw dy 運行名字是dy的爬蟲 -o 保存 1.cvs 文件名1,格式csv

scrapy還支持直接保存為 json jl等格式(你故意把格式部分輸錯,就知道支持那些了),我反正一般小體積的文件都直接邊跑邊存了。

5.整理:

文件存下來是亂碼,excel打開需要需要BOM,而存下來的數據沒有。

使用sublime text打開保存的csv文件:

就可以用excel打開你的保存數據了。

6.關於抓取時的調試:(這個我很少見人講)

使用命令行:

scrapy shell "你想調試的網頁"

windows系統下,鏈接務必使用雙引號

這裡以

scrapy shell 「baidu.com」

為例子,會出現:

然後我們輸入需要測試是否可以抓取到內容:

response.css(title)

也可以在response後面用xpath()來檢查自己的抓取的內容是否正確。

接下來再學習配置scrapy - scrapy_redis - 反反扒取:post,ajax(一個賈克斯?)-利用redis做分散式爬蟲。大家就可以搞事情去了(我知道你們的目的就是搞事情)。

我也是菜鳥一個,歡迎大家和我一起搞事情

要搞事也請務必加我一個!!


推薦閱讀:
相关文章