正则爬多页网站图片

初学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在对爬取到的图片的命名时也会逐渐加一,
                               避免了因命名的重复而发生爬取结果的覆盖、缺失或者不能正常运行代码程序的问题。
                      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值