[英]Can't scrape reviews from multiple pages and it's only scraping reviews before (new line spacing) spacing
提前感謝您的寶貴時間。 我非常感謝。
我正在嘗試從亞馬遜上抓取產品評論、評級和其他信息。 下面是相同的代碼。 我得到的問題是:
鏈接到刮 - https://www.amazon.com/product-reviews/B01DFKC2SO/ref=cm_cr_arp_d_viewpnt_lft?pageNumber=
我的代碼:
import scrapy
class ReviewspiderSpider(scrapy.Spider):
name = 'reviewspider'
allowed_domains = ["www.amazon.com"]
start_urls = [
'https://www.amazon.com/product-reviews/B01DFKC2SO/ref=cm_cr_arp_d_viewpnt_lft?pageNumber=']
def parse(self, response):
for review in response.xpath("//div[@id='cm_cr-review_list']/div"):
yield {
'Name': review.xpath('.//span[@class="a-profile-name"]/text()').get(),
'Title': review.xpath('.//a[@data-hook="review-title"]/span/text()').get(),
'Rating': review.xpath('.//span[@class="a-icon-alt"]/text()').get(),
'Review': review.xpath('.//span[@data-hook="review-body"]/span/text()').get()
}
next_page = response.xpath(
"//a[text()='Next page']").get()
if next_page:
yield response.follow(url=next_page, callback=self.parse)
Output:
您忘記了 select 的href:
next_page = response.xpath("//a[text()='Next page']/@href").get()
您將整個標簽加入到 response.url,而不是 href。
至於為什么要刪除文本的問題。 文本沒有被刪除,你只是沒有得到它,你只是得到了文本的第一部分。 text()
返回一個純文本,如果有
它拆分文本。
關於如何修復它有兩種選擇。 首先是在 xpath 中使用字符串 function 作為跨度選擇器:
review.xpath('string(.//span[@data-hook="review-body"]/span)').get()
但我不推薦它,因為它只刪除選擇器中的標簽。 所以文本之間將沒有任何分隔符(例如“我有兩個。我有這么多......”“。”和“我”之間沒有任何分隔符)。
我建議使用getall
方法並獲取標簽的所有純文本,然后將它們與您認為合適的分隔符簡單地連接起來。
'\n'.join(review.xpath('.//span[@data-hook="review-body"]/span/text()').getall())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.