Python 需要 Web 抓取解决方案建议

Python Webscraping Solution Reccomendations required

我想知道什么是 best/preferred PYTHON 3.x 解决方案(执行速度快、易于实施、指定用户代理的选项、将浏览器和版本等发送到网络服务器,以避免我的 IP 被列入黑名单),它可以抓取以下所有选项的数据(根据我的理解,根据复杂性提及)。

  1. 表格中包含数据的任何静态网页/Div
  2. 一次加载完成的动态网页
  3. 需要用户名密码登录的动态网页,登录后一次性加载完成。 用户名密码示例 URL:https://dashboard.janrain.com/signin?dest=http://janrain.com
  4. 动态网页,需要使用来自 LinkedIn、google 等流行服务的 oauth 登录,并在我们登录后一次性完成加载。我知道这涉及一些页面重定向、令牌处理等。 基于 oauth 的登录示例 URL:https://dashboard.janrain.com/signin?dest=http://janrain.com
  5. 上面的所有要点 4 结合选择一些下拉菜单的选项(比如说 "sort by date")或者可以涉及选择一些复选框,显示的动态数据将根据这些复选框进行更改。 我需要在执行 check-boxes/drop-downs 操作后抓取数据,因为任何用户都会这样做来更改动态数据的显示 示例 URL - https://careers.microsoft.com/us/en/search-results?rk=l-seattlearea 您可以选择下拉菜单以及页面中的一些复选框
  6. 具有 Ajax 加载的动态网页,其中数据可以持续加载 => 6.1 我们像 facebook、twitter 或 linkedin 主页一样不断向下滚动以获取数据 示例 URL - facebook、twitter、linked 等 => 6.2 或者我们一直点击ajax容器末尾的一些button/div来获取下一组数据; 示例 URL - https://www.linkedin.com/pulse/cost-climate-change-indian-railways-punctuality-more-editors-india-/ 在这里你必须点击页面底部的"Show Previous Comments"如果你需要查看和抓取所有评论

我想学习并构建一个精疲力尽的抓取解决方案,可以根据需要对其进行调整,以适应从要点 1 的简单任务到上面要点 6 的复杂任务的所有选项。

  1. 对于问题 1 和 2,我建议使用 BeautifulSoup。
  2. 对于 3 和 5,您可以使用 Selenium WebDriver(作为 python 库提供)。 使用 Selenium,您可以执行所有可能的操作(例如登录、更改下拉值、导航等),然后您可以通过 driver.page_source 访问 Web 内容(您可能需要使用睡眠功能等到内容已满)
  3. 对于 6,您可以使用他们自己的 API 来获取新闻提要列表和他们的 links(大多数返回的对象带有特定新闻提要的 link),获得 link 后,您可以使用 BeautifulSoup 获取网页内容。

注意:请在抓取之前阅读每个网站的条款和条件,因为其中一些提到自动数据收集是不道德的行为,我们作为专业人士不应这样做。

如果您正在寻找真正可扩展的防弹解决方案,

Scrapy 适合您。事实上,scrapy 框架是 python 抓取任务的行业标准。

顺便说一下:我建议您避免使用 JS 呈现:所有这些东西(chromedriver、selenium、phantomjs)都是抓取网站的最后选择。 大多数 ajax 数据您可以通过伪造所需的请求来简单地解析。 多花点时间在 Chrome 的 "network" 选项卡上。