Scrapy检测标记不关闭

问题描述:

被抓取的html页面有一个sql错误,我注意到html标记甚至没有关闭,但我的xpath选择器无法检测到标记内部没有关闭。Scrapy检测标记不关闭

我如何检测不与scrapy关闭的标签?

感谢

+0

请添加错误,如果任何或你的代码,你想放弃,这样我们就可以帮助网站。 – Mani

+0

欢迎来到堆栈溢出!寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建[mcve]。使用“编辑”链接来改善你的*问题* - 不要通过评论添加更多信息。谢谢! – GhostCat

有很多的工具和库,尝试修复损坏的HTML/XML内容。然而,由于scrapy已在使用lxml库解析我们也可以用它来修复损坏的文件:

from lxml import etree 
from scrapy import Selector 

def parse(self, response): 
    # lets pretend we have this unclosed <li> in our response 
    print(response.body) 
    #"<ul><li>foo</ul>" 
    # create an lxml parser with recover parameter 
    parser = etree.XMLParser(recover=True) 

    # retrieve xml document 
    broken_body = etree.tostring(response.selector.root) 
    clean_doc = etree.fromstring(broken_body, parser=parser) 
    selector = Selector(root=clean_doc) 
    selector.xpath("//li/text()").extract_first() 
    # foo 
+0

谢谢你Granitosaurus! – Vinceska