最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Scrapy爬取豆瓣電影TOP250并保存數(shù)據(jù)、下載海報(bào)圖片

2023-03-14 15:14 作者:碼夫破石  | 我要投稿

利用scrapy爬取數(shù)據(jù)并保存到Excel,Sqlite,Mysql,Json,Csv。其中Json和csv文檔,scrapy是集成了的,這里主要解決一下中文亂碼的問題。目標(biāo)網(wǎng)站——https://movie.douban.com/top250。需要爬取的字段為排名,中文標(biāo)題,評(píng)分,評(píng)價(jià)人數(shù)電影的主題,內(nèi)頁的片長,上映日期還有電影簡介。

環(huán)境:

????---windows 11

????---python 3.8.9

????---Pycharm

????---scrapy 2.7.1

首先打開windows命令終端,切換到想保存項(xiàng)目的文件夾,如:D:\Python Porjects:

新建scrapy項(xiàng)目:

切換到douban文件夾:

在該文件夾下創(chuàng)建兩個(gè)爬蟲模板:

創(chuàng)建好后,在windows資源管理器中打開項(xiàng)目所在目錄,右鍵Open Folder as PyCharm Project。也可以先打開PyCharm,在PyCharm的歡迎界面將項(xiàng)目文件夾拖入。

打開之后,為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境,懶的話可以直接用略過。虛擬環(huán)境的用處一般是項(xiàng)目需要給別人用,需要打包當(dāng)前環(huán)境下所有的依賴項(xiàng)的時(shí)候。

虛擬環(huán)境創(chuàng)建方法:在PyCharm中,F(xiàn)ile——settings——Project:(項(xiàng)目名)——單擊Python Interpreter,找到Python Interpreter最右邊的齒輪,單擊它,Add,在彈出的選項(xiàng)中(Virtualenv Environment)選擇Location(路徑),Base interpreter為默認(rèn)當(dāng)前默認(rèn)解釋器就好。其他的不用填,直接點(diǎn)ok。

創(chuàng)建好虛擬環(huán)境后,所有的依賴項(xiàng)都從虛擬環(huán)境安裝。在當(dāng)前項(xiàng)目下的PyCharm中,選擇底部的Terminal,打開Pycharm內(nèi)置的終端,查看當(dāng)前虛擬環(huán)境下的依賴項(xiàng):

當(dāng)自己的項(xiàng)目需要給別人用時(shí),依賴項(xiàng)打包:

正文開始

1,設(shè)置爬蟲字段

安裝好依賴項(xiàng)后,切換到項(xiàng)目下的items.py文件,先來設(shè)置預(yù)爬取的字段,代碼如下:

2,編寫爬蟲文件:

接著切換到項(xiàng)目文件夾下的爬蟲文件db.py,開始解析響應(yīng)。代碼如下:

在終端運(yùn)行scrapy crawl db,字段都采集到了,并且數(shù)據(jù)格式都正確。但是,這僅僅是第一頁的數(shù)據(jù),接下來修改一下爬蟲代碼:

修改的部分在第一個(gè)回調(diào)函數(shù)parse()的最后,next_page_urls部分的代碼就是翻頁的邏輯。

有一些邏輯(比如scrapy的crawl模板),再比如從開始請求的時(shí)候就構(gòu)造好十個(gè)頁面的鏈接,代碼如下:

上面的兩種情況可能會(huì)導(dǎo)致多爬25條,那是因?yàn)榈谝豁摰逆溄佑袃蓚€(gè):

上面這兩個(gè)鏈接,在scrapy調(diào)度器里是兩個(gè)不同的url,它會(huì)給兩個(gè)鏈接進(jìn)行排隊(duì),然后交給引擎,引擎再交給下載器下載,下載后引擎交給爬蟲處理,爬蟲處理出來的數(shù)據(jù)是一樣的,但是鏈接不一樣,所以會(huì)多出25條。要解決這個(gè)問題,最簡單的辦法就是將start_urls改為:https://movie.douban.com/top250?start=0&filter=,釜底抽薪。

3,下載器中間件設(shè)置COOKIES:

a, 為請求設(shè)置cookies

