Python匹配利器-正则表达式(附赠爬图小程序)

Python 2.7
IDE Pycharm5.0.3

当前几天我还在玩用str匹配字符串来爬图的时候,我是崩溃的,程序代码非常冗余,非常不优美,虽说str来匹配效率要比正则匹配高,但是,代码太长好难看啊,自从接触了正则表达式,麻麻再也不用担心我爬图了(捂脸)

正则表达式指南,很详细,没基础请从这里穿越过去–鸣谢AstralWind←←这个真的看好几遍都不厌,请给我点赞0.0

Python3正则表达式特殊符号及用法–鸣谢小甲鱼←←这个小甲鱼的系列视频和网站真的非常赞,坛里大神如云,详情鱼C工作室话说我给你做广告了0.0

精简版请戳这里,这里,这里–鸣谢廖雪峰一直默默奉献的雪峰大大,我对你的感激如滔滔江水延绵不绝,balabalabal。。。。

下面是正题啦,给个成果图:(音效师,开灯)

(看着这些succeed是不是很亦可赛艇?)

aa11e5dde71190ef2dc35db5c91b9d16fdfa6040.jpg download succeed
7c67fbf2b211931387b033da62380cd790238d89.jpg download succeed
d827918fa0ec08fa53c7dfcd5eee3d6d54fbdabd.jpg download succeed
2562f21fbe096b633e08223b0b338744ebf8ac68.jpg download succeed
f9acd43f8794a4c22e2d9b4009f41bd5ad6e3976.jpg download succeed
d827918fa0ec08fae35f6fcc5eee3d6d55fbda26.jpg download succeed

Python匹配利器-正则表达式(附赠爬图小程序)_第1张图片

其实是个很简陋很简陋的程序,但是能实现功能,虽然我手头上有编好的比较健壮的程序,但是对于我们这种小白来说,搞清楚其中的核心程序,才是最重要的,其他什么用随机高匿代理ip,设置下载文件夹什么的,都是在这段核心代码基础上实现的,看懂这段,其余健壮的类似的代码相信很快就可以看懂了!
来人,上核心!!(灯光师,你明天不用来上班了)

# -*- coding: utf-8 -*-
import re
import urllib2
import urllib


def open_url(url):
    req = urllib2.Request(url)
    #先发请求
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
#这里每个人都不一样的,复制粘贴时候注意
#实在不知道自己的agent是啥,这句不加也可以,这是伪装成人类访问
    response = urllib2.urlopen(req)
    #打开请求过来的东西
    html = response.read().decode('utf-8')
    #用utf-8解码读出来
    return html


def get_img(html):
    p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
#正则表达式,如果细心看过上面的,这个应该可以理解

    imglist = re.findall(p,html)
#findall方法
    ''' for each in imglist: print each #这个只是前期测试用的,看看能不能正常找到网址 '''
    for each in imglist:
        filename = each.split("/")[-1]
        urllib.urlretrieve(each,filename)
        print '%s download succeed'%filename

if __name__ == '__main__':
    url = "http://tieba.baidu.com/p/4365239770"
#需要下载页的网址url,我这里用了贴吧的一个网页测试
    get_img(open_url(url))

解释我注释上都写差不多了;

然后惯例贴核心方法;

class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]) 
This class is an abstraction of a URL request.

就一句话解释了,会用就可以。

urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]]) 
Open the URL url, which can be either a string or a Request object

也是一句话,和上面的Request函数呼应,成对出现!
如果想要深究,这篇中文不错
urllib2使用总结

还有这个函数;
urllib.urlretrieve(url[,filename[,reporthook[, data]]])

Copy a network object denoted by a URL to a local file, if necessary. If the URL points to a local file, or a valid cached copy of the object exists, the object is not copied. Return a tuple (filename, headers)

英语二级水平即可读懂~
值得注意的是,urllib2和urllib的使用,在Python3中已经合并成一个了。。。。在import中也要注意把两个都导入吧!

为了防止小白走错路,这里贴一张怎么看规则的选择

点击图片右键,选择审查元素,然后可以看到图片的相关组成,然后就自己创立规则,在下载图片前,需要踩点,你可以看看你要下的图,是不是都是这类规则的,如果都是你创建规则的话,就会被匹配,这样就可以愉快的下图了呢!

哎,顺便把怎么看User-Agent也写着吧,谁叫我是好人呢。。。

Python匹配利器-正则表达式(附赠爬图小程序)_第2张图片

在network中随便找个,然后上Headers,在Request Headers,点开右边view source,之后就能看到你的User-Agent了,我都帮你到这了,你只需要复制上自己的贴到对应的地方,即可实现抓图….如果还是不会,怎么办呢,还有一个方法~~~~***右键Python,选择卸载,点击确认*
。

你可能感兴趣的:(正则表达式,python,正则,爬图)