使用 Python 进行网页抓取:初学者指南
已发表: 2016-10-10在大数据世界中,Web Scraping 或数据提取服务是大数据分析的主要必要条件。 从网络上提取数据对于公司来说几乎是不可避免的。 出现的下一个问题是如何作为初学者进行网络抓取。

可以使用多种方法从 Web 源中提取或抓取数据。 Google、Facebook 或 Twitter 等热门网站提供 API 以结构化方式查看和提取可用数据。 这可以防止使用 API 提供者可能不喜欢的其他方法。 但是,当网站不容易提供信息时,就会出现对网站进行爬网的需求。 Python 是一种开源编程语言,由于其简单而丰富的生态系统,常被用于 Web Scraping。 它包含一个名为“BeautifulSoup”的库来执行此任务。 让我们更深入地了解使用 python 进行网络抓取。
设置 Python 环境:
要使用 Python 进行网页抓取,您首先必须安装 Python 环境,它使您能够运行用 Python 语言编写的代码。 图书馆执行数据抓取;
Beautiful Soup是一个使用方便的 python 库。 它是从网页中提取信息的最佳工具之一。 专业人员可以从网页中以表格、列表或段落的形式抓取信息。 Urllib2 是另一个可以与 BeautifulSoup 库结合使用以获取网页的库。 可以添加过滤器以从网页中提取特定信息。 Urllib2是一个可以获取 URL 的 Python 模块。
对于 MAC OSX:
要在 MAC OSX 上安装 Python 库,用户需要打开终端 win 并输入以下命令,一次输入一个命令:
sudoeasy_install pip
点安装 BeautifulSoup4
点安装 lxml
对于 Windows 7 和 8 用户:
Windows 7 & 8 用户需要确保首先安装 python 环境。 安装环境后,打开命令提示符并找到根 C:/ 目录的路径,然后键入以下命令:
easy_install BeautifulSoup4
easy_installlxml
安装库后,就该编写数据抓取代码了。
运行 Python:
必须为一个明确的目标进行数据抓取,例如抓取零售店的当前库存。 首先,需要一个网络浏览器来浏览包含这些数据的网站。 识别表格后,右键单击表格上的任意位置,然后从下拉菜单列表中选择检查元素。 这将导致在屏幕底部或侧面弹出一个窗口,显示网站的 Html 代码。 排名显示在表格中。 您可能需要扫描 HTML 数据,直到找到突出显示网页上表格的代码行。
除了 BeautifulSoup,Python 还为 HTML 抓取提供了一些其他替代方案。 他们包括:
- 刮擦
- 刮痕
- 机械化
Web 抓取将非结构化数据从 HTML 代码转换为结构化数据形式,例如 Excel 工作表中的表格数据。 网络抓取可以通过多种方式完成,从使用 Google Docs 到编程语言。 对于没有任何编程知识或技术能力的人,可以通过使用从您喜欢的网站提供现成可用数据的网络抓取服务来获取网络数据。
HTML 标签:
要执行网页抓取,用户必须对 HTML 标签有充分的了解。 知道 HTML 链接是使用锚标记定义的,即 <a> 标记,“<a href=“https://...”>链接需要在这里 </a>”,这可能会有很大帮助。 一个 HTML 列表包括 <ul>(无序)和 <ol>(有序)列表。 列表项以 <li> 开头。
HTML表格用<Table>定义,行为<tr>,列分为数据为<td>;
- <!DOCTYPE html> : HTML 文档以文档类型声明开头
- 无格式的纯文本 HTML 文档的主要部分由<body>和</body>标签定义
- HTML 中的标题是使用从<h1>到 <h5> 的标题标签定义的
- 段落是用 HTML 中的<p>标签定义的
- 整个 HTML 文档包含在<html>和</html>之间
在抓取中使用 BeautifulSoup:

使用 BeautifulSoup 抓取网页时,主要关注的是确定最终目标。 例如,如果您想从网页中提取列表,则需要逐步的方法:
- 第一步也是最重要的一步是导入所需的库:
#import 用于查询网站的库
导入 urllib2
#指定 url wiki = “https://”
#查询网站并将html返回给变量'page'
页面 = urllib2.urlopen(wiki)
#导入Beautiful soup函数来解析网站返回的数据
从 bs4 导入 BeautifulSoup
#解析'page'变量中的html,并以Beautiful Soup格式存储
汤= BeautifulSoup(页面)
- 使用“prettify”函数可视化 HTML 页面的嵌套结构
- 使用汤标签:
Soup<tag> 用于返回包括标签在内的开始和结束标签之间的内容。
- 在[30]:soup.title
Out[30]:<title>2010 年之前的印度总统名单 – 维基百科,免费的百科全书</title>
- soup.<tag>.string: 返回给定标签内的字符串
- 在 [38]:soup.title.string
- Out[38]:u '直到 2010 年印度和巴西的总统名单 - 维基百科,免费的百科全书'
- 查找页面的 <a> 标记内的所有链接:使用标记“<a>”标记链接。 所以,选择soup.a,它应该返回网页中可用的链接。 我们开始做吧。
- 在 [40] 中:soup.a
出[40]:<a id=”top”></a>
- 找到正确的表:
由于正在搜索一张用于提取有关 2010 年之前的印度和巴西总统信息的表格,因此首先确定正确的表格很重要。 这是一个抓取包含在所有表格标签中的信息的命令。
all_tables=soup.find_all('table')
通过使用需要过滤右表的表的属性“类”来识别右表。 此后,通过右键单击网页的所需表来检查类名,如下所示:
- 检查元素
- 复制类名或从最后一个命令的输出中找到正确表的类名。
right_table=soup.find('table', class_='wikitable sortable plainrowheaders')
右表
这就是我们如何识别正确的表。
- 将信息提取到DataFrame:需要遍历每一行(tr),然后将tr(td)的每个元素分配给一个变量,并将其添加到一个列表中。 下面我们来分析一下Table的HTML结构。 (提取表格标题 <th> 的信息)
要访问每个元素的值,需要对每个元素使用“find(text=True)”选项。 最后,dataframe中有数据。
还有其他各种使用“BeautifulSoup”抓取数据的方法,可以减少从网页收集数据的手动工作。 用 BeautifulSoup 编写的代码被认为比正则表达式更健壮。 我们讨论的网页抓取方法使用 Python 中的“BeautifulSoup”和“urllib2”库。 这是开始使用 Python 进行网络抓取的简短初学者指南。
请继续关注我们关于网络抓取如何影响您的收入增长的下一篇文章。
计划从网络获取数据以进行数据科学? 我们是来帮忙的。 让我们知道您的要求。
