我正在尝试从这个HTML代码中删除一些数据。更准确地说我想获得所有数字(这里:[401969217,401969218])。当然,html网站更长,存在更多数字。
<p class="price asking help ">
<span class="title">Asking Price:</span><b>$349,900<span class="help" title="The total asking price of the business for sale."><i class="fa fa-question-circle"></i></span></b>
</p>
我能够通过以下方法抓住所有球队:
<td class="nw">1. FC Köln</td>
<td class="nw">Hamburger SV</td>
<td class="nw">3 - 7 - 10</td>
<td class="kicktipp-tippabgabe ">
<input name="spieltippForms[401969217].tippAbgegeben" id="spieltippForms_401969217_tippAbgegeben" value="true" type="hidden"/>
<input id="spieltippForms_401969217_heimTipp" name="spieltippForms[401969217].heimTipp" type="tel" value="2" size="2" maxlength="3"/>:
<input id="spieltippForms_401969217_gastTipp" name="spieltippForms[401969217].gastTipp" type="tel" value="2" size="2" maxlength="3"/>
</td>
</tr>
<tr>
<td class="nw kicktipp-time">26.08.17 15:30</td>
<td class="nw">Bayer 04 Leverkusen</td>
<td class="nw">1899 Hoffenheim</td>
<td class="nw">6 - 3 - 10</td>
<td class="kicktipp-tippabgabe ">
<input name="spieltippForms[401969218].tippAbgegeben" id="spieltippForms_401969218_tippAbgegeben" value="true" type="hidden"/>
<input id="spieltippForms_401969218_heimTipp" name="spieltippForms[401969218].heimTipp" type="tel" value="2" size="2" maxlength="3"/>:
<input id="spieltippForms_401969218_gastTipp" name="spieltippForms[401969218].gastTipp" type="tel" value="2" size="2" maxlength="3"/>
</td>
</tr>
<tr>
<td class="nw kicktipp-time"/>
...
不幸的是,我不知道如何修改它以解决我的新问题。希望你能帮忙:)
答案 0 :(得分:2)
在您的xpath表达式中,您不希望'//td[@class="nw"]/text()'
,因为它会获取标记之间的值class="nw"
作为属性。相反,根据您提供的html和所需的输出,您应该尝试抓取name
标记的input
属性并解析该值。
from lxml import html
import re
h = html.fromstring('''<table><tr><td class="kicktipp-tippabgabe ">
<input name="spieltippForms[401969217].tippAbgegeben" id="spieltippForms_401969217_tippAbgegeben" value="true" type="hidden"/>
<input id="spieltippForms_401969217_heimTipp" name="spieltippForms[401969217].heimTipp" type="tel" value="2" size="2" maxlength="3"/>:
<input id="spieltippForms_401969217_gastTipp" name="spieltippForms[401969217].gastTipp" type="tel" value="2" size="2" maxlength="3"/>
</td>
</tr>
<tr>
<td class="nw kicktipp-time">26.08.17 15:30</td>
<td class="nw">Bayer 04 Leverkusen</td>
<td class="nw">1899 Hoffenheim</td>
<td class="nw">6 - 3 - 10</td>
<td class="kicktipp-tippabgabe ">
<input name="spieltippForms[401969218].tippAbgegeben" id="spieltippForms_401969218_tippAbgegeben" value="true" type="hidden"/>
<input id="spieltippForms_401969218_heimTipp" name="spieltippForms[401969218].heimTipp" type="tel" value="2" size="2" maxlength="3"/>:
<input id="spieltippForms_401969218_gastTipp" name="spieltippForms[401969218].gastTipp" type="tel" value="2" size="2" maxlength="3"/>
</td>
</tr>
</table>''')
numbers = [int(x) for e in h.xpath('//input[@type="hidden"]')
for x in re.findall(r'\[(\d+)\]', e.get('name'))]
numbers
# returns:
[401969217, 401969218]
答案 1 :(得分:1)
使用其中的数字获取id
s的另一种方法是使用这样的代码。
>>> from lxml import html
>>> tree = html.parse('table.htm')
>>> tree.xpath('.//input[contains(@id,"_heimTipp")]/@id')
['spieltippForms_401969217_heimTipp', 'spieltippForms_401969218_heimTipp']
我不知道在id
的值中可以找到哪种变化,因此要说明如何处理它们并不容易。但它可能很简单,
>>> ids = tree.xpath('.//input[contains(@id,"_heimTipp")]/@id')
>>> numbers = [int(id.split('_')[1]) for id in ids]
>>> numbers
[401969217, 401969218]