chrome网页视频抓取(有关使用BeautifulSoup和Selenium进行网页爬取的相关资料关注)
优采云 发布时间: 2021-11-09 01:22chrome网页视频抓取(有关使用BeautifulSoup和Selenium进行网页爬取的相关资料关注)
摘要 今天小编就为大家讲解使用BeautifulSoup和Selenium进行网络爬虫。我相信你应该关注这个话题。小编还采集了一些
今天给大家讲解一下使用BeautifulSoup和Selenium进行网络爬虫。我相信你应该关注这个话题。我还采集了有关使用 BeautifulSoup 和 Selenium 进行网络爬虫的相关信息。合作伙伴看起来很有帮助。
出自:开源中国翻译频道英文原文概览
HTML 几乎是直截了当的。CSS 是一个很大的改进。它清楚地区分了页面的结构和外观。JavaScript 增添了一些魅力。理论上,情况确实如此。现实世界仍然有些不同。
在本教程中,您将了解您在浏览器中看到的内容是如何实际呈现的,以及如何在必要时抓取它。特别是,您将学习如何计算 Disqus 评论。我们的工具是 Python 和这种语言的优秀包,例如 request、BeautifulSoup 和 Selenium。
什么时候应该使用网络爬虫?
网络爬虫是一种自动获取网页内容的实践,旨在使人类用户能够相互交互、解析它们并提取一些信息(可能是指向其他页面的链接)。如果没有其他方法可以提取必要的网页信息,网络爬虫是一种必要且有效的技术方法。理想情况下,应用程序依靠提供良好的专用 API 以编程方式自动获取网页数据。但在以下情况下,最好不要使用网页抓取技术:
正在爬取的网页是脆弱的(您正在爬取的网页可能会经常更改)。
禁止爬行(某些 Web 应用程序具有禁止爬行的策略)。
爬取速度可能很慢,爬取的内容过于复杂(如果你需要在大量无用信息中寻找和涉猎你想要的东西)。
了解真实的网页
让我们通过查看一些常见的 Web 应用程序代码的实现来了解我们面临的问题。比如在《Vagrant 技术介绍》(链接:)页面底部有一些 Disqus 评论。为了抓取这些评论,我们需要先在页面上找到它们。
查看页面代码
从 1990 年*敏*感*词*始,每个浏览器都支持查看当前页面的 html 代码。以下是源代码视图中查看的“Vagrant 技术简介”帖子对应的源代码片段。本源代码以大量压缩丑陋的 JavaScript 代码开头,与本文内容无关。这是“小”部分之一:
这是页面中的一些实际 html 代码:
代码看起来很乱。在页面的源代码中找不到Disqus的评论,这让你有点意外。
强大的内联框架
原创页面是一个“混搭”,Disqus 评论嵌入在 iframe(内联框架)元素中。可以在评论区右击找到,在那里可以看到框架信息和源码。这是有道理的。将第三方内容嵌入到 iframe 中是使用 iframe 的主要应用场景之一。让我们在主页源代码中找到 iframe 标签。就是这样!主页源中没有 iframe 标记。
JavaScript 生成的标签
之所以省略,是因为查看页面源显示的是从服务器获取的内容。但是最终浏览器渲染出来的DOM(文档对象模型)可能会有很大的不同。JavaScript 开始工作并且可以随意操作 DOM。无法找到 iframe,因为从服务器检索页面时它不存在。
静态抓取与动态抓取
静态抓取会忽略 JavaScript,它可以直接从服务器获取网页代码,不依赖浏览器。这就是你通过“查看源代码”看到的,然后就可以提取信息了。如果要查找源代码中已经存在的内容,则无需进一步操作。但是,如果您要查找的内容像上面的 Disqus 评论一样嵌入在 iframe 中,则必须使用动态抓取来获取内容。
动态爬取使用真实浏览器(或非接口浏览器),首先让页面中的JavaScript运行,完成动态内容的处理和加载。之后,它会查询 DOM 以获取它要查找的内容。有时,您还需要让浏览器自动模拟人工操作来获取您需要的内容。
使用 Requests 和 BeautifulSoup 进行静态抓取
下面我们来看看如何使用两个经典的 Python 包进行静态爬取:requests 用于爬取网页内容。BeautifulSoup 用于解析 html。
安装 Requests 和 BeautifulSoup
先安装pipenv,然后运行命令:pipenv install requests beautifulsoup4
它首先为你创建一个虚拟环境,然后在虚拟环境中安装这两个包。如果你的代码在 gitlab 上,你可以使用命令 pipenv install 来安装它。
获取网页内容
只需要一行代码就可以抓取带有请求的网页内容:
r = requests.get(url)。
该代码返回一个响应对象,其中收录许多有用的属性。最重要的属性是 ok 和 content。如果请求失败, r.ok 为 False 并且 r.content 收录错误消息。content 代表一个字节流,作为 text 处理时最好解码成utf-8.
>>> r = requests.get('')>>> r.okFalse>>> 打印(r.content.decode('utf-8'))未找到
在此服务器上找不到请求的 URL /ggg。
端口 80 的 Apache/2.0.52 (CentOS) 服务器
如果代码正常返回并且没有报错,那么r.content会收录所请求网页的源代码(也就是你在“查看源代码”中看到的)。
使用 BeautifulSoup 查找元素
下面的 get_page() 函数会获取给定 URL 的网页源代码,然后将其解码为 utf-8,最后将内容传递给 BeautifulSoup 对象并返回。BeautifulSoup 使用 html 解析器进行解析。
def get_page(url): r = requests.get(url) content = r.content.decode('utf-8') return BeautifulSoup(content,'html.parser')
拿到 BeautifulSoup 对象后,我们就可以开始解析需要的信息了。
BeautifulSoup 提供了多种搜索方法来定位网页中的元素,并且可以深入挖掘嵌套元素。
Tuts+ 网站 里面有很多培训教程,这里()是我的主页。每个页面最多收录 12 个教程。如果您已经获得了12个教程,您可以转到下一页。一篇文章 文章 被标签包围。下面的功能是找到页面中所有的文章元素,然后找到对应的链接,最后提取教程的网址。
page = get_page('')articles = get_page_articles(page)prefix =''for a in article: print(a[len(prefix):]) 输出:building-games-with-python-3-and-pygame-part -5--cms-30085building-games-with-python-3-and-pygame-part-4--cms-30084building-games-with-python-3-and-pygame-part -3--cms-30083building-games-with-python-3-and-pygame-part-2--cms-30082building-games-with-python-3-and-pygame-part -1--cms-30081mastering-the-react-lifecycle-methods--cms-29849testing-data-integrated-code-with-go-part-5--cms- 29852testing-data-密集型代码与go-part-4--cms-29851testing-data-密集型代码与go-part-3--cms-29850testing-data-密集型代码与go-part-2--cms-29848testing-data-密集型代码与go-part-1--cms-29847 make-your-go-programs-lightning-fast-with-profiling--cms-29809 使用Selenium动态爬取
静态爬取非常适合一系列的文章,但是正如我们之前看到的,Disqus 的评论是由 JavaScript 写在 iframe 中的。为了获得这些注释,我们需要让浏览器自动与 DOM 交互。做这种事情的最好的工具之一是 Selenium。
Selenium 主要用于 Web 应用程序自动化测试,但它也是一个很好的通用浏览器自动化工具。
安装硒
使用以下命令安装 Selenium:
pipenv install selenium 选择您的网络驱动程序
Selenium 需要一个 Web 驱动程序(用于自动化的浏览器)。对于网络爬虫,您通常不需要关心您选择的驱动程序。我建议使用 Chrome 驱动程序。Selenium手册中有相关介绍。
比较 Chrome 和 Phantomjs
在某些情况下,您可能想要使用无头浏览器。理论上,Phantomjs 正是那个 Web 驱动程序。但实际上,有人报告了一些只有在 Phantomjs 中才会出现的问题。Selenium 使用 Chrome 或 Firefox 时不会出现这些问题。我喜欢从等式中删除这个变量以使用实际的 Web 浏览器驱动程序。