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

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

作者头像
CDA数据分析师
发布于 2018-02-05 02:34:03
发布于 2018-02-05 02:34:03
3.8K0
举报
文章被收录于专栏:CDA数据分析师CDA数据分析师

引言

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

网页信息提取的方式

从网页中提取信息有一些方法。使用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 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2024年AI+爬虫指南:使用JinaAI、FireCrawl、Crawl4AI(别用Beautiful Soup了)
在这篇文章中,我们将介绍多种数据抓取工具,包括开源、免费和付费的工具,帮助你从网页中提取数据。众所周知,大型语言模型(LLMs)需要大量数据,而这些数据大部分来自网页。
AI进修生
2024/12/02
2K0
2024年AI+爬虫指南:使用JinaAI、FireCrawl、Crawl4AI(别用Beautiful Soup了)
手把手 | 范例+代码:一文带你上手Python网页抓取神器BeautifulSoup库
大数据文摘作品,转载要求见文末 编译 | 元元、康璐 网络上的信息是任何人穷极一生也无法全部了解的。你需要的或许不是简单的获得信息,而是一个可以收集,整理,分析信息,并且具有拓展性的方法。 你需要网页抓取(Web scraping)技术。 网页抓取可以自动提取网站上的数据信息,并把这些信息用一种容易理解的格式呈现出来。网页抓取应用广泛, 在本教程中我们将重点讲解它在金融市场领域的运用。 如果你是个投资达人,每天查找收盘价一定是个烦心事,更不用提数据来源于多个网站的时候。我们可以用代码写一个网络爬虫 (web
大数据文摘
2018/05/24
2.7K0
手把手教你用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抓网页数据
前言: 数据科学越来越火了,网页是数据很大的一个来源。最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matlab)都有可以实现和网站交互的包。本人试过用java,python,R抓网页,感觉语法各有差异,逻辑上是一样的。我准备用python来大概讲讲抓网页是什么概念,具体的内容要自己看手册或者google别人的博客,这里算是抛砖引玉了。水平有限,出现错误或者有更好的办法,欢迎讨论。 步骤一:熟悉Python的基
小莹莹
2018/04/20
1.7K0
[实用]手把手教你用python抓网页数据
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
随着互联网的迅速发展,万维网成为大量信息的载体,越来越多的网民可以通过互联网获取所需的信息,同时如何有效地提取并利用这些信息也成为了一个巨大的挑战。搜索引擎(Search Engine)作为辅助人们检索信息的工具,它成为了用户访问万维网的入口和工具,常见的搜索引擎比如Google、Yahoo、百度、搜狗等。但是,这些通用性搜索引擎也存在着一定的局限性,比如搜索引擎返回的结果包含大量用户不关心的网页;再如它们是基于关键字检索,缺乏语义理解,导致反馈的信息不准确;通用的搜索引擎无法处理非结构性数据,图片、音频、视频等复杂类型的数据。
Eastmount
2021/12/02
8340
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
Python 学习入门(6)—— 网页爬虫
Python抓取网页方法,任务是批量下载网站上的文件。对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下在初学python过程中遇到的问题及解决方法。
阳光岛主
2019/02/19
2.1K0
Python 学习入门(6)—— 网页爬虫
网页解析
网页解析完成的是从下载回来的html文件中提取所需数据的方法,一般会用到的方法有:
爱编程的小明
2022/09/06
3.3K0
网页解析
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Eastmount
2021/03/01
1.5K0
[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
快速入门网络爬虫系列 Chapter07 | 正则表达式
借助Python网络库,构建的爬虫可以抓取HTML页面的数据 从抓取的页面数据中提取有价值的数据,有以下方式:
不温卜火
2020/10/28
1.2K0
快速入门网络爬虫系列 Chapter07 | 正则表达式
(数据科学学习手札31)基于Python的网络数据采集(初级篇)
  在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时我们该如何批量获取这些嵌入网页中的信息呢?
Feffery
2018/05/05
1.8K0
(数据科学学习手札31)基于Python的网络数据采集(初级篇)
使用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编写网络爬虫抓取视频下载资源
网页抓取 - 完整指南
Web Scraping,也称为数据提取或数据抓取,是从网站或其他来源以文本、图像、视频、链接等形式提取或收集数据的过程。
海拥
2023/02/26
3.6K0
网页抓取 - 完整指南
Python爬虫入门这一篇就够了
所谓爬虫,就是按照一定的规则,自动的从网络中抓取信息的程序或者脚本。万维网就像一个巨大的蜘蛛网,我们的爬虫就是上面的一个蜘蛛,不断的去抓取我们需要的信息。
py3study
2020/01/15
8970
python简单爬虫
  爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2、BeautifulSoup实现简单爬虫,scrapy也有实现过。最近想更好的学习爬虫,那么就尽可能的做记录吧。这篇博客就我今天的一个学习过程写写吧。
oYabea
2020/09/07
4240
Python 网络爬虫概述
几乎每个网站都有一个名为robots.txt的文档,当然也有有些网站没有设定。对于没有设定robots.txt的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面的数据都可以爬取。如果网站有文件robots.txt文档,就要判断是否有禁止访客获取数据 如:https://www.taobao.com/robots.txt
Python知识大全
2020/02/13
1.3K0
Python 网络爬虫概述
Python pandas获取网页中的表数据(网页抓取)
现如今,人们随时随地都可以连接到互联网上,互联网可能是最大的公共数据库,学习如何从互联网上获取数据至关重要。因此,有必要了解如何使用Python和pandas库从web页面获取表数据。此外,如果你已经在使用Excel PowerQuery,这相当于“从Web获取数据”功能,但这里的功能更强大100倍。
fanjy
2021/12/11
8.1K0
Python pandas获取网页中的表数据(网页抓取)
使用多个Python库开发网页爬虫(一)
21CTO社区导读:在本篇文章里,我们将讨论使用Python进行网页抓取以及如何引用多个库,如Beautifusoup,Selenium库,以及JavaScript的PhantomJS库来抓取网页。 在本文中,我们将学习到如何抓取静态页面,Ajax内容、iFrame、处理Cookie等内容。 关于网页抓取 网页抓取是从Web中提取数据的过程,可以用于分析数据,提取有用的信息。 可以将抓取的数据存储到数据库里,也可以保存为任何格式的文件格式,比如CSV,XLS等,可用于其它软件再编辑。 在Python语言的世
企鹅号小编
2018/03/02
3.6K0
Python基础学习_09_网页爬虫基础
Python进行网页内容的爬取,首先需要将网页内容下载到本地,再针对特定网页内容的结构进行网页内容的解析,获得需要的数据。
码农帮派
2020/04/01
5260
Python基础学习_09_网页爬虫基础
Python爬虫基础
Python非常适合用来开发网页爬虫,理由如下: 1、抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择) 此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
用户7678152
2020/08/26
9870
如何使用爬虫做一个网站
大家如果有兴趣做网站,在买了VPS,部署了wordpress,配置LNMP环境,折腾一番却发现内容提供是一个大问题,往往会在建站的大(da)道(keng)上泄气 ,别怕,本文解密如何使用爬虫来抓取网站内容发布在你的网站中,并提供源代码。 大概简要说下写爬虫的几个步骤,在学习的过程中,有成就感会给你前进莫大的动力,学习爬虫也是如此,那么就从最基础的开始: Python有各种库提供网页爬取的功能,比如: urllib urllib2 Beautiful Soup
Python中文社区
2018/01/31
2.2K0
推荐阅读
相关推荐
2024年AI+爬虫指南:使用JinaAI、FireCrawl、Crawl4AI(别用Beautiful Soup了)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文