本人學習參考的是博主崔慶才的系列教程
當然是比我寫的詳細的多啦,下面是我自己總結的學習過程
簡介
我們來看看要獲取的電影信息的網址
肖申克的救贖?https://movie.douban.com/subject/1292052/
霸王別姬 ?https://movie.douban.com/subject/1291546/
這個殺手不太冷 https://movie.douban.com/subject/1295644/
第一頁 https://movie.douban.com/top250?start=0&filter=
第二頁 https://movie.douban.com/top250?start=25&filter=
……
都很有規律不是嗎?而在Scrapy里面,就可以設定我們想要的規律,Scrapy就可以對這些符合規律的網址及頁面信息進行處理。先來看看成果吧,這一部分中,我們想要的結果就是輸出排行榜里面的電影名稱:
而且我們其實可以做的更好。
安裝
管理員命令行模式下輸入
Pip install scrapy
開始安裝 之前我出現的問題是沒有安裝依賴的庫?
先來一個
Pip install lxml
即可 出現問題勤用搜索引擎
項目初始化
建立一個文件夾douban,并在這個文件夾處開啟cmd 輸入
Scrappy startproject db
Pycharm用這個文件夾創建Project,douban/db處創建一個方便IDE運行的文件run.py?
輸入
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'douban'])
打開douban/db/items.py,如該文件的名字,這個是我們從豆瓣這個“倉庫”里取出來的“貨”,我們想要的是什么“貨”呢?電影名字。
classDbItem(scrapy.Item):
? ? name=scrapy.Field()
douban/db/db/spiders下創建spider.py,這個文件用來爬取網頁,處理網址,我們需要告訴他我們想去的“倉庫”該怎么走,該怎么爬。
“倉庫”的入口是start_urls,走路的規則是必須沿著allow這個參數規定的網址和規律(這里參考正則表達式 注意轉義符\?)走,找到地點之后交給parse_item這個人來干活,follow=True表示順蔓摸瓜,某一個地點的相連的地點同樣要去拜訪一下。
這里這些地點就是
第一頁https://movie.douban.com/top250?start=0&filter=
第二頁https://movie.douban.com/top250?start=25&filter=
……等等“
“貨物”信息的獲取
下面輪到parse_item這個人來干活了,他需要從上述指定地點找到我們要的“貨物”的信息,“貨物”位于何處可以通過Xpath來查找。網頁上點右鍵查看源代碼,被給包住了,Xpath的功能就是通過這些標簽來找到特定信息。
瀏覽器F12打開調試控制臺,
指到該信息處,右側就會顯示出對應的代碼
點右鍵有個好東西,
這個就可以拿來用啦。不幸的是,Scrapy經常不能識別出來,所以我們還需要會一點Xpath的語法(查一查10分鐘搞定),參考Copy的自己修改一下。這里推薦Chrome的Xpath Helper這個插件,可以查看自己寫的Xpath正不正確。
def parse_item(self,response):
name=response.xpath('//*[@class="title"][1]')
print(name)
好了,測試一下,運行run.py出現以下問題,403 forbidden,網站懷疑我們是機器人操作,
于是在setting.py里面偽裝我們是瀏覽器的正常操作,
增加一個
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
即可。
成功啦!
總結
Scrapy可用來爬特定規則的網址,并進行處理;allow、follow等參數告訴程序如何“順蔓摸瓜”;Xpath可方便的找出網頁中的信息,本文舉到的例子僅僅是提取電影名,我們其實如文章一開始的圖片可以做的更豐富一些,對分數、演員、導演等加入一些判斷,選擇我們需要的電影。
本項目代碼: