【发布时间】:2015-02-22 05:39:43
【问题描述】:
我正在抓取一个网站(经许可)。但是在这里我在选择table 的所有tr 元素时遇到了非常不规则的行为。
如果使用 xpath 选择它给我 67 长度,而如果我使用 findall 选择它给我 3 这是真的。
工作示例
import urllib2
from lxml import html
from lxml import etree
import string
import csv
req_headers = {
'User-agent':
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safar/537.36'
}
anz_extra_url = u"https://sg.anz.com/apps/wealth/"
request = urllib2.Request(anz_extra_url, None, req_headers)
page = urllib2.urlopen(request).read()
parser = etree.HTMLParser()
table_root = etree.fromstring(page, parser)
all_tables = table_root.xpath("//table[@width=869]")
len(all_tables[1].findall("tr"))
#output = 3
len(all_tables[1].xpath("//tr"))
#output = 67
编辑:
all_tables[1] 的结构如下所示
etree.tostring(all_tables[1])
#output
<table width="869" border="0" cellpadding="0" cellspacing="1"> \n <tr> \n <td width="35%" align="left" bgcolor="#004165" style="font-weight: bold; color: #FFFFFF; padding: 5px 15px;"> \n Placement Amount</td> \n <td width="65%" bgcolor="#004165" style="font-weight: bold; color: #FFFFFF; padding: 5px 15px;;" align="center"> \n 9-Month ANZ Instant Interest Time Deposit Interest Rate </td> \n </tr> \n <tr> \n <td align="left" style="padding: 5px 15px;"> \n SGD150,000 and above \n </td> \n <td align="center" style="padding: 5px 15px;"> \n 1.38% p.a. \n </td> \n </tr> \n <tr> \n <td align="left" bgcolor="#C6DFEA" style="padding: 5px 15px;"> \n Below SGD150,000</td> \n <td align="center" bgcolor="#C6DFEA" style="padding: 5px 15px;"> \n 0.70% p.a. \n </td> \n </tr> \n </table> \n \n
那么为什么会这样呢?
谢谢
【问题讨论】:
-
all_tables[1]看起来像什么?tr的子元素是什么?//tr将返回所有tr元素及其后代。 -
@DaveCoast 添加表结构
标签: python python-2.7 parsing xpath elementtree