我可以使用img标签的BeautifulSoup刮取“ value”属性吗?

问题描述 投票:0回答:1

我一直在测试我对Web抓取的理解,并且无法将特定值拉到img标签内的属性。我可以缩小到适当的前导标签,但是一旦尝试提取归因于“ alt”(img alt =“ what_i_want”)的值,我将得到none类型。或在其他一些代码变体中,我仅返回一个项目。据我了解,我试图获取的值从技术上讲不是文本或字符串,因此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
1个回答
0
投票

这是因为您的第一个for循环会返回所有元素。但是,当您将下一个for循环放在外部循环之外时,它总是会为您提供最后一个元素。它应该在for循环的外部。

现在尝试。

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)

输出

['EVGA', 'MSI', 'ASUS', 'MSI', 'Sapphire Tech', 'EVGA', 'GIGABYTE', 'XFX', 'ASUS', 'ASRock', 'EVGA', 'ASUS', 'EVGA', 'GIGABYTE', 'GIGABYTE', 'GIGABYTE', 'EVGA', 'EVGA', 'MSI', 'ASRock', 'EVGA', 'XFX', 'Sapphire Tech', 'ASRock', 'GIGABYTE', 'ASUS', 'MSI', 'MSI', 'MSI', 'MSI', 'MSI', 'EVGA', 'GIGABYTE', 'EVGA', 'ASUS', 'GIGABYTE']
© www.soinside.com 2019 - 2024. All rights reserved.