手把手教你使用Python網絡爬蟲獲取菜譜信息

點擊上方“Python爬蟲與數據挖掘”,進行關注

回覆“書籍”即可獲贈Python從入門到進階共10本電子書

一腔熱血勤珍重,灑去猶能化碧濤。

/1 前言/

    在放假時 ,經常想嘗試一下自己做飯,下廚房這個網址是個不錯的選擇。

    下廚房是必選的網址之一,主要提供各種美食做法以及烹飪技巧。包含種類很多。

    今天教大家去爬取下廚房的菜譜 ,保存在world文檔,方便日後製作自己的小菜譜。

/2 項目目標/

    獲取菜譜,並批量把菜 名、 原 料 、下 載 鏈 接 、下載保存在world文檔。

/3 項目準備/

軟件:PyCharm

需要的庫:requestslxmlfake_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、可以選擇自己喜歡的分類,獲取自己喜歡的菜譜,每個人都是廚師。

6、如果需要本文源碼的話,請在公衆號後臺回覆“廚房”兩個字進行獲取,覺得不錯,記得給個star噢。

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習羣請在後臺回覆【入羣

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩個您使用過的Python庫~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章