1. 程式人生 > 實用技巧 >教你使用Python網路爬蟲獲取菜譜資訊,

教你使用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 import
UserAgent 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、可以選擇自己喜歡的分類,獲取自己喜歡的菜譜,每個人都是廚師。