我正在尝试使用 python/xpath 将论坛迁移到 phpbb3。尽管我对 python 和 xpath 还很陌生,但进展顺利。但是,我需要帮助解决错误。
(源文件已下载并使用tagsoup进行处理。)
Firefox/Firebug 显示 xpath:/html/body/table[5]/tbody/tr[position()>1]/td/a[3]/b
(在我没有 tbody 的脚本中)
这是我的代码的缩写版本:
forumfile="morethread-alte-korken-fruchtweinkeller-89069-6046822-0.html"
XPOSTS = "/html/body/table[5]/tr[position()>1]"
t = etree.parse(forumfile)
allposts = t.xpath(XPOSTS)
XUSER = "td[1]/a[3]/b"
XREG = "td/span"
XTIME = "td[2]/table/tr/td[1]/span"
XTEXT = "td[2]/p"
XSIG = "td[2]/i"
XAVAT = "td/img[last()]"
XPOSTITEL = "/html/body/table[3]/tr/td/table/tr/td/div/h3"
XSUBF = "/html/body/table[3]/tr/td/table/tr/td/div/strong[position()=1]"
for p in allposts:
unreg=0
username = None
username = p.find(XUSER).text #this is where it goes haywire
当循环在文件末尾点击用户“tompson”/position()=11 时,我得到
AttributeError: 'NoneType' object has no attribute 'text'
我已经尝试了很多try except else finallys
,但它们没有帮助。
我稍后会在脚本中获得更多信息,例如发布日期、用户注册日期、头像的 url 和属性、帖子的内容......
该脚本适用于该论坛的数百个其他文件/站点。
这不是编码/解码问题。而且它并不“限于” XUSER 部分。我试图“硬编码”用户名,然后注册日期将失败。如果我跳过这些,帖子的文本(代码见下文)将失败......
#text of getpost
text = etree.tostring(p.find(XTEXT),pretty_print=True)
现在,如果我的 xpath 错误,这整个错误将是有意义的。但是,所有其他文件和该文件中的第一批用户都可以使用。在 position()=11 只有这个“一个”
position() 不能 >10 吗?我不这么认为?我错过了什么吗?