python-3.x - 重复地从相同的 url 中抓取数据,但有时间延迟

标签 python-3.x web-scraping scrapy

我试图在一段时间内持续抓取单个网页以监控某些值以及它们在该期间内的变化情况

我没有网络抓取方面的经验,我对为什么我的 scrapy 蜘蛛运行一次并挂起感到有点困惑。

我正在尝试通过“main.py”脚本运行蜘蛛,如下所示:

timecheck = timeit.default_timer()

while (timecheck) < 30:
    if __name__ == "__main__":
        settings = get_project_settings()
        crawler = CrawlerProcess(settings)
        crawler.crawl(mySpider())
        crawler.start(stop_after_crawl=False)
    time.sleep(5)

print("Finished crawl, time elapsed: %s" % str(timecheck))

我的爬虫脚本如下:

class poeSpider(scrapy.Spider):
    name = "spidername"

    def start_requests(self):
        urls = ["myurl.com/page1"]
        allowed_domains = ["myurl.com"]

        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse, dont_filter=True)


    def parse(self,response):

        datavar = response.xpath("/mydata").extract()
        print(datavar[:3])

PS:另一个问题,但相关:

我还希望在抓取之间将数据存储在某种列表或变量中,以便我能够在程序运行时比较这些值,理想情况下没有任何文件 I/O,这是我的理由使用 'main.py' 虽然我也不知道如何将蜘蛛的 parse 函数中的数据传递到任何我可以进行此类比较的地方。

最佳答案

您应该将逻辑保留在蜘蛛本身中:

import scrapy
import logging
import time
from scrapy import signals, Request

class MySpider(scrapy.Spider):
    start_urls = ['first_url']

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super(MySpider, cls).from_crawler(crawler, *args, **kwargs)
        crawler.signals.connect(spider.spider_idle, signals.spider_idle)
        return spider

    def parse(self, response):
        # parse page
        pass

    def spider_idle(self, spider):
        time.sleep(30)
        # after 30 seconds crawl the same page again
        logging.info('starting a crawl again!')
        self.crawler.engine.schedule(Request(self.start_urls[0], dont_filter=True), spider)
        raise DontCloseSpider

在这个例子中,当蜘蛛进入空闲状态后,它会冷静 30 秒,然后重新开始抓取 url,并不断重复这一过程,直到它被杀死或停止。

关于python-3.x - 重复地从相同的 url 中抓取数据,但有时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44906738/

相关文章:

python - 如何在 Scrapy 中创建基于 href 的 LinkExtractor 规则

javascript - 使用 javascript (phantomjs) 导航/抓取 hashbang 链接

web-scraping - 抓取错误 : 'NotSupported: Unsupported URL scheme ' ': no handler available for that scheme'

python - 如何有效地定位句子中特定的单词序列

python-3.x - 使用解析器重新同步的 PLY.yacc 错误处理

python - 在不知道网页结构的情况下使用 Scrapy 抓取所有文本

python - 如何让 Scrapy 只抓取一页(使其非递归)?

python - 强制 Python Scrapy 不对 URL 进行编码

python - 在Python字典中for循环时添加相同的键和值

python - 直接从 Qthread PyQt 5 更改 GUI