关于xpath:使用python scrapy提取作为表的一部分的div标签条目

extract div tag entries that are part of a table using python scrapy

我试图用python scrapy在网页上提取一些数据。我不知道是否有足够的HTML/CSS格式,但似乎没有。我感兴趣的目标信息具有如下所示的模式。表包含一组我感兴趣提取的条目(name、year、int1、int2)。但是这些不是标准的td标记,而是DIV标记的一部分。下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<table width='100%'>
<tr>
<td width='50%'>
&nbsp;
     Mr. Richard D. Hanson
     1989
     1
     27</td><td width='50%'>&nbsp;
     Alison G. Mills, CPA
     1989
     8
     12</td></tr><tr><td width='50%'>&nbsp;
     Mr. Timothy D. Harrell
     1989
     28
     28</td><td width='50%'>&nbsp;
     Debora R. Mitchell, PhD
     1989
     20
     21</td></tr><tr><td width='50%'>&nbsp;
Mr. Tim J. Scoggins
     1989
     1
     9
</td>
</tr>
</table>

这是我到目前为止用废壳做的尝试

尝试1:

这是可行的,但是我需要将条目相互关联——即为下面访问的每个名称获取年份和int1和int2

1
2
>>> response.xpath('//div[@style="width: 232px; float: left"]/text()').extract()
[u'Mr. Richard D. Hanson', u'Alison G. Mills, CPA', u'Mr. Timothy D. Harrell', u'Debora R. Mitchell, PhD', u'Mr. Tim J. Scoggins']

尝试2:在这次尝试中,我希望对每个条目进行一次调用,然后迭代并将其存储在字典中。不幸的是,我不知道这里发生了什么

1
2
>>> response.xpath('//table[@width="100%"]/tr/td[@width="50%"]/div[@style="width: 10px; float: left"]/text()').extract()
[u'\xa0', u'\xa0', u'\xa0', u'\xa0', u'\xa0']

有什么主意吗?


您可以获取每个内部div的文本,然后将提取的列表分成块:

1
2
3
4
5
6
7
8
In [1]: data = response.xpath("//table/tr/td/div/text()").extract()
In [2]: [data[x+1:x+5] for x in xrange(0, len(data), 5)]
Out[2]:
[[u'Mr. Richard D. Hanson', u'1989', u'1', u'27'],
 [u'Alison G. Mills, CPA', u'1989', u'8', u'12'],
 [u'Mr. Timothy D. Harrell', u'1989', u'28', u'28'],
 [u'Debora R. Mitchell, PhD', u'1989', u'20', u'21'],
 [u'Mr. Tim J. Scoggins', u'1989', u'1', u'9']]