【问题标题】:I need a web scraper to use for a performance critical project? [closed]我需要一个网络爬虫来用于性能关键项目? [关闭]
【发布时间】:2019-11-03 16:21:31
【问题描述】:

任何人都可以推荐在需要速度的项目中使用的网络解析器(python 或 node.js)吗? 我目前正在使用 bs4(lxml) 但它似乎不是最快的。 您可以在这里看到 bs4 和纯 lxml 之间的速度测试比较: https://edmundmartin.com/beautiful-soup-vs-lxml-speed/

【问题讨论】:

  • @Prune 谢谢!之后我会删除这个问题,只是想得到一些快速的答案。
  • “Delete after”不会使这个问题成为可接受的问题。

标签: javascript python node.js beautifulsoup cheerio


【解决方案1】:

我相信您可以在没有 bs4 包装器的情况下使用 lxml 解析器本身 (https://lxml.de/index.html) 来获得比带有 lxml 解析器后端的 bs4 更好的性能。

但是,这是一个意见和个人喜好问题,我认为在 SO 上不太受欢迎。我认为 bs4 接口值得性能开销。此外,我更喜欢内置的 python html.parser(只要你有最新版本),因为我喜欢它处理格式错误的网页的方式,而且网上有很多这样的网页。当网页格式错误时,每个解析器都会给出不同的输出,html.parser 在我看来是最有用的(不会丢弃所有有用的信息,不会让你胡言乱语)。这又是一个偏好和用例的问题。

两个注意事项:据我所知,StackOverflow 似乎不喜欢推荐问题,因为它们是主观的并且会引起激烈的辩论,所以如果您的问题被标记,请不要感到惊讶。他们还可能提供改进您的问题的方法。 编辑:您也许可以将问题改写为:“我目前正在使用工具 x 并且输入大小为 y 需要 z 时间才能完成。有谁知道我可以如何加快速度?”希望这可以被接受。

第二点,您可能希望将标题中的 scraper 一词更改为 parser,以便让点击它的人更好地了解会发生什么。

祝你好运。

【讨论】:

  • @Nain 您可能可以将问题改写为:“我目前正在使用工具 x 并且输入大小为 y 需要 z 时间才能完成。有谁知道我可以如何加快速度起来了吗?”希望这可以被接受。
【解决方案2】:

我强烈推荐scrapy!

https://scrapy.org/

它是一个为速度而构建的 Python 库。我最近做了一个爬虫,可以从某个网站下载每个页面,并从中构建一个自定义数据库,以下是该过程的一些统计数据:

{'downloader/request_bytes': 13544866,
 'downloader/request_count': 36798,
 'downloader/request_method_count/GET': 36798,
 'downloader/response_bytes': 170688438,
 'downloader/response_count': 36798,
 'downloader/response_status_count/200': 36780,
 'downloader/response_status_count/301': 17,
 'downloader/response_status_count/302': 1,
 'dupefilter/filtered': 22358,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2019, 6, 12, 20, 11, 41, 103069),
 'item_scraped_count': 15160,
 'log_count/DEBUG': 51960,
 'log_count/ERROR': 64,
 'log_count/INFO': 29,
 'request_depth_max': 4,
 'response_received_count': 36780,
 'scheduler/dequeued': 36796,
 'scheduler/dequeued/memory': 36796,
 'scheduler/enqueued': 36796,
 'scheduler/enqueued/memory': 36796,
 'spider_exceptions/JSONDecodeError': 64,
 'start_time': datetime.datetime(2019, 6, 12, 19, 51, 27, 87242)} 

总的来说,它发出了 36,798 个请求并在我的输出中处理了 15,160 个页面。总共花了 20 分钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多