首页 > 解决方案 > beautifulsoupobject.findAll() 返回一个空列表

问题描述

def ebay_scrape(urls):
    prices = []
    namets = []
    urlg = []
    for url in urls:
        try:
            res = requests.get(url)
            res.raise_for_status()
            soup = BeautifulSoup(res.text, 'html.parser')

        except (InvalidSchema, MissingSchema,):
            pass
        else: 
            try:
                price = soup.findAll (class_= "price").getText()
                prices.append(price)
                urlg.append(url)
            except (AttributeError):
                pass


    return urlg
urllist = (ebay_scrape(make_urls(names)))

我想从拍卖网站上的查询中提取所有价格。当我执行 price = soup.find() 时,此脚本运行良好,但当我尝试 soup.findAll 时,它返回一个空列表。我确定我只是犯了一些愚蠢的错误,但任何反馈都将不胜感激!

标签: pythonlistbeautifulsoup

解决方案


我查看了该拍卖网站其中一个页面的 HTML,并且没有完全具有“价格”类属性的元素。

此外,您不能调用.getText()结果findAll()

您可以使用正则表达式来查找包含单词 price 的任何内容:

import re 

div_elements = soup.find_all('div',attrs={'class':re.compile('price')})

这样一页就有 252 个结果。
然后您可以通过以下方式收集价格:

prices = []
for div_element in div_elements: 
    prices.append(div_element.text)

结果(你必须清理一下):

In [191]: prices
Out[191]: 
['$49.34',
 '$92.00 | 46% off',
# ...

推荐阅读