繁体   English   中英

无法使用 beautifulsoup 抓取所有元素

[英]Can't scrape all elements with beautifulsoup

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

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)

这是我的代码的 output:

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

这里的主要问题是你 select 与soup.findAll('div', class_='articles')只有一个元素,所以你的循环只迭代一次。

注意在较新的代码中避免使用旧语法findAll()而是使用find_all() - 更多信息请花一点时间查看文档

要更具体地修复该行为 select 并使用带有 class “version-item” 的容器:

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
Output
[{'name': 'Alfa Romeo Giulia', 'price': '198 000 DT'},
 {'name': 'Alfa Romeo Stelvio', 'price': '265 000 DT'}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM