python - 如何使用 Python 快速抓取多个 HTML 文档?

标签 python html parsing web-scraping scrapy

我有一个大约 100 个 HTML 网页的列表(都有不同的结构,例如 div、 anchor 、类等),我试图抓取每个页面的标题(标题在某个 div 下,类(class))。为此,我使用了 get requests 和 Beautifulsoup,但是,这需要很长时间(每次我想这样做需要 10 分钟)!

我使用了一个计时器来查看什么花费的时间最多:它是 get 请求。显然 Python (3.7) 一个接一个地执行代码,并且由于每个 get 请求大约需要 5-6 秒,因此完成大约 100 个请求大约需要 500-600 秒。

我一直在寻找使这些请求更快地工作的方法,并遇到了许多不同的解决方案。然而,一个共同的主题似乎是使我的请求异步(因此所有请求同时开始)将解决问题(通过使其更快)。

我在网上阅读了很多可能的解决方案,包括:多线程、使用 grequest、使用 Scrapy、解析 lxml 等。但是,我是编程新手,不够熟练,无法学习和试验每种方法(事实上​​ ,我尝试按照类似问题的答案进行操作,但没有成功),所以我不确定我要采取的最佳路线是什么。

我不需要任何花哨的东西;我想要做的就是从 HTML 文档中提取标题作为文本,然后将它们打印出来。我不需要下载任何 CSS 文件、图像、媒体等。另外,我希望代码尽可能简单。我怎样才能在 Python 中尽可能快地做到这一点?如果有人可以建议最佳路径(即使用 Scrapy),并简要说明我必须使用该工具做什么才能获得我希望的结果,我将不胜感激。您不必为我写出整个代码。谢谢!

最佳答案

This answer似乎为您提供了可直接剪切和粘贴的答案。 (如果您的 HTML 请求大约需要 5 秒,您也可能会增加线程池的大小。)对于您的确切问题,代码:

def crawlToCSV(URLrecord):
    OpenSomeSiteURL = urllib2.urlopen(URLrecord)
    Soup_SomeSite = BeautifulSoup(OpenSomeSiteURL, "lxml")
    OpenSomeSiteURL.close()

    return Soup_SomeSite.title.string

将在 results 中创建一个标题列表。

关于python - 如何使用 Python 快速抓取多个 HTML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56928294/

相关文章:

python pandas 将多维数据组织成一个对象

python - 使用 mongoengine 查询 ListField 时遇到问题

javascript - $(this).attr({类 : "activeTab"}); is not working because this is undefined

C++ 将输入分离到各种变量中

python - 如何使用 BeautifulSoup 仅从具有特定开始的标签中获取字符串?

python - 不同变量的数据分配

javascript - 从 Soundcloud 嵌入的动态音频 <iframe>

javascript - 在第二次点击 li 元素时隐藏一个 Div

java - Jsoup:提取内部标签

python - BS4 : Getting text in tag