實(shí)現(xiàn)好了翻頁之后,最重要要做的事就是模擬登錄,豆瓣電影,請求過多,Ip就會(huì)被封了,登錄后就可以無限訪問。設(shè)置cookies是一種很好的辦法。先從網(wǎng)頁登錄一下豆瓣賬號(hào),打開瀏覽器的開發(fā)者調(diào)試工具,將請求頭中的cookies復(fù)制下來。然后切換到項(xiàng)目文件下的middlewares.py——下載器中間件,為請求設(shè)置cookies,代碼如下:

為了簡化代碼,將原來的爬蟲中間件全部pass掉了,下載器中間件的里的類方法也pass掉了。只在類方法process_request()中設(shè)置了cookies。運(yùn)行的時(shí)候還是得加上。

b,隨機(jī)的User-Agent

如果要切換隨機(jī)的User-Agent,也是在中間件里定義,代碼如下:

c,為請求設(shè)置代理或者代理池(略)

寫好后,在項(xiàng)目文件夾下的settings.py文件中開啟中間件,代碼如下:

4,Scrapy數(shù)據(jù)管道保存數(shù)據(jù)

scrapy處理數(shù)據(jù)用到的是管道文件pipelines.py,我打算保存數(shù)據(jù)到csv(內(nèi)置),json(這個(gè)其實(shí)scrapy內(nèi)置了,但是中文會(huì)亂碼,通過管道來處理,Excel,Sqlite,Mysql。

首先csv和json保存方法很簡單,打開終端:

管道文件編寫都在項(xiàng)目文件夾下的pipelines.py中。

a,保存Json文件數(shù)據(jù)的管道:

寫好之后在項(xiàng)目文件夾下的settings.py文件中配置管道:

b,保存數(shù)據(jù)到csv文件的管道:

只要將encoding的值寫成utf-8-sig,用excel打開的時(shí)候就不會(huì)出現(xiàn)亂碼的情況。寫好之后在settings.py中配置管道。

c,保存數(shù)據(jù)到Excel文檔的管道:

管道寫好后,在項(xiàng)目文件夾下的settings.py中啟用管道:

d,保存數(shù)據(jù)到sqlite數(shù)據(jù)庫的管道:

同樣的,在settings.py中開啟管道:

e,第五個(gè)管道是MySql,代碼如下:

寫好之后在settings.py中配置管道:

f,保存海報(bào)圖片的管道:

我在預(yù)設(shè)字段的時(shí)候預(yù)設(shè)了電影的海報(bào),那就最后再配置一個(gè)下載文件的管道,這個(gè)管道要繼承scrapy內(nèi)置的文件管道,對(duì)海報(bào)圖片進(jìn)行重命名(以電影名稱命名),代碼如下:

寫好之后在settings.py中配置管道并開啟文件存儲(chǔ)路徑:

下載海報(bào)圖片沒有繼承scrapy的ImagesPipeline,因?yàn)閟crapy的圖片管道是繼承文件管道的,而且scrapy在請求圖片下載的時(shí)候可能會(huì)多幾個(gè)字節(jié)少幾個(gè)字節(jié)都是有可能的,但是下載文件肯定是原數(shù)據(jù)下載,也就是說,如果在下載高清圖片的時(shí)候,圖片管道和文件管道的質(zhì)量可能會(huì)相差很多。用scrapy下載文件,推薦用文件管道。如果遇到因?yàn)閞obots文件規(guī)則禁止下載圖片的話,在settings.py里將遵循robots的規(guī)則設(shè)定改為False就行了:

至此,一個(gè)爬取豆瓣電影TOP250的爬蟲就制作完成了。

最后運(yùn)行:

scrapy crawl db

不出意外的話,所有數(shù)據(jù)都會(huì)保存到指定的位置。

Scrapy爬取豆瓣電影TOP250并保存數(shù)據(jù)、下載海報(bào)圖片的評(píng)論 (共 條)

分享到微博請遵守國家法律
兴海县| 大田县| 河北区| 梅河口市| 黎川县| 馆陶县| 建水县| 大悟县| 东山县| 犍为县| 隆德县| 浦北县| 成安县| 青铜峡市| 康平县| 敦化市| 庆安县| 南昌县| 崇礼县| 皮山县| 莱阳市| 蓝山县| 瑞安市| 龙游县| 江油市| 舟山市| 南京市| 上蔡县| 乌兰察布市| 上林县| 保德县| 苍溪县| 镇江市| 德惠市| 华蓥市| 扬中市| 双峰县| 屯门区| 山阳县| 松阳县| 古交市|