旗下产业: A产业/ A实习/ A计划
全国统一咨询热线:010-5367 2995
首页 > 热门文章 > 大数据分析 > 数据分析如何使用python中Beautiful Soup进行WEB抓取
数据分析如何使用python中Beautiful Soup进行WEB抓取
时间:2020-09-07来源:www.aaa-cg.com.cn点击量:作者:Sissi
时间:2020-09-07点击量:作者:Sissi



  互联网是绝对大量的数据源。不幸的是,如果没有方便组织的CSV文件可供下载和分析,则绝大部分。如果要从许多网站捕获数据,则需要尝试进行网络抓取。
 

  如果您还是一个初学者,请不要担心-在数据分析如何使用python中Beautiful Soup进行WEB抓取中,我们将从头开始介绍如何使用Python从头开始进行Web抓取,首先回答一些有关Web抓取的常见问题。
 

  如果您已经熟悉了该概念,请随意滚动浏览这些内容,然后直接进入数据分析如何使用python中Beautiful Soup进行WEB抓取!
 

  什么是Python中的网页搜刮?
 

  一些网站提供的数据集可以CSV格式下载,也可以通过应用程序编程接口(API)访问。但是许多具有有用数据的网站却没有提供这些方便的选择。
 

  例如,考虑国家气象局的网站。它包含每个位置的最新天气预报,但是无法通过CSV或API访问该天气数据。
 

  如果我们想分析这些数据,或者下载它以便在其他应用程序中使用,我们将不会刻意复制粘贴所有内容。Web抓取是一项使我们能够使用编程来完成繁重工作的技术。我们将编写一些代码,这些代码将在NWS站点上查找,仅获取我们要使用的数据,然后以所需的格式输出。
 

  在数据分析如何使用python中Beautiful Soup进行WEB抓取中,我们将向您展示如何使用Python 3和Beautiful Soup库执行网络抓取。我们将从国家气象局抓取天气预报,然后使用pandas库进行分析。
 

  Web爬网如何工作?
 

  抓取网络时,我们编写代码将请求发送到托管我们指定页面的服务器。通常,我们的代码会像浏览器一样下载该页面的源代码。但是,它不是在视觉上显示页面,而是在页面中进行过滤以查找我们指定的HTML元素,并提取我们指示其提取的任何内容。
 

  例如,如果我们想从网站获取H2标签内的所有标题,则可以编写一些代码来实现。我们的代码将从其服务器请求网站的内容并下载。然后,它将通过页面的HTML查找H2标签。只要找到H2标签,它就会复制标签内的所有文本,并以我们指定的任何格式输出。
 

  需要注意的一件事:从服务器的角度来看,通过Web抓取请求页面与在Web浏览器中加载页面相同。当我们使用代码提交这些请求时,我们可能比普通用户更快地“加载”页面,从而很快耗尽了网站所有者的服务器资源。
 

  为什么要使用Python进行网页爬取?
 

  可以使用许多其他编程语言进行Web抓取。例如,我们也有使用R进行网络抓取的教程。
 

  但是,使用Python和Beautiful Soup库是最流行的Web抓取方法之一。这就意味着,一旦您掌握了Beautiful Soup的基础知识,那里就会有很多教程,操作视频和一些示例代码,可帮助您加深知识。
 

  我们将在数据分析如何使用python中Beautiful Soup进行WEB抓取结尾介绍其他一些Web抓取常见问题解答,但现在是时候开始研究我们的Web抓取项目!每个网络抓取项目都应从回答以下问题开始:
 

  网站搜刮合法吗?
 

  不幸的是,这里没有一个简单的答案。一些网站明确允许网页抓取。其他人明确禁止这样做。许多网站没有以一种方式或另一种方式提供任何明确的指导。
 

  在抓取任何网站之前,我们应该查看一个条款和条件页面,以查看是否有关于抓取的明确规则。如果有,我们应该跟随他们。如果没有,那么它就更像是一个判断。
 

  但是请记住,Web抓取会消耗主机网站的服务器资源。如果我们只刮一页,那不会造成问题。但是,如果我们的代码每十分钟刮一次1,000页,那么对于网站所有者而言,这可能很快就会变得昂贵。
 

  因此,除了遵循网站上发布的所有和所有有关网络抓取的明确规则之外,遵循以下最佳做法也是一个好主意:
 

  1)永远不要比您需要的刮擦次数更多

  2)考虑缓存您抓取的内容,以便在处理用于过滤和分析它的代码时仅下载一次,而不是每次运行代码时都重新下载

  3)考虑使用功能time.sleep()来在代码中构建暂停,例如在太短的时间内避免过多的请求使不堪重负的服务器瘫痪。
 

  在数据分析如何使用python中Beautiful Soup进行WEB抓取的案例中,NWS的数据是公共领域的,其术语不禁止Web抓取,因此我们可以继续进行。
 

  网页的组成部分
 

  当我们访问网页时,我们的网络浏览器会向网络服务器发出请求。此请求称为GET请求,因为我们正在从服务器获取文件。然后,服务器发回文件,这些文件告诉我们的浏览器如何为我们呈现页面。文件分为几种主要类型:
 

  1)HTML —包含页面的主要内容。

  2)CSS —添加样式以使页面看起来更好。

  3)JS — Javascript文件为网页增加了交互性。

  4)图片-JPG和PNG等图片格式允许网页显示图片。
 

  浏览器收到所有文件后,它将呈现页面并将其显示给我们。要使页面漂亮地呈现,在幕后发生了很多事情,但是当我们进行网页抓取时,我们不需要担心其中的大多数问题。进行网页抓取时,我们会对网页的主要内容感兴趣,因此我们看一下HTML。
 

  HTML
 

  超文本标记语言(HyperText Markup Language,HTML)是用于创建网页的一种语言。HTML不是像Python这样的编程语言,而是一种标记语言,它告诉浏览器如何布局内容。HTML使您可以执行与Microsoft Word等字处理器中类似的操作-使文本加粗,创建段落等。因为HTML不是一种编程语言,所以它几乎不像Python那样复杂。
 

  让我们快速浏览一下HTML,以便我们了解足够有效地进行抓取。HTML由称为标签的元素组成。最基本的标签是标签。此标记告诉Web浏览器,其中的所有内容都是HTML。我们可以使用以下标记来制作一个简单的HTML文档:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们尚未在页面上添加任何内容,因此,如果我们在Web浏览器中查看HTML文档,则不会看到任何内容:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  在html标签内,我们放置了另外两个标签,head标签和body标签。网页的主要内容进入body标记。该head标签包含有关网页标题,以及其它信息一般不会在网页抓取有用的数据:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们仍然没有在页面中添加任何内容(位于body标记内),因此我们再也看不到任何内容:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  您可能在上面已经注意到,我们将head和body标记放在了html标记内。在HTML中,标签是嵌套的,可以放在其他标签内。
 

  现在,我们将以p标签的形式将我们的第一个内容添加到页面。所述p标记定义一个段,并在标签内的任何文本显示为一个单独的段落:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  外观如下:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  标签的常用名称取决于它们相对于其他标签的位置:
 

  1)child—孩子是另一个标签内的标签。因此,p上面的两个标签都是该body标签的子级。

  2)parent—父标签是另一个标签在其中的标签。在上方,html标签是标签的父级body。

  3)sibiling—同胞是与另一个标签嵌套在同一父对象中的标签。例如,head和body是兄弟姐妹,因为它们都在内部html。这两个p标签都是同级标签,因为它们都在内部body。
 

  我们还可以向HTML标记添加属性以更改其行为:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  外观如下:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  在上面的示例中,我们添加了两个a标签。a标签是链接,并告诉浏览器呈现到另一个网页的链接。href标签的属性确定链接的位置。
 

  a并且p是极为常见的html标签。以下是一些其他内容:
 

  1)div —表示页面的划分或区域。

  2)b -加粗其中的任何文本。

  3)i —斜体显示里面的任何文本。

  4)table —创建一个表格。

  5)form -创建输入表单。
 

  有关标签的完整列表,请参见此处。
 

  在进行实际的Web抓取之前,让我们了解class和id属性。这些特殊属性赋予HTML元素名称,并使它们在我们抓取时更易于与之交互。一个元素可以具有多个类,并且一个类可以在元素之间共享。每个元素只能有一个ID,并且一个ID在页面上只能使用一次。类和ID是可选的,并非所有元素都具有它们。
 

  我们可以在示例中添加类和ID:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  外观如下:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  请求库
 

  我们要抓取网页的第一件事就是下载网页。我们可以使用Python 请求库下载页面。请求库将向GET网络服务器发出请求,该服务器将为我们下载给定网页的HTML内容。我们可以使用几种不同类型的请求requests,其中GET只有一种。如果您想了解更多信息,请查看我们的API教程。
 

  让我们尝试下载一个简单的示例网站https://www.aaa-cg.com.cn/data/2642.html。我们需要先使用request.get方法下载它。

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  运行请求后,我们得到一个Response对象。该对象具有一个status_code属性,该属性指示页面是否已成功下载:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  A status_codeof 200表示页面下载成功。这里我们不会完全探讨状态代码,但是以“ a”开头的状态代码2通常表示成功,而以“ a” 4或“ a” 开头的代码5表示错误。
 

  我们可以使用content属性输出页面的HTML内容:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  使用BeautifulSoup解析页面
 

  如您在上面看到的,我们现在已经下载了一个HTML文档。
 

  我们可以使用BeautifulSoup库来解析此文档,并从p标记中提取文本。我们首先必须导入库,并创建BeautifulSoup该类的实例来解析我们的文档:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在,我们可以使用对象prettify上的方法,打印出格式良好的页面HTML内容BeautifulSoup:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  由于所有标签都是嵌套的,因此我们可以一次在整个结构中移动一层。我们可以首先使用children属性来选择页面顶层的所有元素soup。请注意,它children返回一个列表生成器,因此我们需要list在其上调用该函数:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  上面告诉我们,在页面的顶层有两个标签-初始标签和标签。n列表中也有换行符()。让我们看看列表中每个元素的类型是:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  如您所见,所有项目都是BeautifulSoup对象。第一个是Doctype对象,其中包含有关文档类型的信息。第二个是NavigableString,表示在HTML文档中找到的文本。最后一项是一个Tag对象,其中包含其他嵌套标签。对象,也是我们最常处理的最重要的对象类型Tag。
 

  该Tag对象使我们可以浏览HTML文档,并提取其他标签和文本。您可以在此处了解有关各种BeautifulSoup对象的更多信息。
 

  现在,我们可以通过选择html列表中的第三项来选择标签及其子元素:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  该children属性返回的列表中的每个项目也是一个BeautifulSoup对象,因此我们也可以在children上调用方法html。
 

  现在,我们可以在html标记内找到子代:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  如您在上方看到的,这里有两个标签head,和body。我们想要提取p标签内的文本,因此我们将深入研究正文:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在,我们可以p通过找到body标签的子标签来获得标签:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在我们可以隔离p标签:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  隔离标签后,我们可以使用get_text方法提取标签内的所有文本:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  一次查找标签的所有实例
 

  上面我们做的事情对于弄清楚如何导航页面很有用,但是花了很多命令才能完成相当简单的事情。如果要提取单个标签,则可以改用find_all方法,该方法将在页面上找到标签的所有实例。

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  请注意,这会find_all返回一个列表,因此我们必须遍历或使用列表索引来提取文本:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  如果只想查找标签的第一个实例,则可以使用find方法,该方法将返回一个BeautifulSoup对象:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  按类别和ID搜索标签
 

  我们之前介绍了类和id,但是可能不清楚它们为什么有用。CSS使用类和ID来确定将某些样式应用于哪些HTML元素。在抓取时,我们也可以使用它们来指定要抓取的特定元素。为了说明这一原理,我们将使用以下页面:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们可以通过URL访问上述文档https://www.aaa-cg.com.cn/data/2642.html。首先下载页面并创建一个BeautifulSoup对象:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在,我们可以使用该find_all方法按类或ID搜索项目。在以下示例中,我们将搜索p具有class的所有标签outer-text:
 

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  在下面的示例中,我们将查找具有class的所有标签outer-text:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们还可以通过id搜索元素:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  使用CSS选择器
 

  您也可以使用CSS选择器搜索项目。这些选择器是CSS语言允许开发人员指定样式的HTML标签的方式。这里有些例子:
 

  1)p a—查找a标签内的所有标签p。

  2)body p a-找到所有a一个内部标签p上标签内body的标签。

  3)html body—查找body标签内的所有标签html。

  4)p.outer-text—查找所有p带有类别的标签outer-text。

  5)p#first—查找pID为的所有标签first。

  6)body p.outer-text—查找p标签outer-text内部具有类的所有body标签。
 

  您可以在此处了解有关CSS选择器的更多信息。
 

  BeautifulSoup对象支持使用select方法通过CSS选择器搜索页面。我们可以使用CSS选择器p在页面中找到所有位于这样的标签div:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  请注意,上述select方法会返回BeautifulSoup对象列表,就像find和一样find_all。
 

  下载天气数据
 

  现在,我们已经足够了解,可以从国家气象局的网站上提取有关当地天气的信息。第一步是找到我们要抓取的页面。我们将从此页面提取有关天气信息。

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们将提取有关扩展预测的数据。
 

  从图像中可以看到,该页面包含有关下周扩展预报的信息,包括一天中的时间,温度和条件的简要说明。
 

  使用Chrome DevTools探索页面结构
 

  我们需要做的第一件事是使用Chrome Devtools检查页面。如果您使用的是其他浏览器,则Firefox和Safari具有等效功能。建议还是使用Chrome。
 

  您可以通过单击启动Chrome中的开发人员工具View -> Developer -> Developer Tools。您应该最终在浏览器底部看到一个面板,如下所示。确保Elements面板突出显示:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  Chrome开发者工具。
 

  元素面板将在页面上显示所有HTML标记,并让您浏览它们。这是一个非常方便的功能!
 

  右键单击“扩展的预测”附近的页面,然后单击“检查”,我们将在元素面板中打开包含文本“扩展的预测”的标签:
 

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  扩展的预测文本。
 

  然后,我们可以在“元素”面板中向上滚动以找到“最外面的”元素,其中包含与扩展的预测相对应的所有文本。在这种情况下,它是一个divID 为的标签seven-day-forecast:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  包含扩展预测项目的div。
 

  如果您在控制台上单击鼠标并浏览div,您将发现div该类中包含了每个预测项(例如“ Tonight”,“ Thursday”和“ Thursday Night”)tombstone-container。
 

  现在我们知道足够的信息来下载页面并开始对其进行解析。在下面的代码中,我们:
 

  1)下载包含预测的网页。

  2)创建一个BeautifulSoup类来分析页面。

  3)找到divID为的seven-day-forecast,并分配给seven_day

  4)在中seven_day,找到每个单独的预测项目。

  5)提取并打印第一个预测项目。

