【发布时间】:2016-09-19 09:16:45
【问题描述】:
我正在创建一个新的 scrapy 蜘蛛,一切进展顺利,尽管我在其中一个网站上遇到了问题,其中 response.xpath 正在返回列表中不存在于 html 代码中的对象:
{"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>
我知道我可以 strip() 字符串并删除空格,尽管它只会缓解问题,而不是删除主要问题,即在结果中包含空格。
为什么会这样?如何将 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 提供信息。问题是我不想有空格,也不想 \t 和 \n - 它根本不应该包含在结果中。我正在寻找标签中的文本,而不是在标签之外进行格式化。有什么想法可以改进吗?