Python 使用Scrapy删除基于Ajax的评论页面

Python 使用Scrapy删除基于Ajax的评论页面,python,ajax,scrapy,scrapy-spider,Python,Ajax,Scrapy,Scrapy Spider,在那里。我正试图浏览一个网站。一切都很好,问题是我不知道如何删除ajax内容。我正在抓取的网站使用ajax内容通过Post请求获取评论页面。以下是chrome开发工具所说的 我做了很多研究,但我不知道如何抓取ajax内容。我知道表单数据和post或get请求,但我不能使用它们。此外,我不知道如何刮我需要的内容。我猜不能使用XPath或选择器来刮取它。此外,如果您检查URL,在review部分中有ReadMore按钮,是否可以使用与ajax内容相同的策略对其进行刮取 我能勉强读完第一页,但我被困

在那里。我正试图浏览一个网站。一切都很好,问题是我不知道如何删除ajax内容。我正在抓取的网站使用ajax内容通过Post请求获取评论页面。以下是chrome开发工具所说的

我做了很多研究,但我不知道如何抓取ajax内容。我知道表单数据和post或get请求,但我不能使用它们。此外,我不知道如何刮我需要的内容。我猜不能使用XPath或选择器来刮取它。此外,如果您检查URL,在review部分中有ReadMore按钮,是否可以使用与ajax内容相同的策略对其进行刮取

我能勉强读完第一页,但我被困在下一页了。这就是spider终止的方式,它获取下一页的url,请求,但什么也没发生。 这是代码

import scrapy
from scrapy.http import Request, FormRequest
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from quo.items import QuoItem

class MySpider(scrapy.Spider):
    name = 'quotes'


    def start_requests(self):
        yield scrapy.Request('https://www.daraz.pk/infinix-s2-pro-32gb-3gb-4g-lte-black-6619437.html', self.parse)


    def parse(self, response):
         for href in response.xpath('//div[@class="reviews"]'):
          item=QuoItem()


          Rating=response.xpath('//*[@id="ratingReviews"]/section[3]/div[2]/article/div[2]/div[1]/div/div/@style').extract()
          if Rating:

              item['Rating']=Rating


          ReviewT=response.xpath('//*[@id="ratingReviews"]/section[3]/div[2]/article/div[2]/div[2]/text()').extract()
          if ReviewT:
              item['ReviewT']=ReviewT

          yield item

          next_page=response.xpath('(//ul[@class="osh-pagination -horizontal"]/li[@class="item"]/a[@title]/@href)[last()]').extract() #xpath for next button which contains the url.
          if next_page:

                       yield scrapy.Request(response.urljoin(next_page[0]), callback=self.parse)
评论中请求更新:

我试过用它,但我想我用得不好。它什么也没做。这是代码的附加项

next_page=response.xpath('(//ul[@class="osh-pagination -horizontal"]/li[@class="item"]/a[@title]/@href)[last()]').e‌​xtract() 
if next_page: 
    yield scrapy.Request(response.urljoin(next_page[0]), callback=self.parse_jsonloads) 

def parse_jsonloads(self, response): 
    data=json.loads(response.body) 

    for item in data.get('reviews', []): 
        ReviewT=item.get('author') 

    yield json.loads(response.body_as_unicode())

“AJAX内容”基于第二个请求,在页面加载后,web浏览器使用javascript向服务器发出请求,请求数据,然后页面显示或处理这些数据。您只需找到发出请求的URL(如果URL位于原始文件中,则使用xpath),然后向该URL发出请求。下一个页面=response.xpath…的作用与此完全相同。它获取url并发出请求…产生scrapy.request。。如果您看到我附加的输出日志文件,您将看到它发出请求,但什么也没有发生。请指出,如果我不理解此处的某些内容,很难确定,因为我无法测试代码,但您似乎对json响应使用了与HTML响应相同的回调(
self.parse
)。JSON响应只是一个JSON文件,没有使用XPATH的HTML或XML。对此请求使用不同的回调,然后使用简单的
yield json.loads(response.body\u as\u unicode())
解析数据,这应该会返回您想要的结果。我已经尝试过使用它,但我想我没有很好地使用它。它什么也没做。下面是代码next_page=response.xpath(“(//ul[@class=“osh pagination-horizontal”]/li[@class=“item”]/a[@title]/@href][last()”).extract()如果next_page:yield scrapy.Request(response.urljoin(next_page[0]),callback=self.parse_jsonloads)def parse_jsonloads(self,response):data=json.loads(response.body)for item in data.get('reviews',[]):ReviewT=item.get('author')生成json.loads(response.body_as_unicode())“AJAX内容”基于第二个请求,在加载页面后由web浏览器使用javascript发出,向服务器请求数据,然后页面显示或处理这些数据。您只需找到发出请求的URL(如果URL位于原始文件中,则使用xpath),然后向该URL发出请求。下一个页面=response.xpath…的作用与此完全相同。它获取url并发出请求…产生scrapy.request。。如果您看到我附加的输出日志文件,您将看到它发出请求,但什么也没有发生。请指出,如果我不理解此处的某些内容,很难确定,因为我无法测试代码,但您似乎对json响应使用了与HTML响应相同的回调(
self.parse
)。JSON响应只是一个JSON文件,没有使用XPATH的HTML或XML。对此请求使用不同的回调,然后使用简单的
yield json.loads(response.body\u as\u unicode())
解析数据,这应该会返回您想要的结果。我已经尝试过使用它,但我想我没有很好地使用它。它什么也没做。下面是代码next_page=response.xpath(“(//ul[@class=“osh pagination-horizontal”]/li[@class=“item”]/a[@title]/@href][last()”).extract()如果next_page:yield scrapy.Request(response.urljoin(next_page[0]),callback=self.parse_jsonloads)def parse_jsonloads(self,response):data=json.load(response.body)用于data.get中的项('reviews',[]):ReviewT=item.get('author')生成json.load(response.body作为\u unicode())