数据分析如何使用python中Beautiful Soup进行WEB抓取
数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  从页面中提取信息
 

  如您所见,预测项内tonight是我们想要的所有信息。还有4,我们可以提取信息:
 

  1)预测项目的名称-在这种情况下为Tonight。

  2)条件的说明-存储在的title属性中img。

  3)条件的简短说明-在这种情况下为Mostly Clear。

  4)温度低-在这种情况下,49度。
 

  我们将首先提取预测项的名称,简短描述和温度,因为它们都相似:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在,我们可以title从img标记中提取属性。为此,我们只将BeautifulSoup对象视为字典,然后将想要的属性作为键传递:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  从页面中提取所有信息
 

  现在,我们知道如何提取每条信息,可以将我们的知识与CSS选择器和列表推导相结合,以一次提取所有信息。
 

  在下面的代码中,我们:
 

  1)选择与类的所有项目period-name与类物品内部tombstone-container在seven_day。

  2)使用列表推导get_text对每个BeautifulSoup对象调用该方法。

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  如您在上面看到的,我们的技术按顺序为我们获取了每个期间名称。我们可以应用相同的技术来获取其他3字段:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  将我们的数据合并到Pandas Dataframe中
 

  现在,我们可以将数据合并到Pandas DataFrame中并进行分析。DataFrame是可以存储表格数据的对象,从而使数据分析变得容易。如果您想了解有关pandas的更多信息,请在此处免费试用我们的课程。
 

  为了做到这一点,我们将调用DataFrame类,并传入我们拥有的每个项目列表。我们将它们作为字典的一部分传递。每个字典键将成为DataFrame中的一列,每个列表将成为该列中的值:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  现在,我们可以对数据进行一些分析。例如,我们可以使用正则表达式和Series.str.extract方法提取数字温度值:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  然后,我们可以找到所有高温和低温的平均值:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  我们也只能选择夜间发生的行:

