在python中捕捉xml解析中非类型的更好方法

2024-10-01 00:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要得到表的每个表div中的字符串。它遵循一个模式,即<td><p> <strong>text</strong></p></td>,除了最后一个td有{}。
如果我保持逻辑不变来提取最后一个td的文本,就会出现错误,即AttributeError:'NoneType'object has no attribute'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 and except来捕获这一部分,有没有更好的方法在xml中捕获这个Nonetype?在

谢谢


Tags: textfromimporttableallfindurllib2sg
1条回答
网友
1楼 · 发布于 2024-10-01 00:26:15

对于lxml,您还可以使用ElementPath,在您的例子中使用p//strongXPath表达式:

...
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

相关问题 更多 >