BeautifulSoup實(shí)踐(3)

項(xiàng)目目標(biāo):

爬取熱門(mén)菜譜清單络断,獲取菜名射亏、原材料和詳細(xì)烹飪流程的URL

步驟與思路:

第一:打開(kāi)網(wǎng)址谜嫉,查閱robots協(xié)議
1湘纵、網(wǎng)址:http://www.xiachufang.com/explore/
2返弹、它的robots協(xié)議:http://www.xiachufang.com/robots.txt
閱讀這個(gè)robots協(xié)議會(huì)發(fā)現(xiàn):我們要爬取的/explore/不在禁止爬取的列表內(nèi)锈玉,但如果要爬取/recipe/服務(wù)器就會(huì)不歡迎。在網(wǎng)頁(yè)里琉苇,recipe是每一道菜的詳情頁(yè)面嘲玫,記錄了這道菜的做法,所以不去碰它并扇。

第二:ctrl+shift+i查找和定位
1去团、 菜名和URL:<p class=’name’>下的<a>標(biāo)簽
提取<a>標(biāo)簽,用text拿到它的文本穷蛹,再使用[href]獲取到URL
2土陪、 食材:<p class="ing ellipsis">
3、 根據(jù)菜名的路徑肴熏、URL的路徑鬼雀、食材的路徑,我們可以這三者的最小共同父級(jí)標(biāo)簽蛙吏,是:<div class="info pure-u">

第三:思路
思路一:先去爬取所有的最小父級(jí)標(biāo)簽<div class="info pure-u">源哩,然后針對(duì)每一個(gè)父級(jí)標(biāo)簽鞋吉,想辦法提取里面的菜名、URL励烦、食材谓着。

思路二:分別提取所有的菜名、所有的URL坛掠、所有的食材赊锚。然后讓菜名、URL屉栓、食材給一一對(duì)應(yīng)起來(lái)(把數(shù)據(jù)存到列表里:每一組菜名舷蒲、URL、食材是一個(gè)小列表友多,小列表組成一個(gè)大列表牲平。第0個(gè)菜名,對(duì)應(yīng)第0個(gè)URL夷陋,對(duì)應(yīng)第0組食材欠拾,按順序走即可。如下:
[[菜A,URL_A,食材A],[菜B,URL_B,食材B],[菜C,URL_C,食材C]])

代碼編寫(xiě)

思路一(先爬最小父級(jí)標(biāo)簽)的寫(xiě)法:

import requests# 引用requests庫(kù)
from bs4 import BeautifulSoup# 引用BeautifulSoup庫(kù)
res_foods = requests.get('http://www.xiachufang.com/explore/')# 獲取數(shù)據(jù)
bs_foods = BeautifulSoup(res_foods.text,'html.parser')# 解析數(shù)據(jù)
list_foods = bs_foods.find_all('div',class_='info pure-u')# 查找最小父級(jí)標(biāo)簽
list_all = []# 創(chuàng)建一個(gè)空列表骗绕,用于存儲(chǔ)信息
for food in list_foods:
tag_a = food.find('a') # 提取food中的<a>標(biāo)簽
name = tag_a.text[17:-13] # 菜名藐窄,使用[17:-13]切掉了多余的信息
URL = 'http://www.xiachufang.com'+tag_a['href'] # 獲取URL
tag_p = food.find('p',class_='ing ellipsis') # 提取food中的<p>標(biāo)簽
ingredients = tag_p.text[1:-1] # 食材,使用[1:-1]切掉了多余的信息
list_all.append([name,URL,ingredients]) # 將菜名酬土、URL荆忍、食材,封裝為列表撤缴,添加進(jìn)list_all
print(list_all)

需要注意__獲取標(biāo)簽里純文本信息的方法:
查找標(biāo)簽(比如<p>)刹枉,然后使用text提取<p>標(biāo)簽里的純文本信息就可以了。在用text獲取純文本時(shí)屈呕,獲取的是該標(biāo)簽內(nèi)的所有純文本信息微宝,不論是直接在這個(gè)標(biāo)簽內(nèi),還是在它的子標(biāo)簽內(nèi)虎眨。

需要強(qiáng)調(diào)的是蟋软,如果是要提取屬性的值,text是不可以的嗽桩。父標(biāo)簽只能提取它自身的屬性值岳守,不能提取子標(biāo)簽的屬性值。比如:
bs = BeautifulSoup('<p><a )
tag = bs.find('p')
print(tag['href'])# 這樣會(huì)報(bào)錯(cuò)碌冶,因?yàn)?lt;p>標(biāo)簽沒(méi)有屬性href湿痢,href屬于<a>標(biāo)簽

思路二(分別提取,匯總列表)的寫(xiě)法:

import requests# 引用requests庫(kù)
from bs4 import BeautifulSoup# 引用BeautifulSoup庫(kù)
res_foods = requests.get('http://www.xiachufang.com/explore/')# 獲取數(shù)據(jù)
bs_foods = BeautifulSoup(res_foods.text,'html.parser')# 解析數(shù)據(jù)
tag_name = bs_foods.find_all('p',class_='name')# 查找包含菜名和URL的<p>標(biāo)簽
tag_ingredients = bs_foods.find_all('p',class_='ing ellipsis')# 查找包含食材的<p>標(biāo)簽
list_all = []# 創(chuàng)建一個(gè)空列表扑庞,用于存儲(chǔ)信息
for x in range(len(tag_name)):# 啟動(dòng)一個(gè)循環(huán)譬重,次數(shù)等于菜名的數(shù)量
list_food = [tag_name[x].text[18:-14],tag_name[x].find('a')['href'],tag_ingredients[x].text[1:-1]] # 提取信息拒逮,封裝為列表。注意此處[18:-14]切片和之前不同臀规,是因?yàn)榇颂幨褂玫氖?lt;p>標(biāo)簽消恍,而之前是<a>
list_all.append(list_food) # 將信息添加進(jìn)list_all
print(list_all)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市以现,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌约啊,老刑警劉巖邑遏,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恰矩,居然都是意外死亡记盒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)外傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纪吮,“玉大人,你說(shuō)我怎么就攤上這事萎胰∧朊耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵技竟,是天一觀的道長(zhǎng)冰肴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)榔组,這世上最難降的妖魔是什么熙尉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮搓扯,結(jié)果婚禮上检痰,老公的妹妹穿的比我還像新娘。我一直安慰自己锨推,他們只是感情好铅歼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著爱态,像睡著了一般谭贪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锦担,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天俭识,我揣著相機(jī)與錄音,去河邊找鬼洞渔。 笑死套媚,一個(gè)胖子當(dāng)著我的面吹牛缚态,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堤瘤,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼玫芦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了本辐?” 一聲冷哼從身側(cè)響起桥帆,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慎皱,沒(méi)想到半個(gè)月后老虫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茫多,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年祈匙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片天揖。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夺欲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出今膊,到底是詐尸還是另有隱情些阅,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布万细,位于F島的核電站扑眉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赖钞。R本人自食惡果不足惜腰素,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雪营。 院中可真熱鬧弓千,春花似錦、人聲如沸献起。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谴餐。三九已至姻政,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岂嗓,已是汗流浹背汁展。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人食绿。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓侈咕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親器紧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耀销,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容