爬蟲教程 用Scrapy爬取豆瓣TOP250

2021-08-21 20:17:54 字數 3721 閱讀 2683

文章首發於 guanngxu 的個人部落格:用scrapy爬取豆瓣top250

最好的學習方式就是輸入之後再輸出,分享乙個自己學習scrapy框架的小案例,方便快速的掌握使用scrapy的基本方法。

本想從零開始寫乙個用scrapy爬取教程,但是官方已經有了樣例,一想已經有了,還是不寫了,盡量分享在網上不太容易找到的東西。自己近期在封閉培訓,更文像蝸牛一樣,抱歉。

scrapy簡介

scrapy是乙個為了爬取**資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。

其最初是為了 頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取api所返回的資料(例如 amazon associates web services ) 或者通用的網路爬蟲。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-smtnphgv-1602225022295)(網路爬蟲/scrapy.png)]

如果此前對scrapy沒有了解,請先檢視下面的官方教程鏈結。

架構概覽:

scrapy入門教程:

爬蟲教程

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-6fasrixq-1602225022297)(網路爬蟲/豆瓣top250首頁.png)]

item物件是種簡單的容器,儲存了爬取到得資料。其提供了類似於詞典的api以及用於宣告可用欄位的簡單語法。所以可以宣告item為如下形式。

class

doubanitem

(scrapy.item)

:# 排名

ranking = scrapy.field(

)# 電影名稱

title = scrapy.field(

)# 評分

score = scrapy.field(

) pople_num = scrapy.field(

)# 導演

director = scrapy.field(

)# 年份

year = scrapy.field(

)# 地區

area = scrapy.field(

)# 型別

clazz = scrapy.field(

)# 電影描述

decsription = scrapy.field(

)

我們抓取到相應的網頁後,需要從網頁中提取自己需要的資訊,可以使用xpath語法,我使用的是beautifulsoup網頁解析器,經過beautifulsoup解析的網頁,可以直接使用選擇器篩選需要的資訊。有一些說明寫到**注釋裡面去了,就不再贅述。

chrome 也可以直接複製選擇器或者xpath,如下圖所示。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-syqxx9kq-1602225022299)(網路爬蟲/複製選擇器.png)]

class

douban_spider

(spider)

: count =

1# 爬蟲啟動命令

name =

'douban'

# 頭部資訊,偽裝自己不是爬蟲程式

headers =

# 爬蟲啟動鏈結

defstart_requests

(self)

: url =

''yield request(url, headers=self.headers)

# 處理爬取的資料

defparse

(self, response)

:print

('第'

, self.count,

'頁')

self.count +=

1 item = doubanitem(

) soup = beautifulsoup(response.text,

'html.parser'

)# 選出電影列表

movies = soup.select(

'#content div div.article ol li'

)for movie in movies:

item[

'title'

]= movie.select(

'.title')[

0].text

item[

'ranking'

]= movie.select(

'em')[

0].text

item[

'score'

]= movie.select(

'.rating_num')[

0].text

item[

'pople_num'

]= movie.select(

'.star span')[

3].text

# 包含導演、年份、地區、類別

info = movie.select(

'.bd p')[

0].text

director = info.strip(

).split(

'\n')[

0].split(

' '

) yac = info.strip(

).split(

'\n')[

1].strip(

).split(

' / '

) item[

'director'

]= director[0]

.split(

': ')[

1]item[

'year'

]= yac[0]

item[

'area'

]= yac[1]

item[

'clazz'

]= yac[2]

# 電影描述有為空的,所以需要判斷

iflen

(movie.select(

'.inq'))

isnot0:

item[

'decsription'

]= movie.select(

'.inq')[

0].text

else

: item[

'decsription']=

'none'

yield item

# 2,自己根據url規律構造位址,這裡使用的是第二種方法

next_url = soup.select(

'.paginator .next a')[

0]['href'

]if next_url:

next_url =

''+ next_url

yield request(next_url, headers=self.headers)

然後在專案資料夾內開啟cmd命令,執行scrapy crawl douban -o movies.csv就會發現提取的資訊就寫入指定檔案了,下面是爬取的結果,效果很理想。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-tpvl1vqx-1602225022300)(網路爬蟲/爬取結果.png)]

完整**:

python爬蟲之scrapy爬取豆瓣電影(練習)

開發環境 windows pycharm mongodb scrapy 任務目標 任務目標 爬取 豆瓣電影top250 將資料儲存到mongodb中。items.py檔案 coding utf 8 define here the models for your scraped items see d...

爬蟲 豆瓣電影爬取案例

直接上 僅供參考。目標爬取資料是某地區的 正在上映 部分的資料,如下圖 完整 如下 usr bin python coding utf 8 from lxml import etree import requests 目標 爬取豆瓣深圳地區的 正在上映 部分的資料 注意點 1 如果網頁採用的編碼方式...

scrapy框架爬取豆瓣讀書(1)

scrapy,python開發的乙個快速 高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。scrapy用途廣泛,可以用於資料探勘 監測和自動化測試。scrapy吸引人的地方在於它是乙個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如basespi...