beautifulsoupobject.findAll()返回一个空列表。

问题描述 投票:0回答:2
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时,它返回一个空列表。我相信我只是犯了一些愚蠢的错误,但任何反馈都将是感激的

python list beautifulsoup
2个回答
0
投票

我看了那个拍卖网站的一个页面的HTML,没有一个元素的类属性正好是 "价格"。

而且,你不能调用 .getText() 关于 findAll() 的结果。

你可以使用正则表达式来代替查找任何东西 含有 价格这个词。

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',
# ...
© www.soinside.com 2019 - 2024. All rights reserved.