python beautifulsoup模拟点击_Python爬虫丨BeautifulSoup实践
項目分析
爬取的網站是下廚房,目標是固定欄目【本周最受歡迎】
可以看到我們要爬取的/explore/不在禁止爬取的列表內
1.先看下頁面
計劃拿到的信息是:菜名、所需材料、和菜名所對應的詳情頁URL
2.打開檢查工具,在Elements里查看這個網頁。
3.點擊開發者工具左上角的小箭頭,然后選中一個菜名,那么Elements會自動標記出對應的代碼。
4.找到詳情頁URL的所在位置。其值是/recipe/104486698/
我們可以提取標簽,然后用text拿到它的文本,在使用[href]獲取到半截URL和http://www.xiachufang.com做拼接即可。
5.找食材位置,點擊小箭頭,挑選食材。
6.根據菜名的路徑、URL的路徑、食材的路徑,尋找這三者的最小共同父級標簽
兩種寫爬蟲的思路:
思路一:先去爬取所有的最小級父級標簽
,然后針對每一個父級標簽,提取里面的菜名、URL、食材思路二:分別提取所有的菜名、所有的URL、所有的食材。然后一一對應起來。
代碼實現(一)
獲取與解析
用requests.get()獲取數據,使用BeautifulSoup來解析
import requests
# 引用requests庫
from bs4 import BeautifulSoup
# 引用BeautifulSoup庫
res_foods = requests.get('http://www.xiachufang.com/explore/')
# 獲取數據
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
# 解析數據
print(bs_foods)
# 打印解析結果
提取最小父級標簽
看下它的標簽
,有一個class屬性,其值是info pure-u。使用find_all()語法查找最小父級標簽
import requests
# 引用requests庫
from bs4 import BeautifulSoup
# 引用BeautifulSoup庫
res_foods = requests.get('http://www.xiachufang.com/explore/')
# 獲取數據
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
# 解析數據
list_foods = bs_foods.find_all('div',class_='info pure-u')
# 查找最小父級標簽
print(list_foods)
# 打印最小父級標簽
一組菜名、URL、食材
首先查找父級標簽中的第一個標簽,里面有我們想要的信息,用find()方法來查找,所用的參數就是標簽本身。
提示一:提取的是第0個父級標簽,而不是整個父級標簽列表。
提示二:提取出的菜名可能前后都會有很多空格和換行,可以使用切片把多余的內容裁剪掉。
import requests
# 引用requests庫
from bs4 import BeautifulSoup
# 引用BeautifulSoup庫
res_foods = requests.get('http://www.xiachufang.com/explore/')
# 獲取數據
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
# 解析數據
list_foods = bs_foods.find_all('div',class_='info pure-u')
# 查找最小父級標簽
tag_a = list_foods[0].find('a')
# 提取第0個父級標簽中的標簽
name = tag_a.text[17:-13]
# 菜名,使用[17:-13]切掉了多余的信息
URL = 'http://www.xiachufang.com' + tag_a['href']
# 獲取URL
tag_p = list_foods[0].find('p',class_='ing ellipsis')
# 提取第0個父級標簽中的
標簽
ingredients = tag_p.text[1:-1]
# 食材,使用[1:-1]切掉了多余的信息
print(ingredients)
# 打印食材
寫循環,存列表
要求:寫一個循環,提取當前網頁的所有菜名、URL、食材,并將它存入列表。
import requests
# 引用requests庫
from bs4 import BeautifulSoup
# 引用BeautifulSoup庫
res_foods = requests.get('http://www.xiachufang.com/explore/')
# 獲取數據
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
# 解析數據
list_foods = bs_foods.find_all('div',class_='info pure-u')
# 查找最小父級標簽
list_all = []
# 創建一個空列表,用于存儲信息
for food in list_foods:
tag_a = food.find('a')
# 提取第0個父級標簽中的標簽
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')
# 提取第0個父級標簽中的
標簽
ingredients = tag_p.text[1:-1]
# 食材,使用[1:-1]切掉了多余的信息
list_all.append([name,URL,ingredients])
# 將菜名、URL、食材,封裝為列表,添加進list_all
print(list_all)
# 打印
代碼實現(二)
import requests
# 引用requests庫
from bs4 import BeautifulSoup
# 引用BeautifulSoup庫
res_foods = requests.get('http://www.xiachufang.com/explore/')
# 獲取數據
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
# 解析數據
tag_name = bs_foods.find_all('p',class_='name')
# 查找包含菜名和URL的
標簽
tag_ingredients = bs_foods.find_all('p',class_='ing ellipsis')
# 查找包含食材的
標簽
list_all = []
# 創建一個空列表,用于存儲信息
for x in range(len(tag_name)):
# 啟動一個循環,次數等于菜名的數量
list_food = [tag_name[x].text[18:-14],tag_name[x].find('a')['href'],tag_ingredients[x].text[1:-1]]
# 提取信息,封裝為列表。注意此處[18:-14]切片和之前不同,是因為此處使用的是
標簽,而之前是
list_all.append(list_food)
# 將信息添加進list_all
print(list_all)
# 打印
總結
以上是生活随笔為你收集整理的python beautifulsoup模拟点击_Python爬虫丨BeautifulSoup实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实现三种以上判断条件_Pyt
- 下一篇: python slice是共享内存吗_在