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

如何在具有多个值的div类中查找ID BS4 Python,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,我试图使用BS4在一个div类中找到一个ID,该类有多个值,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="

我试图使用BS4在一个div类中找到一个ID,该类有多个值,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>
text是从带有html的站点get请求返回的,但返回

    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'

谢谢你的帮助

解释然后是解决方案

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)
.find_all('tag')
用于查找该标记的所有实例,稍后我们可以循环使用它们

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

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

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)
从bs4导入美化组
html=“”

soup.find('a',{'class':'selectSize')).get('data-test5-uk')
?@brogrammar谢谢你的帮助,但是忘了说有多个版本可以让我找到所有的data-test5-uk吗?
[a.find('a',{'class':'selectSize')。get('data-test5-uk')。find_all('div',{'class':'size'))
我有点搞不清楚该如何设置格式?@bro Grammaralso还有一件事,如果data-test5-uk等于7,我该如何获取该类的id?哦,我刚刚意识到,如果data-test5-uk位于大小类中,这不会打印id@Elvir MuslicI在附加部分中提到:D。如果答案解决了这是你的问题,请将其标记为这样并进行投票(如果你喜欢)。我有点困惑它是如何被提及的。如果我是哑巴,对不起,为什么你的['arg']?-你试图提取div的['data-test5-uk']。div除了一个class=“size”之外没有类似的参数
意思是,从>div<中提取与提取
标记的属性不同。这很好:D。这些事情虽然简单,但需要时间来完成,但一旦完成,就会很好。总结:
['arg']
用于提取属性值,但我们必须在准确的标记上进行。这就像询问您是否在随机的家中。(在该家中找不到您(即属性)。)