我正在抓取博客文章并遇到一個奇怪的問題。當提取整個元素而不是僅提取文本時,scrapy 將回傳所選元素 網頁中緊隨其后的每個元素/結束標記。例如,我有這個代碼:
import scrapy
class postscraperSpider(scrapy.Spider):
name = 'postscraper'
allowed_domains = ['example.com']
start_urls = ['https://www.example.com/blog-post/']
def parse(self, response):
yield{
'title': response.css('.title_container > h1.entry-title::text').get(),
'content': response.css('div.text_1 .text_inner h2').get()
}
運行時,標題會填充正確的文本。但是,內容由正確的回應填充,然后是每個元素和它后面的結束標記。
如果我嘗試提取文本,它會很好地填充。像這樣:
def parse(self, response):
yield{
'title': response.css('.title_container > h1.entry-title::text').get(),
'content': response.css('div.text_1 .text_inner h2::text').get()
}
我不能只提取文本的原因是因為我從 text_inner 中提取的不僅僅是 h2s。我需要提取所有孩子,包括他們的標簽。我真正需要的是看起來像這樣的代碼,但我覺得上面更好地說明了我的問題:
def parse(self, response):
yield{
'title': response.css('.title_container > h1.entry-title::text').get(),
'content': response.css('div.text_1 .text_inner > *').get()
}
感謝您提供的任何幫助。
相關:在 scrapy 中使用 response.xpath() 或 response.css 時沒有列印文本
還相關: Python:Scrapy 回傳所有 html 以下元素,而不僅僅是元素的 html
看起來這是一個環境錯誤。我將嘗試重新安裝 Anaconda。
uj5u.com熱心網友回復:
也許您可以嘗試使用 .extract_first() 實體而不是 .get()。由于陣列中的示例網站,很難判斷您的 CSS 選擇器是否正確。嘗試轉到 chrome 并搜索您使用的 CSS 選擇器,看看它是否回傳所有結束標記和元素。
uj5u.com熱心網友回復:
重新安裝 python anaconda 為我解決了這個問題。我不確定發生了什么。我確實安裝了 python 3.8 和 3.9,所以它們之間可能存在沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/387449.html
