【问题标题】:Python lxml HTML xpath query code not workingPython lxml HTML xpath查询代码不起作用
【发布时间】:2014-01-07 15:26:46
【问题描述】:

我正在尝试使用以下代码抓取页面。当我运行代码时,我在第一次分配给titles 变量时遇到错误。错误是:AttributeError: 'NonType' object has no attribute 'split'。

如果我只是用 print(tag.text) 替换分配,它会按预期工作。对 commmands 变量的第二次赋值也按预期工作。为什么第一个作业会产生错误?

代码:

import requests
import lxml.html as LH

s = requests.Session()
r = s.get('http://www.rebootuser.com/?page_id=1721')

root = LH.fromstring(r.text)
def getTags():
    commands = []
    titles = []

    for tag in root.xpath('//*/tr/td[@width="54%"]/span'):
        titles += tag.text.split(',')

    for tag in root.xpath('//*/td/span/code'):
        commands += tag.text.split(',')

    zipped = zip(titles, commands)

    for item in zipped:
        print item
getTags()

【问题讨论】:

    标签: python parsing xpath lxml


    【解决方案1】:

    在文档中,一些匹配 xpath //*/tr/td[@width="54%"]/span 的标签包含 b 标签作为子标签而不是文本。

    访问此类标签的文本属性返回None

    >>> None.split(',')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'split'
    

    使用text_content method 而不是text 属性来正确获取此类标签(及其子标签)的文本内容:

    for tag in root.xpath('/tr/td[@width="54%"]/span'):
        #titles += tag.text.split(',')
        titles += tag.text_content().split(',')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2016-03-06
      • 2012-07-29
      • 2015-02-28
      相关资源
      最近更新 更多