教你使用Python網路爬蟲獲取菜譜資訊,
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:Python進階者
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
/1 前言/
在放假時 ,經常想嘗試一下自己做飯,下廚房這個網址是個不錯的選擇。
下廚房是必選的網址之一,主要提供各種美食做法以及烹飪技巧。包含種類很多。
今天教大家去爬取下廚房的菜譜 ,儲存在world文件,方便日後製作自己的小菜譜。
/2 專案目標/
獲取菜譜,並批量把菜 名、 原 料 、下 載 鏈 接 、下載儲存在world文件。
/3 專案準備/
軟體:PyCharm
需要的庫:requests、lxml、fake_useragent、time
網站如下:
https://www.xiachufang.com/explore/?page={}
點選下一頁時,每增加一頁page自增加1,用{}代替變換的變數,再用for迴圈遍歷這網址,實現多個網址請求。
/4 反爬措施的處理/
主要有兩個點需要注意:
1、直接使用requests庫,在不設定任何header的情況下,網站直接不返回資料
2、同一個ip連續訪問多次,直接封掉ip,起初我的ip就是這樣被封掉的。
為了解決這兩個問題,最後經過研究,使用以下方法,可以有效解決。
1)獲取正常的 http請求頭,並在requests請求時設定這些常規的http請求頭。
2)使用 fake_useragent ,產生隨機的UserAgent進行訪問。
/5 專案實現/
1、定義一個class類繼承object,定義init方法繼承self,主函式main繼承self。匯入需要的庫和網址,程式碼如下所示。
import requests from lxml import etree from fake_useragent importUserAgent import time class kitchen(object): def __init__(self): self.url = "https://www.xiachufang.com/explore/?page={}" def main(self): pass if __name__ == '__main__': imageSpider = kitchen() imageSpider.main()
2、隨機產生UserAgent。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、傳送請求 獲取響應, 頁面回撥,方便下次請求。
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、xpath解析一級頁面資料,獲取二級頁面網址。
def parse_page(self, html): parse_html = etree.HTML(html) image_src_list = parse_html.xpath('//li/div/a/@href')
5、for遍歷,定義一個變數food_info儲存,獲取到二級頁面對應的菜 名、 原 料 、下 載 鏈 接。
for i in image_src_list: url = "https://www.xiachufang.com/" + i # print(url) html1 = self.get_page(url) # 第二個發生請求 parse_html1 = etree.HTML(html1) # print(parse_html1) num = parse_html1.xpath('.//h2[@id="steps"]/text()')[0].strip() name = parse_html1.xpath('.//li[@class="container"]/p/text()') ingredients = parse_html1.xpath('.//td//a/text()') food_info = ''' 第 %s 種 菜 名 : %s 原 料 : %s 下 載 鏈 接 : %s, ================================================================= ''' % (str(self.u), num, ingredients, url)
6、儲存在world文件 。
f = open('下廚房/菜譜.doc', 'a', encoding='utf-8') # 以'w'方式開啟檔案 f.write(str(food_info)) f.close()
7、呼叫方法,實現功能。
html = self.get_page(url)
self.parse_page(html)
8、專案優化
1)方法一:設定時間延時。
time.sleep(1.4)
2)方法二:定義一個變數u,for遍歷,表示爬取的是第幾種食物。(更清晰可觀)。
u = 0
self.u += 1;
/6 效果展示/
1、點選綠色小三角執行輸入起始頁,終止頁。
2、執行程式後,結果顯示在控制檯,如下圖所示。
3、將執行結果儲存在world文件中,如下圖所示。
4、雙擊檔案,內容如下圖所示。
/7 小結/
1、本文章基於Python網路爬蟲,獲取下廚房網站菜譜資訊,在應用中出現的難點和重點,以及如何防止反爬,做出了相對於的解決方案。
2、介紹瞭如何去拼接字串,以及列表如何進行型別的轉換。
3、程式碼很簡單,希望能夠幫到你。
4、歡迎大家積極嘗試,有時候看到別人實現起來很簡單,但是到自己動手實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。
5、可以選擇自己喜歡的分類,獲取自己喜歡的菜譜,每個人都是廚師。