前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >初学指南| 用Python进行网页抓取

初学指南| 用Python进行网页抓取

作者头像
大数据文摘
发布于 2018-05-21 09:14:29
发布于 2018-05-21 09:14:29
3.3K0
举报
文章被收录于专栏:大数据文摘大数据文摘

编译|丁雪 黄念 程序注释|席雄芬 校对|姚佳灵

引言

从网页中提取信息的需求日益剧增,其重要性也越来越明显。每隔几周,我自己就想要到网页上提取一些信息。比如上周我们考虑建立一个有关各种数据科学在线课程的欢迎程度和意见的索引。我们不仅需要找出新的课程,还要抓取对课程的评论,对它们进行总结后建立一些衡量指标。这是一个问题或产品,其功效更多地取决于网页抓取和信息提取(数据集)的技术,而非以往我们使用的数据汇总技术。

网页信息提取的方式

从网页中提取信息有一些方法。使用API可能被认为是从网站提取信息的最佳方法。几乎所有的大型网站,像Twitter、Facebook、Google、Twitter、StackOverflow都提供API以更为结构化的方式访问该网站的数据。如果可以直接通过API得到所需要的信息,那么这个方法几乎总是优于网页抓取方法。因为如果可以从数据提供方得到结构化的数据,为什么还要自己建立一个引擎来提取同样的数据?

不幸的是,并不是所有的网站都提供API。一些网站是不愿意让读者通过结构化的方式抓取大量的信息,另一些网站是因为缺乏相关的技术知识而不能提供API。在这样的情况下,该怎么做?好吧,我们需要通过网页抓取来获得数据。

当然还有一些像RSS订阅等的其它方式,但是由于使用上的限制,因此我将不在这里讨论它们。

什么是网页抓取?

网页抓取是一种从网站中获取信息的计算机软件技术。这种技术主要聚焦于把网络中的非结构化数据(HTML 格式)转变成结构化数据(数据库或电子表格)。

可以用不同的方式实施网页抓取,包括从Google Docs到几乎所有的编程语言。由于Python的易用性和丰富的生态系统,我会选择使用Python。Python中的BeautifulSoup库可以协助完成这一任务。在本文中,我将会利用Python编程语言给你看学习网页抓取最简单的方式。

对于需要借助非编程方式提取网页数据的读者,可以去import.io上看看。那上面有基于图形用户界面的驱动来运行网页抓取的基础操作,计算机迷们可以继续看本文!

网页抓取所需要的库

我们都知道Python是一门开源编程语言。你也许能找到很多库来实施一个功能。因此,找出最好的库是非常必要的。我倾向于使用BeautifulSoup (Python库),因为它的使用简单直观。准确地说,我会用到两个Python模块来抓取数据:

• Urllib2:它是一个Python模块,用来获取URL。它定义函数和类,实现URL操作(基本、摘要式身份验证、重定向、cookies等)欲了解更多详情,请参阅文档页面。

• BeautifulSoup:它是一个神奇的工具,用来从网页中提取信息。可以用它从网页中提取表格、列表、段落,也可以加上过滤器。在本文中,我们将会用最新版本,BeautifulSoup 4。可以在它的文档页面查看安装指南。

BeautifulSoup不帮我们获取网页,这是我将urllib2和BeautifulSoup 库一起使用的原因。除了BeautifulSoup之外,Python还有其它一些方法用于HTML的抓取。如:

• mechanize

• scrapemark

• scrapy

基础-熟悉HTML(标签)

在进行网页抓取时,我们需要处理html标签。因此,我们必须先好好理解一下标签。如果已经了解HTML的基础知识,可以跳过这一节。以下是HTML的基本语法:

该语法的各种标签的解释如下:

1. <!DOCTYPE html>:html文档必须以类型声明开始

2. html文档写在<html> 和</html>标签之间

3. html文档的可见部分写在<body> 和</body>标签之间

4. html头使用<h1> 到<h6> 标签定义

5. html段落使用<p>标签定义

其它有用的HTML标签是:

1. html链接使用<a>标签定义,“<a href=“http://www.test.com”>这是一个测试链接.com</a>”

