如何在Scrapy中用tbody刮取这个HTML结构


<table id="myTable" class="table table-striped table-bordered text-center table-condensed removeSidePadding" style="" xpath="1">
<thead class="success" style="padding: 15px; font-family: 'Nunito', sans-serif;"></thead>
<tbody style="">
<tr class="active" data-index="0" style=""></tr>
<tr data-index="1" style=""></tr>
<tr class="active" data-index="2"></tr>
<tr data-index="3"></tr>
<tr class="active" data-index="4"></tr>
<tr data-index="5"></tr>
<tr class="active" data-index="6"></tr>
<tr data-index="7"></tr>
<tr class="active" data-index="8"></tr>
<tr data-index="9"></tr>
</tbody>
</table>

至于要显示的代码,除了Scrapy生成的样板之外,我没有太多要显示的内容。我一直只在shell中工作,这样我就可以一个接一个地选择这些元素,但我遇到的问题是空列表。我之前做过研究,发现由于浏览器生成这些tbody标签,scratch不会拾取这些标签。(目前使用最新的FireFox(。

我想要的数据在tr标签中,我想我稍后可以完成,但在此之前我正在努力处理元素。

我在解析方法上确实取得了一些进展,但我又一次经常遇到tbody标记返回空的问题。

那么最终我该如何解析呢?

def parse(self, response):
contents = response.xpath("//table[@id='myTable']")
for content in contents:
pass

如果tbody不存在于源页面中并且是由浏览器生成的,则Scrapy不会找到它,但如果它们在源中,则会完美地选择它们。你可以通过查看你的斗志得到回应的response.body来检查。

不管怎样,它只是要调整正确的路径。

如果它的来源没有使用tbody:

response.xpath("//table[@id='myTable']/tr").getall()

如果是:

response.xpath("//table[@id='myTable']/tbody/tr").getall()

最新更新