gpt4 book ai didi

python - 网页抓取返回空字典

转载 作者:行者123 更新时间:2023-12-04 07:20:39 24 4
gpt4 key购买 nike

我试图从这个网站上抓取所有数据 https://ricetta.it/ricette-secondi使用 Python Selenium 。
我想将它们放入字典中,如下面的代码所示。
然而,这只是返回一个空列表。

import pprint
detail_recipes = []
for recipe in list_recipes:
title = ""
description = ""
ingredient = ""
if(len(recipe.find_elements_by_css_selector(".post-title")) > 0):
title = recipe.find_elements_by_css_selector(".post-title")[0].text
if(len(recipe.find_elements_by_css_selector(".post-excerpt")) > 0):
description = recipe.find_elements_by_css_selector(".post-excerpt")[0].text
if(len(recipe.find_elements_by_css_selector(".nm-ingr")) > 0):
ingredient = recipe.find_elements_by_css_selector(".nm-ingr")[0].text

detail_recipes.append({'title': title,
'description': description,
'ingredient': ingredient
})

len(detail_recipes)
pprint.pprint(detail_recipes[0:10])

最佳答案

你可以试试这个:

import requests
import numpy as np
from bs4 import BeautifulSoup as bs
import pandas as pd

url="https://ricetta.it/ricette-secondi"

page=requests.get(url)
soup=bs(page.content,'lxml')

df={'title': [],'description': [],'ingredient':[]}

for div in soup.find_all("div",class_="post-bordered"):
df["title"].append(div.find(class_="post-title").text)
try:
df["description"].append(div.find(class_="post-excerpt").text)
except:
df["description"].append(np.nan)
i=div.find_all(class_="nm-ingr")
if len(i)>0:
df["ingredient"].append([j.text for j in i])
else:
df["ingredient"].append(np.nan)

df=pd.DataFrame(df)

df.dropna(axis=0,inplace=True)

print(df)
输出:
                               title  ...                                         ingredient
0 Polpette di pane e formaggio ... [uovo, pane, pangrattato, parmigiano, latte, s...
1 Torta 7 vasetti alle melanzane ... [uovo, olio, latte, yogurt, farina 00, fecola ...
2 Torta a sole con zucchine e speck ... [pasta sfoglia, zucchina, ricotta, uovo, speck...
3 Pesto di limoni ... [limone, pinoli, parmigiano, basilico, prezzem...
4 Bombe di patate ... [patata, farina 00, uovo, parmigiano, sale e p...
5 Polpettone di zucchine ... [zucchina, uovo, parmigiano, pangrattato, pros...
6 Insalata di pollo ... [petto di pollo, zucchina, pomodorino, insalat...
7 Club sandwich ... [pane, petto di pollo, pomodoro, lattuga, maio...
8 Crostata di verdure ... [farina 00, burro, acqua, sale, zucchina, pomo...
9 Pesto di barbabietola ... [barbabietola, parmigiano, pinoli, olio, sale,...

[10 rows x 3 columns]
我不知道您是否使用这些库,但该网站不使用 javascript 加载数据,因此我们可以使用 requests 抓取该网站和 bs4 .如果网站不使用 javascript 加载数据,大多数人更喜欢使用这些库。它比 Selenium 更容易和更快。为了显示/显示数据,我正在使用 pandas with 也是处理表等数据的首选库。它准确地以表格结构打印数据,您可以将抓取的数据保存在 csv 中。 , excel file还。
如果您还想从下一页抓取所有数据,请尝试以下操作:
df={'title': [],'description': [],'ingredient':[]}

for i in range(0,108):
url=f"https://ricetta.it/ricette-secondi?page={i}"
page=requests.get(url)
soup=bs(page.content,'lxml')

for div in soup.find_all("div",class_="post-bordered"):
df["title"].append(div.find(class_="post-title").text)
try:
df["description"].append(div.find(class_="post-excerpt").text)
except:
df["description"].append(np.nan)
i=div.find_all(class_="nm-ingr")
if len(i)>0:
df["ingredient"].append([j.text for j in i])
else:
df["ingredient"].append(np.nan)
它将从该网站上抓取所有 107 页的数据。
您可以保存此 dfcsvexcel file通过使用 :
df.to_csv("<filename.csv>")
# or for excel:
df.to_excel("<filename.xlsx>")
编辑:
当您问要抓取所有食谱的链接时,我想出了两件事,首先只需将标题空间替换为 -这是该配方的链接,另一个是从那里抓取的链接,为此您可以使用这段代码:
div.find(class_="post-title")["href"]
它将返回该配方的链接。对于另一种方法,您可以这样做:
df["links"]=df["title"].apply(lambda x: "https://ricetta.it/"+x.replace(" ","-").lower())
#.lower() is just to not make like a random text but it you remove it also it works.
但我个人建议你只是从网站上抓取链接,同时让链接成为我们自己的链接,我们可能会犯错误。

关于python - 网页抓取返回空字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68522447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com