用tr作为标题的scrapy表如何导入它

时间:2016-02-05 20:07:47

标签: python scrapy web-crawler

我想在scrapy中导入一个表格,如下所示:

<tr class="header1">
<tr class="row1">
<tr class="row2">
<tr class="row3">
<tr class="header2">
<tr class="row4">

依赖于标题之间的不同行,如何导入标题,以便我有一个项目,第一个属性是标题名称或文本?像

header1, row1
header1, row2
header1, row3
header2, row4

1 个答案:

答案 0 :(得分:0)

你可以迭代&#34;行&#34;节点,并为每个节点获取前面的&#34;标头&#34;同级

想象一下,您有以下输入HTML:

<table>
    <tr class="header1">HEADER 1</tr>
    <tr class="row1">ROW 1</tr>
    <tr class="row2">ROW 2</tr>
    <tr class="row3">ROW 3</tr>
    <tr class="header2">HEADER 2</tr>
    <tr class="row4">ROW 4</tr>
</table>

现在,您可以通过以下方式解析它:

>>> for row in response.css("tr[class^=row]"):
...     header_text = row.xpath("preceding-sibling::tr[starts-with(@class, 'header')][1]/text()").extract_first()
...     row_text = row.xpath("text()").extract_first()
...     print(header_text, row_text)
... 
(u'HEADER 1', u'ROW 1')
(u'HEADER 1', u'ROW 2')
(u'HEADER 1', u'ROW 3')
(u'HEADER 2', u'ROW 4')