【发布时间】:2020-08-15 00:28:58
【问题描述】:
我一直在测试我对网络抓取的理解,并且无法将特定值提取到 img 标记中的属性。我可以缩小到正确的前导标签,但是一旦我尝试提取归因于“alt”(img alt="what_i_want")的值,我就会得到一个无类型。或者在其他一些代码变体中,我只返回一个项目。据我了解,我试图获取的价值在技术上不是文本或字符串,因此 BS 并没有什么可获取的。这是正确的吗?
我正在尝试获取每个容器中列出的“EVGA”和其他品牌名称:
[<a class="item-brand" href="https://www.newegg.com/EVGA/BrandStore/ID-1402">
<img alt="EVGA" src="//c1.neweggimages.com/Brandimage_70x28//Brand1402.gif" title="EVGA" />
</a>]
到目前为止我得到了什么:
webpage = requests.get('https://www.newegg.com/p/pl?Submit=StoreIM&Depa=1&Category=38')
content = webpage.content
soup = BeautifulSoup(content, 'lxml')
containers = soup.find_all("div", class_="item-container")
brand = []
for container in containers:
cont_brand = container.find_all("div",{"class":"item-info"})
for name_brand in cont_brand:
brand.append(name_brand.find("img").get("alt"))
print(brand)
这实际上会给我一个 ['ASUS'] 的返回值,它位于我可以识别的容器列表的中间位置。我无法在 html 代码中找到任何差异,这些差异可能会将这一代码与其他代码区别开来。另一种代码格式返回了最后一个值 ['ASRock'],但我还是找不到那个原因。我认为它与BS4(查找)机制有关......? 使用 (find_all) 的大多数其他代码变体将返回一个 NoneType 错误,我认为我根据 BS 文档了解该错误。 我试过换掉'html.parser'而没有改变。目前正在研究使用 Selenium 看看是否有答案。
任何帮助将不胜感激。
【问题讨论】:
标签: python html beautifulsoup screen-scraping