Python Scrapy爬虫程序未处理XHR请求

Python Scrapy爬虫程序未处理XHR请求,python,web-scraping,xmlhttprequest,scrapy,scrape,Python,Web Scraping,Xmlhttprequest,Scrapy,Scrape,我的爬行器只在前10页上爬行,所以我假设它没有通过请求进入LoadMore按钮 我正在抓取此网站: 我的蜘蛛代码: import scrapy from scrapy.conf import settings from scrapy.http import Request from scrapy.selector import Selector from reviews.items import ReviewItem class T3Spider(scrapy.Spider): na

我的爬行器只在前10页上爬行,所以我假设它没有通过请求进入LoadMore按钮

我正在抓取此网站:

我的蜘蛛代码:

import scrapy
from scrapy.conf import settings
from scrapy.http import Request
from scrapy.selector import Selector
from reviews.items import ReviewItem


class T3Spider(scrapy.Spider):
    name = "t3" #spider name to call in terminal
    allowed_domains = ['t3.com'] #the domain where the spider is allowed to crawl
    start_urls = ['http://www.t3.com/reviews'] #url from which the spider will start crawling

    def parse(self, response):
        sel = Selector(response)
        review_links = sel.xpath('//div[@id="content"]//div/div/a/@href').extract()
        for link in review_links:
            yield Request(url="http://www.t3.com"+link, callback=self.parse_review)
#if there is a load-more button:
        if sel.xpath('//*[@class="load-more"]'):
            req = Request(url=r'http://www\.t3\.com/more/reviews/latest/\d+', headers = {"Referer": "http://www.t3.com/reviews", "X-Requested-With": "XMLHttpRequest"}, callback=self.parse)
            yield req
        else:
            return

    def parse_review(self, response):
        pass #all my scraped item fields
我做错了什么?对不起,我是新来的。感谢您的时间、耐心和帮助。

如果您检查“加载更多”按钮,您将找不到任何关于加载更多评论链接构造方式的指示。背后的想法相当简单-后面的数字
http://www.t3.com/more/reviews/latest/
看起来像是上次加载文章的时间戳。您可以通过以下方式获得:

import calendar

from dateutil.parser import parse
import scrapy
from scrapy.http import Request


class T3Spider(scrapy.Spider):
    name = "t3"
    allowed_domains = ['t3.com']
    start_urls = ['http://www.t3.com/reviews']

    def parse(self, response):
        reviews = response.css('div.listingResult')
        for review in reviews:
            link = review.xpath("a/@href").extract()[0]
            yield Request(url="http://www.t3.com" + link, callback=self.parse_review)

        # TODO: handle exceptions here

        # extract the review date
        time = reviews[-1].xpath(".//time/@datetime").extract()[0]

        # convert a date into a timestamp
        timestamp = calendar.timegm(parse(time).timetuple())

        url = 'http://www.t3.com/more/reviews/latest/%d' % timestamp
        req = Request(url=url,
                      headers={"Referer": "http://www.t3.com/reviews", "X-Requested-With": "XMLHttpRequest"},
                      callback=self.parse)
        yield req

    def parse_review(self, response):
        print response.url
注:

  • 这需要安装模块
  • 你应该重新检查代码,确保你得到了所有的评论而没有跳过任何一个
  • 你应该以某种方式结束这种“加载更多”的事情

我在页面的任何地方都看不到“加载更多”按钮。在@AlecxeInterest页面的末尾,在google chrome中我看到更多评论链接,该链接将我重定向到存档。在Firefox中,是的,我看到“加载更多”,奇怪:)这很奇怪。。。我现在在chrome上打开,仍然可以查看“加载更多”按钮,而看不到任何“更多评论”。。。哇…在这个档案中,如果你选择任何一个月,它都不会将你重定向到newst review@alecxe查看:)在chrome中仍然可以看到加载更多按钮@你怎么知道后面的数字“您如何发现它是上次加载文章的时间戳@alecxe@InêsMartins我检查了浏览器发送的XHR请求,将URL末尾的数字加载到datetime,发现这些是最后加载的文章的时间戳。我希望我在建议的示例代码中正确地实现了它。它成功了:)非常感谢!奇怪的是,在scrapinghub中抛出了错误“ImportError:没有名为dateutil.parser的模块”,但本地正在工作。。。我已经安装了dateutil@alecxe“你应该以某种方式结束这个”加载更多“的事情”你这是什么意思@阿莱克斯