如何在具有多个值BS4 Python的div类中查找ID

时间:2018-04-28 16:33:26

标签: python beautifulsoup python-requests

我试图在div类中找到一个ID,它使用BS4有多个值,HTML是

<div class="size ">
<a class="selectSize"
  id="25746"
  data-ean="884751585616"
  ata-test="170"
  data-test1=""
  data-test2="1061364-41"
  data-test3-original="41"
  data-test4-eu="41"
  data-test5-uk="7"
  data-test6-us="8"
  data-test-cm="26"
</div>
</div>

我想找到data-test5-uk,我目前的代码是汤=

bs(size.text,"html.parser")
sizes = soup.find_all("div",{"class":"size"})
size = sizes[0]["data-test5-uk"]

size.text是从带有html的网站获取请求,但它返回

    size = sizes[0]["data-test5-uk"]
  File "C:\Users\ninja_000\AppData\Local\Programs\Python\Python36\lib\site-packages\bs4\element.py", line 1011, in __getitem__
    return self.attrs[key]
KeyError: 'data-test5-uk'

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

解释,然后是解决方案

.find_all('tag')用于查找该标记的所有实例,我们稍后可以循环遍历它们。

.find('tag')用于查找第一个实例。

我们可以使用['arg'].get('arg')提取参数的内容,它是 SAME

from bs4 import BeautifulSoup

html = '''<div class="size ">
<a class="selectSize"
  id="25746"
  data-ean="884751585616"
  ata-test="170"
  data-test1=""
  data-test2="1061364-41"
  data-test3-original="41"
  data-test4-eu="41"
  data-test5-uk="7"
  data-test6-us="8"
  data-test-cm="26"
</div>'''

soup = BeautifulSoup(html, 'lxml')

one_div = soup.find('div', class_='size ')

print( one_div.find('a')['data-test5-uk'])
# your code didn't work because you weren't in the a tag
# we have found the tag that contains the tag .find('a')['data-test5-uk']

# for multiple divs
for each in soup.find_all('div', class_='size '):
    # we loop through each instance and do the same
    datauk = each.find('a')['data-test5-uk']
    print('data-test5-uk:', datauk)

<强>输出

  

data-test5-uk:7

其他

为什么你的['arg']? - 你试图提取div的["data-test5-uk"]<div class="size ">除了一个class="size "

之外,div没有这样的参数