数据分析如何使用python中Beautiful Soup进行WEB抓取
 

  此Web爬网项目的后续步骤
 

  您现在应该对如何抓取网页和提取数据有了很好的了解。下一步不错的选择是选择一个网站,然后尝试自己进行一些网络抓取。一些要抓取的数据的好例子是:
 

  1)新闻文章

  2)体育比分

  3)天气预报

  4)股票价格

  5)网上零售商价格
 

  您可能还想继续抓取国家气象局,并查看可以从页面或您自己的城市中提取的其他数据。
 

  还有问题吗?让我们看一下其他一些Web抓取常见问题解答:
 

  为什么要进行网络爬网?何时需要?
 

  如果没有组织格式的数据可用,则需要进行网络抓取以解锁更强大的分析。
 

  这对于各种个人项目可能很有用。例如,您可能想要抓取体育网站来分析与您最喜欢的球队相关的统计信息。
 

  但是,在业务环境中,Web抓取对于数据分析师和数据科学家也很重要。除非您将其抓取(或不费力气地手工将其复制到电子表格中进行分析),否则网络上的大量数据根本无法获得。当这些数据可能包含对您的公司或您的行业有价值的见解时,您将不得不转向网络抓取。
 

  我可以用网页爬虫做什么?
 

  使用网络抓取时,最大的限制可能是您可以做什么,而不是可以做什么。有了正确的代码,几乎所有公共网站上的数据都可以通过网络抓取进行下载,过滤和格式化。
 

  但是,是否允许甚至合法是另一回事。
 

  正如我们在数据分析如何使用python中Beautiful Soup进行WEB抓取开头所提到的,在尝试抓取网站之前,确定网站的网站抓取政策非常重要。如果允许抓取,则应确保遵循数据分析如何使用python中Beautiful Soup进行WEB抓取前面概述的最佳做法,以确保您不会对相关网站造成过大的负担。
 

  用于Web搜寻的Python库
 

  1)请求 -这个关键库实际上是将数据从Web服务器获取到您的计算机所必需的,并且它还包含其他一些很酷的功能,例如缓存。

  2)Beautiful Soup 4-这是我们在这里使用的库,它旨在使基于HTML标签的数据过滤变得简单。

  3)lmxl —快速的HTML和XML解析器(现在也与Beautiful Soup集成!)

  4)Selenium —一种Web驱动程序工具,当您需要从请求库无法访问的网站获取数据时非常有用,因为它被隐藏在诸如登录表单或强制单击鼠标之类的内容之后。

  5)Scrapy-一个完整的Web抓取框架,对于一次性数据分析项目来说可能会过时,但是当生产项目,管道等需要抓取时,它非常适合。
 

  如果您想了解有关此处涵盖的任何主题的更多信息,请查看我们免费提供的交互式课程:Python中的Web Scraping

 



 

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!

©2007-2021/北京漫动者教育科技有限公司版权所有
备案号:京ICP备12034770号

老师想和你聊一聊

©2007-2021/ www.aaa-cg.com.cn 北京漫动者教育科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc

京公网安备 11010802035704号