如何用爬虫抓取图片|Python爬虫学习笔记

先说下具体思路

1.打开一个包含图片的网页;

2.查看其源代码,寻找图片的格式,一般为src=***.jpg/png;

3.利用python自带模块进行匹配,提取出图片url的列表;

4.利用for循环遍历整个列表;

5.同时将图片保存在本地。

 


 

学习笔记

1.url要用decode方法解码一下,一般解码成utf-8的格式,具体可以查看下网页源代码中charset是什么;

2.有关findall:当给出的正则表达式中带有多个括号时,列表的元素为多个字符串组成的tuple,tuple中字符串个数与括号对数相同,字符串内容与每个括号内的正则表达式相对应,并且排放顺序是按括号出现的顺序;当给出的正则表达式中带有一个括号时,列表的元素为字符串,此字符串的内容与括号中的正则表达式相对应(不是整个正则表达式的匹配内容);当给出的正则表达式中不带括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容;

3.如果想在字符串里添加变量,请用%s的形式,如下例倒数第四行,如果把%s换成i的话,将保存最后一张图片(把之前的覆盖了),因为i在引号里会恒为1。

 
源代码

#coding=utf-8

import urllib
import urllib.request
import re

def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html

def getImg(html):
reg = r'src="(.+?\.jpg)"'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
return imglist

html = getHtml("http://www.feixingrui.com/pspiliang.html").decode('utf-8')

i = 1
for n in getImg(html):
urllib.request.urlretrieve(n,"/Users/Feixingrui/Desktop/python_spider/%s.jpg" %i)
print('%s/%s' %(i,len(getImg(html))))
i += 1
print ('finish!')

 

疑问&进阶

1.(.+?\.jpg).+为通配符,但是?是什么意思呢?

答:?的意思是+可有可无,其实.+的意思就是一个或多个字符,所以此处?可有可无。

2.如果网页中图片有很多很多该如何抓取?

3.如何优化代码(清除缓存,提高效率等)?

4.如何抓取多个页面的图片(需要点击下一页,比如百度图片)?

答:可以查看多个页面的URL的不同点,一半均为balabalabala=数字这种格式,通过循环,一个页面一个页面打开并抓取即可。

5.如何设置其它命名规则(如按日期、自定义等等)?


 

本文思路来源于网络,由www.feixingrui.com完善整理。

费星瑞|爱学习

 



Leave a Reply

Your email address will not be published. Required fields are marked *