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时,它返回一个空列表。我相信我只是犯了一些愚蠢的错误,但任何反馈都将是感激的
我看了那个拍卖网站的一个页面的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',
# ...