对于网上简单爬虫爬取网站图片实例的操作体会
2018-03-10 09:59
309 查看
作为初学爬虫的小白,近日跟着网上的爬虫代码进行了尝试。
参考教程:python 实现简单爬虫功能
在操作过程中,遇到一些问题,这里将问题进行整理记载,方便日后查询。
整体操作过程可分为三个步骤:
获取页面信息
读取图片链接
将图片保存在本地指定目录下
首先进行第一步。
这里要说明一下,python3.X进行了一些更改,它将urllib与urllib2库进行了合并,具体更改请参考:Python3学习笔记(urllib模块的使用)
其实最好还是看官方文档:python3.0中urllib的模块介绍
下面贴代码(代码是在参考文档的基础下进行的改动):
这里page.read()后面需加入decode(‘utf-8’)进行解码,不然会报错。
然后进入第二步,读取图片链接。先上代码~
这里涉及到正则表达式的匹配。
正则表达式对于爬虫有相当重要的应用,它可以在如此庞大的网页内容中匹配到想要的结果,并以列表的形式返回。
关于正则表达式,我对其也进行过搬运,点击查看哦 python爬虫之re正则表达式库
代码中先定义好正则表达式,然后对其通过compile()进行编译,方便在整篇文档中进行搜索匹配,这里findall()方法有两种方式进行搜索。
第一种是传入两个参数,para1为编译后的表达式对象,para2为要读取的html页面。
第二种方式是直接利用编译好的表达式对象,因为该对象编译后已经成为正则式,所以可以利用该对象的findall()函数,此时只需要一个函数para1,来传入读取的html页面。
当匹配完成后,我们会得到一个包含匹配结果的返回列表,列表的每一项都是依次匹配后得到的url字符串。到这里按理说我们应该可以进入第三步了,但是到后面我们会发现,这里的url是不能识别的格式。本人在这里纠结了好久,不知道错在了哪里,后来发现了另一篇解决该问题的博,如下:python获取网络图片
文中匹配了com后面的部分,利用append()函数将匹配结果添加至列表。并利用for循环把每一个匹配到的字符串增加了“http://……”的前缀,将其变为了可识别的url格式。
现在就可以进入第三步,将图片下载到本地。
这里用到的关键函数是urllib.request.urlretrieve(),它可以将远程数据直接下载到本地。可以看到,通过循环,访问每一个有效的url地址,将图片下载到指定文件夹中,并依次序进行命名。
至此,整个获取过程就完成了。
参考教程:python 实现简单爬虫功能
在操作过程中,遇到一些问题,这里将问题进行整理记载,方便日后查询。
整体操作过程可分为三个步骤:
获取页面信息
读取图片链接
将图片保存在本地指定目录下
首先进行第一步。
这里要说明一下,python3.X进行了一些更改,它将urllib与urllib2库进行了合并,具体更改请参考:Python3学习笔记(urllib模块的使用)
其实最好还是看官方文档:python3.0中urllib的模块介绍
下面贴代码(代码是在参考文档的基础下进行的改动):
import urllib.request def getHtml(url): page = urllib.request.urlopen(url) #打开url地址 html = page.read().decode('utf-8') #读取url页面数据 return html
这里page.read()后面需加入decode(‘utf-8’)进行解码,不然会报错。
然后进入第二步,读取图片链接。先上代码~
def getImg(html): reg = r'src=".+?\.jpg"' imgre = re.compile(reg) imglist = re.findall(imgre, html) #第一种findall #imglist = imgre.findall(html) 第二种findall
这里涉及到正则表达式的匹配。
正则表达式对于爬虫有相当重要的应用,它可以在如此庞大的网页内容中匹配到想要的结果,并以列表的形式返回。
关于正则表达式,我对其也进行过搬运,点击查看哦 python爬虫之re正则表达式库
代码中先定义好正则表达式,然后对其通过compile()进行编译,方便在整篇文档中进行搜索匹配,这里findall()方法有两种方式进行搜索。
第一种是传入两个参数,para1为编译后的表达式对象,para2为要读取的html页面。
第二种方式是直接利用编译好的表达式对象,因为该对象编译后已经成为正则式,所以可以利用该对象的findall()函数,此时只需要一个函数para1,来传入读取的html页面。
当匹配完成后,我们会得到一个包含匹配结果的返回列表,列表的每一项都是依次匹配后得到的url字符串。到这里按理说我们应该可以进入第三步了,但是到后面我们会发现,这里的url是不能识别的格式。本人在这里纠结了好久,不知道错在了哪里,后来发现了另一篇解决该问题的博,如下:python获取网络图片
文中匹配了com后面的部分,利用append()函数将匹配结果添加至列表。并利用for循环把每一个匹配到的字符串增加了“http://……”的前缀,将其变为了可识别的url格式。
imgurllist = [] for imgurl in imglist: src = re.compile(r'com(\/.+\.jpg)') imgsrc = src.findall(imgurl) imgurllist.append('http://img.mukewang.com'+imgsrc[0])
现在就可以进入第三步,将图片下载到本地。
x = 0 for imgurl in imgurllist: path = os.path.abspath('.') #获取当前绝对路径 urllib.request.urlretrieve(imgurl, path + '/pic/%s.jpg' % x) x += 1
这里用到的关键函数是urllib.request.urlretrieve(),它可以将远程数据直接下载到本地。可以看到,通过循环,访问每一个有效的url地址,将图片下载到指定文件夹中,并依次序进行命名。
至此,整个获取过程就完成了。
完整代码
import re
import os
import urllib.request def getHtml(url): page = urllib.request.urlopen(url) #打开url地址 html = page.read().decode('utf-8') #读取url页面数据 return html
def getImg(html):
reg = r'src=".+?\.jpg"'
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
#imglist = imgre.findall(html) 第二种findall方式
imgurllist = [] for imgurl in imglist: src = re.compile(r'com(\/.+\.jpg)') imgsrc = src.findall(imgurl) imgurllist.append('http://img.mukewang.com'+imgsrc[0])
x = 0
for imgurl in imgurllist:
path = os.path.abspath('.')
urllib.request.urlretrieve(imgurl, path + '/pic/%s.jpg' % x)
x += 1
return imgurllist
html = getHtml("http://www.imooc.com/course/list")
imgurllist = getImg(html)
print(imgurllist)
相关文章推荐
- Python 简单爬虫--获得网上的图片
- 简单的python爬虫抓取图片实例
- python自学笔记(8)--Python简单爬虫从网站上下载图片和用第三方库request实现百度翻译
- Python爬虫实例(5)-简单的爬虫,用XML爬取卡车图片
- python3简单爬虫 (爬取各个网站上的图片)
- java实现爬虫爬网站图片的实例代码
- 一个简单的网络爬虫-从网上爬取美女图片
- Java简单实现爬虫技术,抓取整个整个网站所有链接+图片+文件(思路+代码)
- 一个简单的爬虫程序,爬取网站的图片
- python利用urllib实现爬取京东网站商品图片的爬虫实例
- HTML5 Canvas图片操作简单实例1
- JAVA 实现简单的网络爬虫,获取网站图片
- java网络编程____最简单的爬虫(爬取网站美女图片)
- 实现简单通讯录操作。 1、定义联系人类AddressPerson。实例变量:姓名、性别、电话号码、住址、分组名称。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息 2、在main.m中定义可变
- jQuery简单操作cookie的插件实例
- jq 操作表单的常用代码(结合网上找到的简单记录一下)
- Python---BeautifulSoup 简单的爬虫实例
- scrapy专利爬虫(三)——简单实际操作
- node.js下mongoose简单操作实例
- Java爬虫实践--爬取CSDN网站图片为例