Python BeautifulSoup Web Scratching适用于第一次,但不适用于第二次或任何后续时间



im是一个Python新手,并尝试编写一个web scraper脚本来获取一些价格数据。例如,我试图抓取的网站是:https://www.medizinfuchs.de/?params%5Bsearch%5D=10192710&params%5Search_cat%5D=1

我正在使用以下代码:

from bs4 import BeautifulSoup
import requests
URL = "https://www.medizinfuchs.de/?params%5Bsearch%5D=11484834&params%5Bsearch_cat%5D=1"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
for price in soup.select('li.apotheke div.price'):
print(float(price.text.strip(' tn€').replace(',', '.')))
for name in soup.select('li.apotheke a.name'):
print(str(name.text.strip(' tn€')))

我第一次运行它时,它就像一个符咒,但之后我就没有输出了。。。

我期望的输出:

5.395.45.45.655.85.895.895.94 Apotheke Prime Apoversand24.de bon-vita.de 1-apo.de eurapon.de docmorris.de sternapo ahorn24.de

你能帮我让它持续工作吗?

感谢

会发生什么

看看你的汤-它告诉了真相。在soup中没有类为apotheke<li>,因此您不会得到任何结果。

如何修复

选择正确的标签或跳过它们,专注于classes(这不是最好的主意,因为类经常更改,但在这种情况下,你能做的最好(

for e in soup.select('.apotheke'):
print(e.select_one('.price').get_text(strip=True).split(' ')[0])

for e in soup.select('.apotheke'):
print(e.select_one('.name').get_text(strip=True))

示例(更结构化(

data=[]
for e in soup.select('.apotheke'):
data.append({
'name':e.select_one('.name').get_text(strip=True),
'price':e.select_one('.price').get_text(strip=True).split(' ')[0]
})
data

输出

[{'name': 'ApothekePrime', 'price': '5,39'},
{'name': 'Apoversand24.de', 'price': '5,40'},
{'name': 'bon-vita.de', 'price': '5,40'},
{'name': '1-apo.de', 'price': '5,65'},
{'name': 'eurapon.de', 'price': '5,80'},
{'name': 'docmorris.de', 'price': '5,89'},
{'name': 'sternapo', 'price': '5,89'},
{'name': 'ahorn24.de', 'price': '5,94'}]

相关内容

  • 没有找到相关文章

最新更新