如何入门Python爬虫?

标签: 技术成长, 知乎问答

保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/35/ )。

今天我们就从最基本和最本质的途径去编写一个爬虫,让大家真正了解爬虫的工作原理。并且,能够在此基础上根据自身需求改造出需要的爬虫

绝对基础、绝对易懂、绝对能上手。如果看完还不会写,我给你表演100个俯卧撑!

主要内容分为以下几个部分:

1、被爬取对象
2、当前对象的爬取
3、顺藤摸瓜的实现
4、取来即用的最简单框架

1、被爬取对象

爬虫是在从网络上爬取内容,常见的爬取的内容由:

其中最基本最原始的就是爬取网页本身。如果我们会爬取网页,那接口的数据也会被带出来,特定的资源也可以被筛选出来。因此,我们以爬取网页为例进行介绍。

那我们先了解什么是网页。例如,下面就是一个网页的截图。

图片

那这个网页是怎样构成的呢?

我们在网页上点击右键,选择“查看网页源代码”。

就看到了下面的内容,乱糟糟的一片。

图片

正是这乱糟糟的一片,经过浏览器渲染后,便成了眼前的页面。这东西就叫做网页源代码,是HTML文件。

我们可以在其中找到很多的元素。

例如,下面的是该网页的主旨,主要是给搜索引擎看的:

图片

下面这段则指向了一张图片的地址,渲染时浏览器会去下载和展示这张图片:

图片

下面这个则指向了一个后缀为css的文件。CSS文件是网页的样式文件,负责修饰网页上内容的样式(长宽高、间距、背景颜色等):

图片

下面这个则指向了一个后缀为js的文件。JS文件即javascript文件,负责为网页提供一些动态的响应功能、逻辑处理功能。例如一些点击后的操作逻辑都是由它实现的:

图片

还有非常重要的一部分,就是超链接。它指向了另外一个网页的地址。我们通过它,可以跳转到另外一个页面。

图片

另外还有很多元素,都是界面上会显示的内容。

可见,HTML文件很重要,它包含了:

可见它十分重要。

浏览器在工作时就是先下载指定地址的HTML文件,然后再根据HTML文件中给出的CSS、JS等资源连接去下载相关资源。可见,HTML文件是核心。

而一个网页的组成部分我们也理清楚了,如下图所示。

图片

我们在爬取时,会根据不同部分进行不同处理:

好,对被爬取对象的分析就到这里。

2、当前对象的爬取

假如我们已经有了某个页面的地址,怎么爬取其中的内容呢?

其实很简单,我们将Python程序伪装为一个浏览器,向网站请求数据。那网站自然就会将HTML信息发送给我们。我们可以将其保存在一个文本文件中。

下面的代码就可以实现。

htmlFile=open('./output/'+(str(pageId)+'.txt'),'w')
htmlFile.write(urllib.urlopen(url).read())
htmlFile.close()

是不是很简单!

3、顺藤摸瓜的实现

爬虫,有一个重要的点是“爬”。能顺藤摸瓜地爬到下一个地方,继续下载。怎么实现?

还记得么,我们已经在第二步中下载了当前页面的HTML文件。而在第一步中我们说过,HTML文件中有到其他页面的链接!

那我们要做的就是将这些到其他页面的链接找出来,然后到对应的页面下载相关内容。简单!

怎么找出来呢?正则表达式!简单来说,就是按照一定的格式在文本中寻找。

在HTML文件中,指向其它网页的地址是放在”href=“后面的,而且我们也说过,网页的地址一定不是css、js等结尾的文件,也不是图片(ico、jpg等结尾的就是图片)。

所以,我们可以粗略地使用下面的表达式将链接过滤出来。

pattern=re.compile('href="[^(javascript)]\S*[^(#)(css)(js)(ico)]\"')

然后我们就可以将过滤出来的链接内容下载下来(即再次执行第二步),然后继续分析(再次执行第三步)……然后一直爬呀爬……

这时我们可以增加一些新的规则,例如,不仅仅下载HTML文件,顺便现在其中的图片等。做到爬图功能。

4、整体流程

好了,爬虫已经不难了。

简单来说就是下面的步骤:

爬取函数(a)
  下载网页a的内容
  分析网页a中的链接,对得到的每一个链接b调用  爬取函数(b)

当然,这个过程中也要处理一些小的细节。例如:


5、取来即用的爬虫框架

好了,接下直接实现一个最简单的框架,地址如下:

https://github.com/yeecode/EasyCrawler

最基本最简单的Python爬虫示例,适合初学者了解爬虫的工作原理和实现,并在此基础上增加功能。

该爬虫的基本功能如下:

整个示例极少依赖外部项目,十分简单、易懂、纯粹。因此该项目不仅便于学习,也便于在此基础上扩充改装。

基于以上功能,我们可以修改实现众多其他功能,包括但不限于:

等等……

最后,给一个这个爬虫工作的视频,在下面回答的最后方,【点击这里】

本文首发于个人知乎:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。

作者书籍推荐