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
其实是个很简陋很简陋的程序,但是能实现功能,虽然我手头上有编好的比较健壮的程序,但是对于我们这种小白来说,搞清楚其中的核心程序,才是最重要的,其他什么用随机高匿代理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也写着吧,谁叫我是好人呢。。。
在network中随便找个,然后上Headers,在Request Headers,点开右边view source
,之后就能看到你的User-Agent了,我都帮你到这了,你只需要复制上自己的贴到对应的地方,即可实现抓图….如果还是不会,怎么办呢,还有一个方法~~~~***右键Python,选择卸载,点击确认*