我试图用python从HTML表中提取键/值{1,2}对,并将它们拉入字典。你知道吗
表元素看起来并不总是一样的,这就是我的问题所在。你知道吗
一个简单的例子:
<div class="grabme">
<table>
<tbody>
<tr>
<td colspan="2">
<p class="1st 2nd 3rd">
Box Headline</p>
</td>
</tr>
<tr>
<td><strong>First Key</strong></td>
<td><span>Value</span></td>
<script>
</script>
</tr>
<tr>
<td><strong>2. Key</strong></td>
<td><a>Value</a><br></td>
</tr>
<tr>
<td><strong>3. Key</strong></td>
<td>Value</td>
</tr>
<tr>
<td><strong>4. Key</strong></td>
<td>
<a >Val 1</a>
Val 2
<script>
$(document).ready(function () {
$('.class').click(function (e) {
e.bla();
sel.bla('/bla/bla', {
bla: true
}
);
});
});
</script>
</td>
</tr>
<tr>
<td><strong>5. Key</strong></td>
<td>
<i></i>
Value
</td>
</tr>
</tbody>
<tbody>
<tr>
<td colspan="2">
<p class="">
Heading 2</p>
</td>
</tr>
<tr>
<td><strong>6. Key</strong></td>
<td>Value</td>
</tr>
</tbody>
</table>
获得钥匙很容易:
keys = response.xpath('//div[@class="grabme"]/table/tbody/tr/td/strong/text()').extract()
不幸的是,我无法获得示例中的所有键,因为键6位于新的tbody中。但是作为一个黑客,我可以单独得到它,然后再口述。你知道吗
获取这些值要困难得多。我的最佳选择是:
values = [remove_tags(w).strip() for w in response.xpath('//div[@class="grabme"]/table/tbody/tr/td[1]/text()').extract()]
由于额外的html标记,这种不幸的方法不起作用。 如果我能够获取所有值,那么我可以将它们拉入一个dict:
dict = {first: second for first, second in zip(keys, values)}
这一部分可能也很棘手,因为示例显示键4有2个值。可以用分隔符将它们放入一个值中,这样我以后就可以进行相应的处理。你知道吗
如何获取示例中的值,或者更好,是否有更聪明的方法获取所有所需键、值对的字典?你知道吗
由于结构不同,此尝试失败:
cells = response.xpath('//div[@class="grabme"]/tbody/tr/td/text()').extract()
dict = {first: second for first, second in zip(cells[::2], cells[1::2])}
您可以尝试使用此XPath来匹配键和值:
或者把它分成
更新
相关问题 更多 >
编程相关推荐