搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 我爱学Python > 通过python非常简单的实现一个功能强大的爬虫

通过python非常简单的实现一个功能强大的爬虫

我爱学Python 2017-10-30

这是一篇写给想学习python,而又下不了决心的零基础的小白们的。如果你是业内人士,或者你是python大牛,那么看到这篇文章请一笑而过!学习python的重要性我这里就不赘述了。本文主要是通过python简单的来实现一个功能强大的爬虫。让零基础的小白们体会python的强大,和简单,主要是简单!那么言归正传,我们进入正题。

       首先我们需要了解什么是爬虫。爬虫,或者说叫网络爬虫。百度百科的定义是:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。对于小白来说,晦涩难懂!那么下面会用用通俗的话来解释网络爬虫。

       所以如果要写一个爬虫,就必须懂得浏览器是如何运作的。通过谷歌浏览器来了解打开百度首页,看看发生了些什么?首先打开谷歌浏览器,并且按f12打开开发者工具如下图:

通过python非常简单的实现一个功能强大的爬虫

右边的信息就是这次请求的详细信息。浏览器打开一个网址时,就是向这个网址所指向的服务器发送了一个http请求!那么当通过爬虫爬去某个网站的信息时,可以通过浏览器先打开这个网站,分析http请求,然后通过程序来模拟这个过程。

       我们来实现一个下载美女图片的爬虫。学习编程是个枯燥的过程,我们来点不枯燥的内容!我们选择校花网作为对象,首先打开校花网,选择大学校花这个栏目,网址是:http://www.xiaohuar.com/hua/。通过谷歌浏览器来分析下这个页面的http请求。

通过python非常简单的实现一个功能强大的爬虫

发现这是一个get请求。下面通过程序来模拟打开这个页面。本文涉及到的代码都是在python3.6.1环境中运行的。

       python3中有一个内置的模块:urllib通过它可以发送http请求。代码如下:

通过python非常简单的实现一个功能强大的爬虫

运行这段代码看看结果:

urllib.error.HTTPError: HTTP Error 403: Forbidden

发现报了403的错误,403报错是因为,服务器为了避免被恶意请求信息,做的一个反爬机制。要解决这个问题,需要将爬虫伪装成浏览器。在请求头信息里面,有一个信息

通过python非常简单的实现一个功能强大的爬虫

封装一个请求头,讲爬虫伪装成浏览器!再运行!

结果:<http.client.HTTPResponse object at 0x026E9670>

得到了一个HTTPResponse对象,可以通过read函数取出里面的内容!

可以得到返回的内容如下:

通过python非常简单的实现一个功能强大的爬虫

成功的获取了服务器返回的数据。

需要下载的是http://www.xiaohuar.com/hua/这个页面上的校花图片。想要下载图片,就需要知道图片的src信息,通过谷歌浏览器开发者工具中的element选项我们可以分析当前页面的html如下图:

通过python非常简单的实现一个功能强大的爬虫

根据分析,发现需要下载的图片的src都是类似:

/d/file/20170715/61110ba027f004fb503ff09cdee44d0c.jpg,这样的。那在返回的信息中包含了这个img的信息没有呢,会不会是动态加载的呢?需要在返回的信息中查找一下。复制这个src,在当前页面点击右键,查看原码,显示的就是服务器直接返回的信息,就是我们用程序模拟发送http请求获取的信息。Ctrl+f,查找刚才那个src,发现查找到了,那就好办了,不需要继续分析。关于动态加载的,作为小白暂时不用了解。

需要的img信息包含在了返回的信息中了,怎么将它提取出来呢?python是一门强大的语言,在于它有大量的第三方库,有一个第三方库bs4,它可以很方便的解析html。如下代码:

通过python非常简单的实现一个功能强大的爬虫

需要解释的是,第一句中有个from_encoding的参数为什么是gbk,是因为这个页面的编码就是gbk的,所以这里一定要写上正确的编码,不然中文会出现乱码!第二句中的src参数用到了正则模块re,它代表匹配所有src符合r’/d/file/\d+/\w+\.jpg’的img。输出imgs看看:

通过python非常简单的实现一个功能强大的爬虫

       在下载图片前,我们需要知道图片是怎么传输的,打开一个图片的src,看看它的http请求,选择response选项,看看返回了什么信息,如下图:

通过python非常简单的实现一个功能强大的爬虫

一堆看不懂得东西,其实返回的是二进制信息,我们只要将这个二进制数据保存在一个文件里就可以保存图片。

       那么开始编写循环下载图片的代码,在下载之前,发现图片的src信息不是完整的,还缺少了域名部分,所以我们要在src前面加上当前网页域名http://www.xiaohuar.com。下载部分的代码如下:

那么我们爬去这一个页面的校花图片的爬虫就写完了,运行,如果你代码没写错的话,你的代码所在文件夹中就会是如下图的景象:

 

       相信很多读者能够通过这篇文章写出这个爬虫,你可能会问,要爬去下一个页面的图片怎么办呢?还会问为啥这么慢呢,如果要下载几百张图片呢?你们也会问,要下一个别的网站的图片呢?因为篇幅,以及本人文字的苍白无力,不能在这里解答大家的问题!这里跟大家推荐一个群:643692991。这是本人建立的一个用来教新手入门python的一个群。如果你是小白,如果你想知道上面的代码怎么能兼容python2,如果你想知道怎么爬取整个网站的图片,如果你想知道怎么简单的实现10秒下载500张图片,那么你可以加我的群。群里定期会有视频课程手把手教大家学Python,还有大量的学习资料。至正在学习python和准备学习python的同志们,加油!


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《通过python非常简单的实现一个功能强大的爬虫》的版权归原作者「Python热爱者」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Python热爱者微信公众号

Python热爱者微信公众号:Python-520

Python热爱者

手机扫描上方二维码即可关注Python热爱者微信公众号

Python热爱者最新文章

精品公众号随机推荐