初学python,编写代码时找过网上很多例子,但是每个例子多多少少都会有一些问题,所以自己整理了一份。当然,根据版本的不同有些地方会有一些差异,我使用的版本是python2.7。如果有编写错误请大家指出。
#-*-coding:utf8-*- #编码声明:令python支持中文。该部分有多种写法,但是最不容易出问题的最好习惯使用这种写法。 import urllib2 #导入urllib2库 import re #导入re模块 def getHtml(url): #自定义一个函数getHtml page = urllib.urlopen(url) #返回一个类文件对象,获取整个页面的所有内容 html = page.read() #读取页面内容 return html #很重要,不要忘记写返回值 def getImg(html,i): #自定义一个函数getImg reg = r'src="(.*?\.jpg)" alt=' #根据源代码书写正则表达式匹配所需内容----A imgre = re.compile(reg); #将正则表达式转换为模式对象,实现有效的匹配 imglist = re.findall(imgre,html) #以列表的形式返回所需要的子串 x = 0+i*100 for imgurl in imglist: urllib.urlretrieve(imgurl, 'D:\999\%s.jpg' % x) #直接将远程数据下载到本地。这里使用了多类型传值-----B x += 1 return imglist for i in range(1,6): #for循环循环遍历多页 url='http://www.ivsky.com/bizhi/index_'+str(i)+'.html' #找到每页网址的规律,写出一个通用的代码适用于每一个网址 html = getHtml(url) print getImg(html,i) # 输出爬取结果#-*-coding:utf8-*- import urllib2 #导入urllib2库 import re #导入re模块 def getHtml(url): #自定义一个函数getHtml page = urllib.urlopen(url) #返回一个类文件对象,获取整个页面的所有内容 html = page.read() #读取页面内容 return html #很重要,不要忘记写返回值 def getImg(html,i): #自定义一个函数getImg reg = r'src="(.*?\.jpg)" alt=' #根据源代码书写正则表达式匹配所需内容----A imgre = re.compile(reg); #将正则表达式转换为模式对象,实现有效的匹配 imglist = re.findall(imgre,html) #以列表的形式返回所需要的子串 x = 0+i*100 for imgurl in imglist: urllib.urlretrieve(imgurl, 'D:\999\%s.jpg' % x) #直接将远程数据下载到本地。这里使用了多类型传值-----B x += 1 return imglist for i in range(1,6): #for循环循环遍历多页 url='http://www.ivsky.com/bizhi/index_'+str(i)+'.html' #找到每页网址的规律,写出一个通用的代码适用于每一个网址 html = getHtml(url) print getImg(html,i) #输出爬取结果
A:正则表达式代码部分的说明 r'指的是原始字符串,在正则匹配时加上r'的话可以保证代码的本来面目。
.*?\. 第一个 . 可以匹配除换行符以外的任意字符。 *匹配零或多个在它之前的字符。
? 匹配零或一个在它之前的字符。 \ 转义字符 第二个 . 就是普通的点字符。
B:多类型传值的说明 %可以将x的值传到前面的s上,在后面的代码中,x是逐渐加一的,所以s在对爬取到的图片的命名时也会逐渐加一,
避免了因命名的重复而发生爬取结果的覆盖、缺失或者不能正常运行代码程序的问题。