大家好,我是辰哥! 今天辰哥帶大家來看看一個爬蟲框架:Feapder,看完本文之后,別再說你不會Feapder了。本文辰哥將帶你了解什么是Feapder?、如何去創(chuàng)建一個Feapder入門項目(實戰(zhàn):采集易車網(wǎng)轎車數(shù)據(jù))。 其中實戰(zhàn)部分包括爬蟲數(shù)據(jù)和存儲到Mysql數(shù)據(jù)庫,讓大家能夠感受一下,數(shù)據(jù)從網(wǎng)頁經(jīng)框架Feapder采集后,直接存儲到數(shù)據(jù)庫的過程。 之前我們已經(jīng)用了Scrapy爬蟲框架來爬取數(shù)據(jù)(以『B站』為實戰(zhàn)案例!手把手教你掌握爬蟲必備框架『Scrapy』),今天來試試使用Feapder寫爬蟲是一種怎么樣的體驗,請往下看!?。。?! 01 Feapder框架 1.Feapder框架介紹Feapder 是一款上手簡單、功能強大、快速、輕量級的爬蟲框架的Python爬蟲框架。支持輕量爬蟲、分布式爬蟲、批次爬蟲、爬蟲集成,以及完善的爬蟲報警機制。
2.Feapder的安裝feapder的安裝很簡單,通過下面的命令安裝即可! pip install feapder 出現(xiàn)下面的界面說明feapder成功安裝! feapder的介紹和環(huán)境安裝就完成了,下面開始真正去使用fepader來爬取易車網(wǎng)數(shù)據(jù),并存儲到mysql數(shù)據(jù)庫。 02 實戰(zhàn) 1.新建feapder項目通過下方的命令去創(chuàng)建一個名為:chenge_yc_spider的的爬蟲項目
創(chuàng)建好之后,我們看一下項目結構 2.編寫爬蟲在終端中進入到項目(chenge_yc_spider)下的spiders文件夾下,通過下面的命令創(chuàng)建一個目標爬蟲文件(target_spider) feapder create -s target_spider 此刻項目結構如下: 編輯target_spider.py文件 這里實戰(zhàn)案例:采集易車網(wǎng)數(shù)據(jù)。直接執(zhí)行這個py文件,先看一下請求有沒有沒問題。 可以看到請求返回響應200,說明請求成功。下一步我們開始解析網(wǎng)頁數(shù)據(jù)并設置爬蟲框架自動采集下一頁數(shù)據(jù)。 3.解析網(wǎng)頁網(wǎng)頁結果(待采集的數(shù)據(jù))如下: 通過查看源代碼,分析數(shù)據(jù)所對應的網(wǎng)頁標簽 通過網(wǎng)頁源碼可以分析,汽車列表數(shù)據(jù)都是在class為search-result-list下。每一個class為search-result-list-item表示一條數(shù)據(jù),每一條數(shù)據(jù)下都有汽車對應的屬性(如:汽車名稱、價格等) 這里僅作為實戰(zhàn)案例去學習feapder爬蟲框架,因此這里就只爬取汽車名稱、價格;這兩個字段屬性。 4.創(chuàng)建Mysql數(shù)據(jù)庫采集的數(shù)據(jù)需要存儲到數(shù)據(jù)庫(mysql)中,因此我們先來定義好數(shù)據(jù)庫和表 這里辰哥創(chuàng)建了一個數(shù)據(jù)庫:chenge_yc,并在里面建了應該表:t_yc,其表結構如上圖,這里如果不不熟悉mysql如何建立數(shù)據(jù)庫表的可以參考辰哥的這篇文章(實戰(zhàn)|教你用Python玩轉Mysql) 在爬蟲項目中配置數(shù)據(jù)庫,打開根目錄下的setting.py文件 可以看到feapder支持多種數(shù)據(jù)庫的對接,咱們這里使用的是mysql,其配置如下: 接著在終端下,進入到根目錄下的items文件夾,執(zhí)行下面命令生成數(shù)據(jù)庫表對于的item
請注意:命令中的t_yc是對于數(shù)據(jù)庫表中的t_yc 最后生成 t_yc_item.py 文件: 里面的name和price則是對應數(shù)據(jù)庫中的字段。 5.提取網(wǎng)頁字段上面已經(jīng)獲取到網(wǎng)頁源碼,也知道數(shù)據(jù)所在的標簽,現(xiàn)在開始編寫代碼進行解析。 執(zhí)行結果: 可以看到數(shù)據(jù)已經(jīng)成功提出來,下一步將這些數(shù)據(jù)存儲到數(shù)據(jù)庫中。 6.存儲到數(shù)據(jù)庫import feapder from items import t_yc_item
class TargetSpider(feapder.AirSpider): def start_requests(self): url = 'https://car./suv/?page=1' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36', } yield feapder.Request(url,headers=headers, render=True)
def parse(self, request, response): #print(response) result_list = response.xpath('//*[@class='search-result-list-item']') print('本頁有'+str(len(result_list))+'條數(shù)據(jù)') for result in result_list: #創(chuàng)建t_yc_item對象 TycItem = t_yc_item.TYcItem() name = result.xpath(' ./a/p[1]/text()').extract_first() price = result.xpath(' ./a/p[2]/text()').extract_first() TycItem.name = name TycItem.price = price print(name,price) #返回TycItem對象,自動存儲到數(shù)據(jù)庫 yield TycItem 引入剛剛的 t_yc_item.py,并創(chuàng)建對象TycItem。把爬取的name和price初始化到對象中。最后yieId TycItem,實際上就直接存儲到數(shù)據(jù)庫了(因為數(shù)據(jù)庫表和item是對應連接關系,這樣就直接存儲到數(shù)據(jù)庫了)。 這太方便了,連sql語句都省了,6666666666 執(zhí)行結果如下: 查看數(shù)據(jù)庫: 同樣可以看到數(shù)據(jù)直接就存儲到數(shù)據(jù)庫中。大功告成?。。。。。?br> 03 小結 |
|