【问题标题】:Python Webscraping Solution Reccomendations required需要 Python Web Scraping 解决方案建议
【发布时间】:2018-12-11 15:54:07
【问题描述】:

我想知道什么是最好/首选的 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 与选择某些下拉列表的选项相结合(比如“按日期排序”)或可能涉及选择某些复选框,显示的动态数据会根据这些复选框发生变化。 在执行复选框/下拉菜单的操作后,我需要抓取数据,因为任何用户都会这样做以更改动态数据的显示 示例网址 - https://careers.microsoft.com/us/en/search-results?rk=l-seattlearea 您可以选择下拉菜单以及页面中的某些复选框
  6. 具有 Ajax 加载的动态网页,其中数据可以保持加载为 => 6.1 我们像 facebook、twitter 或linkedin 主页一样继续向下滚动以获取数据 示例 URL - facebook、twitter、链接等 => 6.2 或者我们继续单击 ajax 容器末尾的一些按钮/div 以获取下一组数据; 示例网址 - https://www.linkedin.com/pulse/cost-climate-change-indian-railways-punctuality-more-editors-india-/ 在这里,如果您需要查看和抓取所有 cmets,则必须单击页面底部的“显示以前的评论”

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

【问题讨论】:

  • 您的问题过于宽泛。没有人会帮助您重塑 Google 或 Bing。此外,处理需要身份验证但不使用传统 HTTP 身份验证机制的 URL 需要为站点定制代码。付给我 50 万美元,我会写代码。

标签: python web-scraping beautifulsoup scrapy urllib2


【解决方案1】:
  1. 我建议您使用 BeautifulSoup 来解决您的问题 1 和 2。
  2. 对于 3 和 5,您可以使用 Selenium WebDriver(作为 python 库提供)。 使用 Selenium,您可以执行所有可能的操作(例如登录、更改下拉值、导航等),然后您可以通过 driver.page_source 访问 Web 内容(您可能需要使用 sleep 功能等到内容已满载)
  3. 对于 6,您可以使用他们自己的 API 来获取新闻提要列表及其链接(大多数返回的对象都带有指向特定新闻提要的链接),一旦您获得链接,您就可以使用 BeautifulSoup 来获取 Web 内容。

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

【讨论】:

  • 感谢 Kiruparan 的建议。我同意网站条款和条件。我的主要动机是了解满足所有合规性要求的网络抓取。关于 6 的建议,虽然我知道所有这些网站(FB、LI twitter 等)都允许通过 API 提取数据,但我想知道是否有人要在没有 API 的情况下对第 6 点进行抓取,他们将如何去做?不幸的是,除了可以展示任务的社交媒体网站之外,我没有任何其他示例网站
  • 是的,您可以不使用 API 步骤,如下所示 1) 您需要使用 selenium 驱动程序滚动页面,如下所示 driver.execute_script("window.scrollTo(0, Y)") 2) 让您的进程休眠一段时间 3) 然后再次使用 driver.execute_script("return document.body.scrollHeight") 获取当前高度 4) 继续此操作直到高度保持不变。
【解决方案2】:

Scrapy 适合您,如果您正在寻找真正可扩展的防弹解决方案。实际上scrapy框架是python爬取任务的行业标准。

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

【讨论】:

  • 因此,如果我的建议正确,您是否建议我的问题中的所有第 1 点到第 6 点都可以通过 scrapy 处理并观察来自 Chrome 网络选项卡的请求?
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多