不能用美丽的汤刮掉所有元素



我试图抓取这个网页中的所有文章,但我只抓取了第一篇文章,有人能告诉我如何解决这个问题吗?我的代码如下:

from bs4 import BeautifulSoup
import requests

sauce = requests.get('https://www.automobile.tn/fr/neuf/alfa-romeo').text
soup = BeautifulSoup(sauce, 'lxml')
def find_prices(item):
price = item.find('div', class_='price').span.text
return price

def find_names(item):
name = item.find('div', class_='versions-item').h2.text
return name
articles = soup.findAll('div', class_='articles')
Articlelist= list()
for article in articles:

Articledict= dict()
Articledict['name'] = find_names(article)
Articledict['price'] = find_prices(article)

Articlelist.append(Articledict)

print(Articlelist)

这是我的代码的输出:

[{'name': 'Alfa Romeo Giulia', 'price': '198 000 DT'}]

这里的主要问题是使用soup.findAll('div', class_='articles')只选择一个元素,因此循环只迭代一次。

注意 在较新的代码中,避免使用旧语法findAll(),而使用find_all()-要了解更多信息,请花一分钟时间检查文档

为了修复该行为,选择更具体的并使用例如具有类"的容器;版本项":

soup.find_all('div', class_='versions-item')    
示例
from bs4 import BeautifulSoup
import requests
res = requests.get('https://www.automobile.tn/fr/neuf/alfa-romeo').text
soup = BeautifulSoup(res)
data = []
for item in soup.find_all('div', class_='versions-item'):

data.append({
'name':item.h2.text,
'price':item.find('div', class_='price').span.text
})

data
输出
[{'name': 'Alfa Romeo Giulia', 'price': '198 000 DT'},
{'name': 'Alfa Romeo Stelvio', 'price': '265 000 DT'}]

最新更新