零基础小白如何快速入门python爬虫?我用这篇文章告诉你

本文针对初学者,我会用最简单的案例告诉你如何快速入门python爬虫!

想要入门Python 爬虫首先需要解决四个问题

熟悉python编程

了解HTML

了解网络爬虫的基本原理

学习使用python爬虫库

一、你应该知道什么是爬虫?

网络爬虫,其实叫作网络数据采集更容易理解。

就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。

归纳为四大步:

根据url获取HTML数据

解析HTML,获取目标信息

存储数据

重复第一步

这会涉及到数据库、网络服务器、HTTP协议、HTML、数据科学、网络安全、图像处理等非常多的内容。但对于初学者而言,并不需要掌握这么多。

二、python要学习到什么程度

如果你不懂python,那么需要先学习python这门非常easy的语言(相对其它语言而言)。

编程语言基础语法无非是数据类型、数据结构、运算符、逻辑结构、函数、文件IO、错误处理这些,学起来会显枯燥但并不难。

刚开始入门爬虫,你甚至不需要去学习python的类、多线程、模块之类的略难内容。找一个面向初学者的教材或者网络教程,花个十几天功夫,就能对python基础有个三四分的认识了,这时候你可以玩玩爬虫喽!

当然,前提是你必须在这十几天里认真敲代码,反复咀嚼语法逻辑,比如列表、字典、字符串、if语句、for循环等最核心的东西都得捻熟于心、于手。

教材方面比较多选择,我个人是比较推荐python官方文档以及python简明教程,前者比较系统丰富、后者会更简练。

三、为什么要懂HTML

前面说到过爬虫要爬取的数据藏在网页里面的HTML里面的数据,有点绕哈!

维基百科是这样解释HTML的

