簡體   English   中英

python-解析HTML中的特定值

[英]python - Parse specific value in an HTML

晚上好,親愛的社區。 我今晚的問題如下:我有這段HT​​ML:

                      <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"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM