【问题标题】:Python: Running a scrapy spider indefinitely to monitor page changesPython:无限期地运行一个爬虫来监控页面变化
【发布时间】:2017-09-26 09:03:57
【问题描述】:

我正在使用 scrapy 检查我感兴趣的某些服装产品的价格和供货情况。

程序本身按预期工作,但现在我不确定如何让它不断循环以作为页面监视器工作。我计划租用一台服务器让它无限期地在那里运行,如果可用性或价格发生变化,它会通过 slack 通知我。我只使用了一只蜘蛛,所以我的代码看起来像这样:

class MonitorSpider(SitemapSpider):
    name = 'page_monitor'
    sitemap_urls = [
    'https://www.example.com/sitemap.xml'
    'https://www.example.com/sitemap.xml'
    'https://www.example.com/sitemap.xml'
    ]

    # Using the sitemap rules so time won't be wasted following links I don't care about
    sitemap_rules =[('keyword', 'parse')]

    def parse(self, response):
        magically get price and availability

另外,如果有人能解决我之前与朋友的辩论,那也很有帮助。他认为对于这样的项目,漂亮的汤会运行得更快,但我认为scrapy 是更好的选择,因为我过去遇到过scrapy 的问题是它通常太快并且可以让你暂时被IP 禁止访问网站(我计划合并代理来解决这个问题)。我知道我可以制作一个脚本,使用漂亮的汤来复制这个脚本,然后只测试这两个脚本,但如果没有必要,我宁愿不这样做。

速度对于这个程序非常重要。我希望尽快收到通知。

【问题讨论】:

    标签: python beautifulsoup scrapy


    【解决方案1】:

    如果你想抓取相同的 url - 你应该再次放弃它:

    def parse(self, response):
        magically get price and availability
        yield scrapy.Request(response.url, callback=self.parse, dont_filter=True)
    

    你和你的朋友辩论的答案在Scrapy documentation

    BeautifulSoup 和 lxml 是用于解析 HTML 和 XML 的库。刮擦 是一个用于编写爬网的网络蜘蛛的应用程序框架 网站并从中提取数据。

    Scrapy 提供了一种用于提取数据的内置机制(称为 选择器),但您可以轻松地使用 BeautifulSoup(或 lxml),如果 你觉得和他们一起工作更舒服。毕竟,他们只是 可以从任何 Python 代码导入和使用的解析库。

    换句话说,将 BeautifulSoup(或 lxml)与 Scrapy 进行比较就像 将 jinja2 与 Django 进行比较。

    【讨论】:

    • 哇,老实说,我不知道我怎么没想到要第二次生成函数。另外,jinja2 应该比 django 快,所以说 beautifulsoup 比 scrapy 快? Scrapy 可以同时运行多个请求,而 bs4 不能。您会认为抓取站点地图以获取产品链接会更快
    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多