日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第一次scrapy爬虫记录

發(fā)布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一次scrapy爬虫记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、說明

最近心血來潮想學(xué)一下爬蟲,簡單看了些速成視頻,用scrapy從一些結(jié)構(gòu)簡單的網(wǎng)站上爬了一些數(shù)據(jù)下來,這里記錄一下步驟。

下圖是把人家的ip扒下來了。

二、環(huán)境準(zhǔn)備(下載pycharm,創(chuàng)建scrapy項目)

我是在Windows上弄的,首先下一個pycharm,然后創(chuàng)建一個項目,項目名一般是取要爬的網(wǎng)站的域名+Spider,這個沒什么規(guī)定,只是習(xí)慣,比如說要爬這個網(wǎng)址:

https://www.kuaidaili.com/free/

項目名就取 kuaidailiSpider 吧:

然后 import scrapy 讓pycharm幫忙把環(huán)境準(zhǔn)備一下:


裝好之后,進(jìn)入項目根目錄:

venv\Scripts

這個目錄里面有 scrapy.exe ,復(fù)制一下這個路徑,回到項目根目錄(main.py所在的位置),打開終端:

通過相對路徑運行 scrapy.exe 創(chuàng)建一個 scrapy 項目:

./venv/Scripts/scrapy.exe startproject kuaidailiSpider

創(chuàng)建好項目之后,在pycharm里可以看到文件結(jié)構(gòu)的變化:

到現(xiàn)在為止,scrapy項目就創(chuàng)建好了。

三、創(chuàng)建spider類

終端中進(jìn)入 kuaidailiSpider 目錄,里面應(yīng)該有一個 cfg 文件的:

在這個有 cfg 文件的目錄下執(zhí)行下面的命令來創(chuàng)建一個 spider 類:

../venv/Scripts/scrapy.exe genspider kuaidaili kuaidaili.com

這個命令的意思是生成 spider 類,類名是 kuaidaili ,爬取路徑是 kuaidaili.com.

執(zhí)行成功后發(fā)現(xiàn) spider 目錄下多了一個文件 kuaidaili.py

接下來的爬蟲代碼基本都在這里完成,但是在此之前先要完成一些其他設(shè)置。

四、修改設(shè)置文件

修改 settings.py,把遵守規(guī)則改成false:

因為如果遵守規(guī)則,可能什么都爬不到,只能鋌而走險啦!

然后在請求頭這里,取消注釋,然后加一個 user-agent,這個 user-agent 你可以去瀏覽器上按F12,然后刷新網(wǎng)頁,從 network 那里找一個網(wǎng)頁,把它的 user-agent 復(fù)制過來:

這里就是說,默認(rèn)是沒有請求頭的,我們加一個,偽裝成 chrome 瀏覽器,這樣網(wǎng)站就以為我們是人了。

但是我們也不是壞人,為了不把網(wǎng)站搞爆,出于良心,我把延時加上了,這個你也可以不加:

準(zhǔn)備工作做完啦!

五、編寫爬蟲代碼(爬取第一個頁面)

打開爬蟲文件,默認(rèn)模板是這樣的:

parse 函數(shù)是每次下載網(wǎng)頁之后的回調(diào)函數(shù),我們在這里寫代碼。首先回到瀏覽器,把鼠標(biāo)放在想要觀察的ip這里,右鍵點檢查,觀察HTML結(jié)構(gòu):


發(fā)現(xiàn)是一個 tr 里面有很多 td,我們只需遍歷所有 tr 再遍歷里面的 td 就行了,這里涉及 xpath 語法,我也不懂,反正我是照著視頻的代碼改的:

注意 start_urls 是開始爬取的頁面,這里改成:

start_urls = ['http://kuaidaili.com/free']

寫好了,然后回到終端,輸入這個命令開始爬蟲:

../venv/Scripts/scrapy.exe crawl kuaidaili

這樣就算是把第一個頁面爬好了,我們可以把這些數(shù)據(jù)存到數(shù)據(jù)庫或者磁盤上。

六、翻頁爬取

如果想翻頁咋辦呢,我們研究一下翻頁對url的影響,發(fā)現(xiàn)規(guī)律如下:

https://www.kuaidaili.com/free/inha/1/ https://www.kuaidaili.com/free/inha/2/ https://www.kuaidaili.com/free/inha/3/ ...

后面的數(shù)字表示頁碼。

右鍵檢查,由于沒有下一頁按鈕,所以只能通過 active 類找到當(dāng)前頁面,然后 +1 了。

class 是 active,我們可以通過 xpath 獲取 href,這里就照貓畫虎,我也懶得學(xué)這個 xpath,xpath 是這樣子的:

//a[@class="active"]/@href

最終代碼是這樣的,如果運行爆503錯誤,就是被反爬了,解決方案就是修改 settings 文件,加 user-agent,加延時,關(guān)閉 obey。

import scrapyclass KuaidailiSpider(scrapy.Spider):name = 'kuaidaili'allowed_domains = ['kuaidaili.com']start_urls = ['http://kuaidaili.com/free']def parse(self, response):selectors = response.xpath("//tr") # 選擇所有tr標(biāo)簽# 遍歷tr標(biāo)簽下的td標(biāo)簽for selector in selectors:ip = selector.xpath("./td[1]/text()").get()port = selector.xpath("./td[2]/text()").get()print(ip, port)# 翻頁,每個網(wǎng)站不一樣,我測試的 Kuaidaili 就沒有下一頁current_page = response.xpath('//a[@class="active"]/@href').get()print(current_page)current_page_id = int(current_page[current_page[:-1].rfind("/") + 1:-1])print(current_page_id)if current_page and current_page_id < 3:current_url = response.urljoin(current_page)next_url = current_url[:current_url[:-1].rfind("/") + 1] + str((int(current_url[current_url[:-1].rfind("/") + 1:-1]) + 1)) + "/"print(next_url)# 頁碼+1得到下一頁# 發(fā)出請求yield scrapy.Request(next_url, callback=self.parse)print("----------------------------------------------------------------\n\n\n")

運行爬蟲要用 crawl 參數(shù),如下圖:

../venv/Scripts/scrapy.exe crawl kuaidaili

總結(jié)

以上是生活随笔為你收集整理的第一次scrapy爬虫记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。