python解析HTML中的特定值

2024-04-20 00:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

晚上好,亲爱的社区。我今晚的问题是:我有一段HTML:

                      <option class="disabled" value="12_654" >
(EU 38 2/3 - US 6)                      </option>
                      <option class="disabled" value="12_3716" >
(EU 39 1/3 - US 6,5)                      </option>
                      <option class="disabled" value="12_636" >
(EU 40 - US 7)                      </option>
                      <option class="" value="12_634" >
EU 40 2/3 - US 7,5                      </option>
                      <option class="" value="12_462" >
EU 41 1/3 - US 8                      </option>
                      <option class="" value="12_460" >
EU 42 - US 8,5                      </option>
                      <option class="" value="12_459" >
EU 42 2/3 - US 9                      </option>
                      <option class="" value="12_458" >
EU 43 1/3 - US 9,5                      </option>
                      <option class="" value="12_457" >
EU 44 - US 10                      </option>
                      <option class="" value="12_456" >
EU 44 2/3 - US 10,5                      </option>
                      <option class="" value="12_455" >
EU 45 1/3 - US 11                      </option>
                      <option class="disabled" value="12_559" >
(EU 46 - US 11,5)                      </option>
                      <option class="disabled" value="12_454" >
(EU 46 2/3 - US 12)                      </option>
                      <option class="disabled" value="12_453" >
(EU 47 1/3 - US 12,5)                      </option>
                    </sel

这只是一个例子。。。。我现在的目标是找到一个特定尺寸的值,只需给出尺寸。例如:

如果我指出我的尺寸是EU 40-US 7,我希望能够解析值12636

我以前已经使用bs4模块解析HTML并查找特定值,我通常是这样做的:

from bs4 import BeautifulSoup as bs

soup=bs(html.text, 'lxml')
v=soup.find('option',{'class':''})['value']

但是在这里,因为使用上面的方法会有更多可能的值,所以这不是我需要的。我试着在我想找到的标签中添加指定的大小,但没有成功

v=soup.find('option',(EU 40 - US 7),{'class':''})['value']

看起来是这样,但我知道,这是不正确的。现在我完全不知道如何找到价值,所以我会非常感谢任何帮助我。非常感谢亲爱的社区


Tags: bsvalue尺寸htmlfind社区class例子
2条回答

创建一个dict,将每个option的文本映射到它的值,确保从text中删除所有无关的空白:

d = {option.text.strip(): option['value'] for option in soup.find_all('option')}
print(d['(EU 40 - US 7)'])

结果:

12_636

您还可以使用xpath和fromstring

# import requests
from lxml.html import fromstring
# url = ''
# tree = html.fromstring( requests.get(url).content)
h = '''
 <option class="disabled" value="12_654" >
(EU 38 2/3 - US 6)                      </option>
                      <option class="disabled" value="12_3716" >
(EU 39 1/3 - US 6,5)                      </option>
                      <option class="disabled" value="12_636" >
(EU 40 - US 7)                      </option>
                      <option class="" value="12_634" >
EU 40 2/3 - US 7,5                      </option>
                      <option class="" value="12_462" >
EU 41 1/3 - US 8                      </option>
                      <option class="" value="12_460" >
EU 42 - US 8,5                      </option>
                      <option class="" value="12_459" >
EU 42 2/3 - US 9                      </option>
                      <option class="" value="12_458" >
EU 43 1/3 - US 9,5                      </option>
                      <option class="" value="12_457" >
EU 44 - US 10                      </option>
                      <option class="" value="12_456" >
EU 44 2/3 - US 10,5                      </option>
                      <option class="" value="12_455" >
EU 45 1/3 - US 11                      </option>
                      <option class="disabled" value="12_559" >
(EU 46 - US 11,5)                      </option>
                      <option class="disabled" value="12_454" >
(EU 46 2/3 - US 12)                      </option>
                      <option class="disabled" value="12_453" >
(EU 47 1/3 - US 12,5)                      </option>
                    </sel
'''
tree = fromstring(h)
print(tree.xpath("//option[text()[contains(.,'(EU 40 - US 7)')]]/@value"))

相关问题 更多 >