如何用python实现爬虫自动爬取百度图片原图

说点什么

其实一直以来,对于python这个语言还是很感兴趣的,但是以前一直在做图像处理相关的东西,所以对这种无法触及底层内存处理的语言一直没怎么关注过,不过最近实在是被C++的字符串处理和复杂芜杂的网络框架给整崩溃了,而且看到大家都说python很好玩,就趁着最近没事来学一下python

昨天跟着廖雪峰老师的python教程(比较推荐它的基础教程),看了看基本的数据结构和逻辑之后,决定还是直接从实际的一个小项目来练手(对我来说这是我熟悉一门新语言的最好的方式),所以直接就选择比较简单的python爬虫项目来练手了。

写爬虫最重要的就是要了解我们平时访问的网页是什么东西,其实我们平时访问的网页其源码就是一个字符串文件(当然也可以说二进制文件)

每次当我们在浏览器上输入一个网址的时候,比如 www.google.com这个网址,浏览器就会根据其绑定的ip地址,帮助我们访问远端服务器并发送请求,远端服务器就会将这个网页的源码直接打包发给我们的浏览器(html文件格式),然后由我们的浏览器将这一字符串文件进行解析,比如通过div、h1、h2这些布局对网页进行格式化的渲染和展示,对img这些资源继续向远端服务器发送请求获取图片等,然后填装到网页上。

爬虫是什么

怎么说呢,爬虫,往简单的地方来说,就是模拟浏览器去获取一个网页的源码,至于你拿这个源码干嘛,那就不重要了。

复杂的说,爬虫其实是一切网页数据处理的综合,比如:自动爬取网页源码、分析网页数据、获取关键数据并进行保存,或者自动下载需要的网页图片、音频、视频的工具。

所以当我们在写一个pythonm爬虫的时候,我们在写什么?
当我们需要一个爬虫的时候,一般是我们遇到了比较复杂的数据需求,这个需求对于手工来说很复杂,单这个需求正是爬虫可以很简单地解决的。

所以首先确定我们的需求,我们需要这个爬虫去做什么?

比如我们觉得一个教学网站的数据很有意思,但是其格式太过于复杂,或者需要频繁的翻页不能凭复制粘贴很简单地拿到的时候,爬虫就有了作用。

总之,还是拿一个爬虫实例来进行说明吧。

爬取百度图片

ps:python 版本 —— Python 3.7.0

第一个爬虫,当然不能选取太复杂的需要涉及到很多复杂的网络规则的东西,所以我们就爬一些很简单地允许爬虫爬的网站吧。

比如爬取并下载某个关键词下的百度图片的图片数据。

1、确立需求

  • 可以修改关键词爬取我们想要的不同的图片集
  • 可以选择爬取的图片数量
  • 爬取的图片大小是原图片大小
  • 爬取鲁棒性

暂时就确定上面的几个需求吧,然后开始真正的爬虫代码的编写

2、观察网页源码

首先打开百度图片,随意搜索一个关键词,比如这次用我比较喜欢的动漫角色 栗山未来 来进行测试

右键查看网页源代码之后可以看到,每张图片的原地址开头都是很简单的"objURL",结尾都是一个小逗号,如下:

在这里插入图片描述

根据这点我们可以确定这个爬虫该如何进行操作了,很简单——从网页源码中提取出这些url并进行下载就可以了 \(^o^)/~

3、获取网页源码

其实这一步我有点不想写的,不过担心有看我的博客刚学python的朋友可能会出现错误,还是说一下吧。

首先,我们需要引入python中的网络库urllib,由于我们要用到的urlopenread方法在我这个版本的python中,直接引用urllib会出现错误,所以一般采用此importimport urllib.request

整个的提取网页源码的方法如下:

import urllib.request
def get_html(httpUrl):
	page = urllib.request.urlopen( httpUrl )#打开网页
	htmlCode = page.read( )#读取网页
	return htmlCode

我们可以把这个方法打包成一个py文件,以后直接就可以在其他py文件中import一下这个方法,然后直接使用我们写好的get_html方法就可以了。

然后将上方获取到的二进制文件,解码成一个正常地字符串:

html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#将二进制码解码为utf-8编码,即str

4、提取图片地址

说到提取网页源码中的关键数据,其实就是字符串匹配,这要是在C++里面估计得把我累死,当然我也的确写过类似的,甚至更复杂的,实在是惨痛的回忆。

这里向大家推荐一下比较简单的字符串检索和匹配方案——正则表达式,又称规则表达

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值