【问题标题】:How to not crawl If the same as crawl data before in scrapy framework如果和之前在scrapy框架中爬取数据一样,如何不爬取
【发布时间】:2017-06-28 08:09:33
【问题描述】:

如果和之前在scrapy框架中爬取数据一样,我不喜欢爬取。

为了解决这个问题,我认为当抓取完成后,将日期时间放入数据库中,如果 Last-Modified 响应 HTTP 自该日期时间以来尚未更新,则不要抓取。

我的问题是以下两个。

  1. 您如何看待这种方式?有更好的想法吗?
  2. 能否教教我是否有代码可以使用 scrapy 框架引用 Last-Modified 响应 HTTP 控件?

感谢您阅读我的问题。

【问题讨论】:

  • 使用Last-Modified 是个好主意。您可以通过response.headers获取响应头。

标签: python http-headers scrapy last-modified


【解决方案1】:

并非所有网站都返回 Last-Modified 标头,如果您确定自己的,可以尝试先发出 HEAD 请求以检查标头并与您的数据库信息匹配,然后发出 GET 请求以抓取数据:

def parse(self, response):
    urls = []  # some urls
    for url in urls:
        yield Request(url, method='HEAD', self.check)

def check(self, response):
    date = response.headers['Last-Modified']
    #check date to your db
    if db_date > date:  # or whatever is your case
        yield Request(response.url, self.success)

def success(self, response):
    yield item

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多