我需要在表的每个表div中获取字符串。它有一种模式,即<td><p> <strong>text</strong></p></td>
除了最后一个有<td><p> <span><strong>text</strong></span></p></td>
的td
如果我保持我的逻辑相同以提取文本我得到最后一个td的错误,即AttributeError:'NoneType'对象没有属性'text。
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'
}
cimb_extra_url = u"http://www.cimbbank.com.sg/index.php?ch=sg_per_st&pg=sg_per_st_inv&ac=14&tpt=cimb_sg"
request = urllib2.Request(cimb_extra_url, None, req_headers)
page = urllib2.urlopen(request).read()
parser = etree.HTMLParser()
table_root = etree.fromstring(page, parser)
main_table = table_root.xpath("//table[@bordercolor='#FFFFFF']")[0]
all_tr = main_table.findall("tbody/tr")
for tr_itr in xrange(1,len(all_tr)):
all_td = all_tr[tr_itr].findall("td")
print tr_itr
for td_itr in xrange(1,len(all_td)):
current_td = all_td[td_itr].find('p')
try:
print all_td[td_itr].find('p').find('strong').text
except Exception:
print all_td[td_itr].find('p').find('span').find('strong').text
目前我正在使用try,除了捕获这一部分,是否有更好的方法在xml中捕获此Nonetype?
由于
答案 0 :(得分:1)
使用lxml,您也可以使用ElementPath,在您的情况下使用p//strong
XPath表达式:
...
for tr_itr in xrange(1,len(all_tr)):
all_td = all_tr[tr_itr].findall("td")
print tr_itr
for td_itr in xrange(1,len(all_td)):
current_td = all_td[td_itr].find('p')
print all_td[td_itr].find('p//strong').text