我正在尝试使用以下代码抓取页面。当我运行代码时,我在titles变量的第一次赋值时遇到错误。错误是:AttributeError:'NonType'对象没有属性'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()
答案 0 :(得分: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(',')