2. html表格使用<Table>定义,行用<tr>表示,行用<td>分为数据

3.html列表以<ul>(无序)和<ol>(有序)开始,列表中的每个元素以<li>开始

如果不熟悉这些HTML标签,我建议到W3schools上学习HTML教程。这样对HTML标签会有个清楚的理解。

使用BeautifulSoup抓取网页

在这里,我将从维基百科页面上抓取数据。我们的最终目的是抓取印度的邦、联邦首府的列表,以及一些基本细节,如成立信息、前首府和其它组成这个维基百科页面的信息。让我们一步一步做这个项目来学习:

1.导入必要的库

2.使用“prettify”函数来看HTML页面的嵌套结构

如上所示,可以看到HTML标签的结构。这将有助于了解不同的可用标签,从而明白如何使用它们来抓取信息。

3.处理HTML标签

a.soup.<tag>:返回在开始和结束标签之间的内容,包括标签在内。

b.soup.<tag>.string: 返回给定标签内的字符串

c.找出在标签<a>内的链接:我们知道,我们可以用标签<a>标记一个链接。因此,我们应该利用soup.a 选项,它应该返回在网页内可用的链接。我们来做一下。

如上所示,可以看到只有一个结果。现在,我们将使用“find_all()”来抓取<a>中的所有链接。

上面显示了所有的链接,包括标题、链接和其它信息。现在,为了只显示链接,我们需要使用get的“href”属性:遍历每一个标签,然后再返回链接。

4.找到正确的表:当我们在找一个表以抓取邦首府的信息时,我们应该首先找出正确的表。让我们写指令来抓取所有表标签中的信息。

现在为了找出正确的表,我们将使用表的属性“class(类)”,并用它来筛选出正确的表。在chrome浏览器中,可以通过在所需的网页表格上单击右键来查询其类名–>检查元素–>复制该类名或通过上述命令的输出找到正确的表的类名。

5.提取信息放入DataFrame:在这里,我们要遍历每一行(tr),然后将tr的每个元素(td)赋给一个变量,将它添加到列表中。让我们先看看表格的HTML结构(我不想抓取表格标题的信息<th>)

如上所示,你会注意到<tr>的第二个元素在< th >标签内,而不在<td>标签内。因此,对这一点我们需要小心。现在要访问每个元素的值,我们会使用每个元素的“find(text=True)”选项。让我们看一下代码:

最后,我们在dataframe内的数据如下:

类似地,可以用BeautifulSoup实施各种其它类型的网页抓取。这将减轻从网页上手工收集数据的工作。也可以看下其它属性,如.parent,.contents,.descendants 和.next_sibling,.prev_sibling以及各种用于标签名称浏览的属性。这些将有助于您有效地抓取网页。

但是,为什么我不能只使用正则表达式(Regular Expressions)?

现在,如果知道正则表达式,你可能会认为可以用它来编写代码做同样的事情。当然,我也有过这个问题。我曾使用BeautifulSoup和正则表达式来做同样的事情,结果发现:

BeautifulSoup里的代码比用正则表达式写的更强大。用正则表达式编写的代码得随着页面中的变动而进行更改。即使BeautifulSoup在一些情况下需要调整,但相对来讲,BeautifulSoup较好一些。

正则表达式比BeautifulSoup快得多,对于相同的结果,正则表达式比BeautifulSoup快100倍。

因此,它归结为速度与代码的鲁棒性之间的比较,这里没有万能的赢家。如果正在寻找的信息可以用简单的正则表达式语句抓取,那么应该选择使用它们。对于几乎所有复杂的工作,我通常更多地建议使用BeautifulSoup,而不是正则表达式。

结语

