我正在创建一个新的scrapy蜘蛛,并且一切都很顺利,虽然我遇到了其中一个网站的问题,其中response.xpath正在返回列表中的对象“T HTML代码中存在:Scrapy中的XPath返回不存在的元素
{"pdf_name": ["\n\t\t\t\t\t\t\t\t\t", "ZZZZZZ", "\n\t\t\t\t\t\t\t\t\t", "PDF", "\n\t\t\t\t\t\t\t\t"],
{"pdf_name": ["\n\t\t\t\t\t\t\t\t\t\t", "YYYYYY", "\n\t\t\t\t\t\t\t\t\t\t", "XXXXXX"]}
正如你可以看到下面,这些 “空” 的对象(\ t和\ n)不包含在HTML标签。如果我理解正确,XPath是包括标签前的空格:
<div class="inner d-i-b va-t" role="group">
<a class="link-to" href="A.pdf" target="_blank">
<i class="offscreen">ZZZZZZ</i>
<span>PDF</span>
</a>
<div class="text-box">
<a href="A.pdf">
<i class="offscreen">YYYYYY</i>
<p>XXXXXX</p></a>
</div>
</div>
我知道我可以带()的字符串,并删除空格,尽管这只是缓解了问题,而不是删除的主要问题,这是包括结果中有空白。
为什么会发生?如何将XPath结果限制为标签(我之前认为它是默认完成的)?
蜘蛛代码 - 解析函数(pdf_name导致的问题)
def parse(self, response):
# Select all links to pdfs
for pdf in response.xpath('//a[contains(@href, ".pdf")]'):
item = PdfItem()
# Create a list of text fields for links to PDFs and their descendants
item['pdf_name'] = pdf.xpath('descendant::text()').extract()
yield item
由于操作符是JSON格式,因此您会看到\ t和\ n。如果您将它们加载到数据库中,您将拥有必要的空白区域。 – Backtrack
感谢@Backtrack的信息。问题是我不想有空格,也不\ n - 它不应该包含在结果中。我正在寻找标签中的文字,而不是在他们之外格式化。任何想法如何改善这一点? – Starid
这里是一个例子:http://stackoverflow.com/questions/5992177/what-is-the-difference-between-normalize-space-and-normalize-spacetext – Backtrack