python - 解析 HTML 中的特定值
python - Parse specific value in an HTML
亲爱的社区,晚上好。我今晚的问题如下:我有这张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 我希望能够解析值 12_636
我以前已经使用 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']
看起来像这样,但我知道,这是不正确的。现在我完全不知道如何找到价值,所以我将非常感谢我得到的任何帮助。非常感谢亲爱的社区!
创建一个字典,将每个 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"))
亲爱的社区,晚上好。我今晚的问题如下:我有这张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 我希望能够解析值 12_636
我以前已经使用 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']
看起来像这样,但我知道,这是不正确的。现在我完全不知道如何找到价值,所以我将非常感谢我得到的任何帮助。非常感谢亲爱的社区!
创建一个字典,将每个 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"))