本文中,我们使用了Python的两个库BeautifulSoup和urllib2。我们也了解了HTML的基础知识,并通过解决一个问题,一步一步地实施网页抓取。我建议你练习一下并用它来从网页中搜集数据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[实用]手把手教你用python抓网页数据
前言: 数据科学越来越火了,网页是数据很大的一个来源。最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matlab)都有可以实现和网站交互的包。本人试过用java,python,R抓网页,感觉语法各有差异,逻辑上是一样的。我准备用python来大概讲讲抓网页是什么概念,具体的内容要自己看手册或者google别人的博客,这里算是抛砖引玉了。水平有限,出现错误或者有更好的办法,欢迎讨论。 步骤一:熟悉Python的基
小莹莹
2018/04/20
1.7K0
[实用]手把手教你用python抓网页数据
Python 数据解析:从基础到高级技巧
导言: Python作为一门强大的编程语言,不仅在Web开发、数据分析和人工智能领域有广泛的应用,还在数据解析方面具有强大的能力。数据解析是从结构化或非结构化数据源中提取有用信息的过程,通常在数据清洗、数据分析和可视化之前进行。本文将深入探讨Python在数据解析中的应用,从基础知识到高级技巧,为读者提供全面的指南。
海拥
2023/10/05
4380
Python 数据解析:从基础到高级技巧
聊一聊,Python爬虫!
Python爬虫是否合法的问题颇具争议,主要涉及到使用爬虫的目的、操作方式以及是否侵犯了其他人的权益。本文将介绍Python爬虫的合法性问题,并提供一些相关的法律指导和最佳实践。
测试开发技术
2023/12/01
4090
聊一聊,Python爬虫!
2024年AI+爬虫指南:使用JinaAI、FireCrawl、Crawl4AI(别用Beautiful Soup了)
在这篇文章中,我们将介绍多种数据抓取工具,包括开源、免费和付费的工具,帮助你从网页中提取数据。众所周知,大型语言模型(LLMs)需要大量数据,而这些数据大部分来自网页。
AI进修生
2024/12/02
2K0
2024年AI+爬虫指南:使用JinaAI、FireCrawl、Crawl4AI(别用Beautiful Soup了)
快速入门网络爬虫系列 Chapter07 | 正则表达式
借助Python网络库,构建的爬虫可以抓取HTML页面的数据 从抓取的页面数据中提取有价值的数据,有以下方式:
不温卜火
2020/10/28
1.2K0
快速入门网络爬虫系列 Chapter07 | 正则表达式
如何使用爬虫做一个网站
大家如果有兴趣做网站,在买了VPS,部署了wordpress,配置LNMP环境,折腾一番却发现内容提供是一个大问题,往往会在建站的大(da)道(keng)上泄气 ,别怕,本文解密如何使用爬虫来抓取网站内容发布在你的网站中,并提供源代码。 大概简要说下写爬虫的几个步骤,在学习的过程中,有成就感会给你前进莫大的动力,学习爬虫也是如此,那么就从最基础的开始: Python有各种库提供网页爬取的功能,比如: urllib urllib2 Beautiful Soup
Python中文社区
2018/01/31
2.2K0
Python 学习入门(6)—— 网页爬虫
Python抓取网页方法,任务是批量下载网站上的文件。对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下在初学python过程中遇到的问题及解决方法。
阳光岛主
2019/02/19
2.1K0
Python 学习入门(6)—— 网页爬虫
手把手教你用python抓取网页导入模块 urllib2随便查询一篇文章,比如On random graph。对每一个查询googlescholar都有一个url,这个url形成的规则是要自己分析的。
http://www.1point3acres.com/bbs/thread-83337-1-1.html **前言: ** 数据科学越来越火了,网页是数据很大的一个来源。最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matlab)都有可以实现和网站交互的包。本人试过用java,python,R抓网页,感觉语法各有差异,逻辑上是一样的。我准备用python来大概讲讲抓网页是什么概念,具体的内容要自己看手册或者go
Albert陈凯
2018/04/04
1.6K0
Python爬虫入门这一篇就够了
所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本。万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息。
py3study
2020/01/15
8970
(数据科学学习手札31)基于Python的网络数据采集(初级篇)
  在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时我们该如何批量获取这些嵌入网页中的信息呢?
