我正在創建一個新的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