超文本标记语言(英语:HyperTextMarkupLanguage,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计网页、网页应用程序以及移动应用程序的用户界面[3]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。

总结一下,HTML是一种用于创建网页的标记语言,里面嵌入了文本、图像等数据,可以被浏览器读取,并渲染成我们看到的网页样子。

所以我们才会从先爬取HTML,再 解析数据,因为数据藏在HTML里。

学习HTML并不难,它并不是编程语言,你只需要熟悉它的标记规则,这里大致讲一下。

HTML标记包含标签(及其属性)、基于字符的数据类型、字符引用和实体引用等几个关键部分。

HTML标签是最常见的,通常成对出现,比如<h1>与h1>。

这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容(文本、图像等),有些标签没有内容,为空元素,如<img>。

以下是一个经典的Hello World程序的例子:

This is a title

Hello world!

HTML文档由嵌套的HTML元素构成。它们用HTML标签表示,包含于尖括号中,如<p>[56]

在一般情况下,一个元素由一对标签表示:“开始标签”<p>与“结束标签”p>。元素如果含有文本内容,就被放置在这些标签之间。

四、了解python网络爬虫的基本原理

在编写python爬虫程序时,只需要做以下两件事:

发送GET请求,获取HTML

解析HTML,获取数据

这两件事,python都有相应的库帮你去做,你只需要知道如何去用它们就可以了。

五、用python库爬取百度首页标题和图片

首先,发送HTML数据请求可以使用python内置库urllib,该库有一个urlopen函数,可以根据url获取HTML文件,这里尝试获取百度首页“https://www.baidu.com/”的HTML内容

# 导入urllib库的urlopen函数fromurllib.requestimporturlopen# 发出请求,获取htmlhtml = urlopen("https://www.baidu.com/")# 获取的html内容是字节,将其转化为字符串html_text = bytes.decode(html.read())# 打印html内容print(html_text)

看看效果:

输出html内容部分截取

我们看一下真正百度首页html是什么样的,如果你用的是谷歌浏览器,在百度主页打开设置>更多工具>开发者工具,点击element,就可以看到了:

在谷歌浏览器中查看HTML

对比一下你就会知道,刚才通过python程序获取到的HTML和网页中的一样!

获取了HTML之后,接下就要解析HTML了,因为你想要的文本、图片、视频都藏在HTML里,你需要通过某种手段提取需要的数据。

python同样提供了非常多且强大的库来帮助你解析HTML,这里以著名的python库BeautifulSoup为工具来解析上面已经获取的HTML。

BeautifulSoup是第三方库,需要安装使用。在命令行用pip安装就可以了:

pipinstall bs4

BeautifulSoup会将HTML内容转换成结构化内容,你只要从结构化标签里面提取数据就OK了:

比如,我想获取百度首页的标题“百度一下,我就知道”,怎么办呢?

这个标题是被两个标签套住的,一个是一级标签<head><head>,另一个是二级标签<title><title>,所以只要从标签中取出信息就可以了

# 导入urlopen函数fromurllib.requestimporturlopen# 导入BeautifulSoupfrombs4importBeautifulSoupasbf# 请求获取HTMLhtml = urlopen("https://www.baidu.com/")# 用BeautifulSoup解析htmlobj = bf(html.read(),'html.parser')# 从标签head、title里提取标题title = obj.head.title# 打印标题print(title)

看看结果:

这样就搞定了,成功提取出百度首页的标题。

如果我想要下载百度首页logo图片呢?

第一步先获取该网页所有图片标签和url,这个可以使用BeautifulSoup的findAll方法,它可以提取包含在标签里的信息。

一般来说,HTML里所有图片信息会在“img”标签里,所以我们通过findAll("img")就可以获取到所有图片的信息了。

# 导入urlopenfromurllib.requestimporturlopen# 导入BeautifulSoupfrombs4importBeautifulSoupasbf# 请求获取HTMLhtml = urlopen("https://www.baidu.com/")# 用BeautifulSoup解析htmlobj = bf(html.read(),'html.parser')# 从标签head、title里提取标题title = obj.head.title# 使用find_all函数获取所有图片的信息pic_info = obj.find_all('img')# 分别打印每个图片的信息foriinpic_info:print(i)

看看结果:

打印出了所有图片的属性,包括class(元素类名)、src(链接地址)、长宽高等。

其中有百度首页logo的图片,该图片的class(元素类名)是index-logo-src。

[

可以看到图片的链接地址在src这个属性里,我们要获取图片链接地址:

# 导入urlopenfromurllib.requestimporturlopen# 导入BeautifulSoupfrombs4importBeautifulSoupasbf# 请求获取HTMLhtml = urlopen("https://www.baidu.com/")# 用BeautifulSoup解析htmlobj = bf(html.read(),'html.parser')# 从标签head、title里提取标题title = obj.head.title# 只提取logo图片的信息logo_pic_info = obj.find_all('img',class_="index-logo-src")# 提取logo图片的链接logo_url ="https:"+logo_pic_info[0]['src']# 打印链接print(logo_url)

结果:

获取地址后,就可以用urllib.urlretrieve函数下载logo图片了

# 导入urlopenfromurllib.requestimporturlopen# 导入BeautifulSoupfrombs4importBeautifulSoupasbf# 导入urlretrieve函数,用于下载图片fromurllib.requestimporturlretrieve# 请求获取HTMLhtml = urlopen("https://www.baidu.com/")# 用BeautifulSoup解析htmlobj = bf(html.read(),'html.parser')# 从标签head、title里提取标题title = obj.head.title# 只提取logo图片的信息logo_pic_info = obj.find_all('img',class_="index-logo-src")# 提取logo图片的链接logo_url ="https:"+logo_pic_info[0]['src']# 使用urlretrieve下载图片urlretrieve(logo_url,'logo.png')

最终图片保存在'logo.png'

六、结语

本文用爬取百度首页标题和logo图片的案例,讲解了python爬虫的基本原理以及相关python库的使用,这是比较初级的爬虫知识,还有很多优秀的python爬虫库和框架等待后续去学习。

当然,掌握本文讲的知识点,你就已经入门python爬虫了。加油吧,少年!


本文章素材来源于网络,如有侵权请联系删除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270