Feffery
2018/05/05
1.8K0
(数据科学学习手札31)基于Python的网络数据采集(初级篇)
使用多个Python库开发网页爬虫(一)
21CTO社区导读:在本篇文章里,我们将讨论使用Python进行网页抓取以及如何引用多个库,如Beautifusoup,Selenium库,以及JavaScript的PhantomJS库来抓取网页。 在本文中,我们将学习到如何抓取静态页面,Ajax内容、iFrame、处理Cookie等内容。 关于网页抓取 网页抓取是从Web中提取数据的过程,可以用于分析数据,提取有用的信息。 可以将抓取的数据存储到数据库里,也可以保存为任何格式的文件格式,比如CSV,XLS等,可用于其它软件再编辑。 在Python语言的世
企鹅号小编
2018/03/02
3.6K0
python简单爬虫
  爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2、BeautifulSoup实现简单爬虫,scrapy也有实现过。最近想更好的学习爬虫,那么就尽可能的做记录吧。这篇博客就我今天的一个学习过程写写吧。
oYabea
2020/09/07
4240
Python基础学习_09_网页爬虫基础
Python进行网页内容的爬取,首先需要将网页内容下载到本地,再针对特定网页内容的结构进行网页内容的解析,获得需要的数据。
码农帮派
2020/04/01
5260
Python基础学习_09_网页爬虫基础
使用Python编写网络爬虫抓取视频下载资源
Python因为其强大的字符串处理能力,以及urllib2,cookielib,re,threading这些模块的存在,用Python来写爬虫就简直易于反掌了。简单到什么程度呢。我当时跟某同学说,我写电影来了用到的几个爬虫以及数据整理的一堆零零散散的脚本代码行数总共不超过1000行,写电影来了这个网站也只有150来行代码。因为爬虫的代码在另外一台64位的黑苹果上,所以就不列出来,只列一下VPS上网站的代码,tornadoweb框架写的 [xiaoxia@307232 movie_site]$ wc -l
机器学习AI算法工程
2018/03/14
2.9K0
使用Python编写网络爬虫抓取视频下载资源
怎么用Python解析HTML轻松搞定网页数据
HTML(Hypertext Markup Language)是互联网世界中的通用语言,用于构建网页。在许多应用程序和任务中,需要从HTML中提取数据、分析页面结构、执行网络爬取以及进行网页分析。Python是一种功能强大的编程语言,拥有众多库和工具,可以用于HTML解析。
科技新语
2024/07/08
2340
怎么用Python解析HTML轻松搞定网页数据
网页解析
网页解析完成的是从下载回来的html文件中提取所需数据的方法,一般会用到的方法有:
爱编程的小明
2022/09/06
3.3K0
网页解析
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Eastmount
2021/03/01
1.5K0
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
Python3网络爬虫(七):使用Beautiful Soup爬取小说
本文总结了一些常见的网络爬虫和反爬虫技术,并介绍了一种基于Python的爬虫程序。该爬虫程序可以爬取指定网站的文章内容,并支持对某些网站的反爬虫策略。同时,还介绍了一种基于Web的爬虫程序,该程序可以爬取网站的文章列表,并支持对某些网站的反爬虫策略。
Jack_Cui
2018/01/08
4.5K0
Python3网络爬虫(七):使用Beautiful Soup爬取小说
Python网络爬虫笔记(一):网页抓取方式和LXML示例
(一)   三种网页抓取方法 1、    正则表达式: 模块使用C语言编写,速度快,但是很脆弱,可能网页更新后就不能用了。 2、    Beautiful Soup 模块使用Python编写,速度慢。 安装: pip install beautifulsoup4 3、    Lxml 模块使用C语言编写,即快速又健壮,通常应该是最好的选择。 (二)   Lxml安装 pip install lxml 如果使用lxml的css选择器,还要安装下面的模块 pip install cssselect (三)  
free赖权华
2018/04/27
1.3K0
python 爬虫2
一、认识爬虫 1.1、什么是爬虫? 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。 1.2、Python爬虫架构 调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。 URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。 网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包) 网页解析器:将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。 应用程序:就是从网页中提取的有用数据组成的一个应用。
conanma
2021/09/07
8410
推荐阅读
相关推荐
[实用]手把手教你用python抓网页数据
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文