首页
学习
活动
专区
圈层
工具
发布

Python实现简易爬图

第一步,先获取网页源码。这是用以下网址为例:

代码语言:javascript
复制
url = "https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%D4%FA%BF%CB%CB%B9%CD%BC%C6%AC&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111"

Python网络请求的类在urllib中,我们这次只需要用request。发出请求,获取响应:

代码语言:javascript
复制
#从urllib中导入requestfrom from urllib import requestimport urllib
#发出请求response = request.urlopen(url)
#读取响应里面的东西,这时候text就是网页源码了text = response.read()

第二步,写出正则表达式。这个就不赘述了。网上很多讲解。这里说一下,Python中正则的操作在re库中。从源码中获取所有url

代码语言:javascript
复制
#调用re的compile,传入正则表达式,获取操作字符串的对象。pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
#调用re的findall()方法,传入一个正则对象和编码格式。就可以根据创建pattern时的正则表达式,获取text#中的所有符合要求的字符串urls = re.findall(pattern, text.decode('utf-8'))

这里urls就是url列表了

第三步就是区分出图片,然后下载下来:

代码语言:javascript
复制
#用于给图片命名index = 0
#循环列表for i in urls:    #不同图片后缀不同,区分一下    if i.endswith('.png'):
        #这里使用两个参数的open,传入文件名,和文件权限(二进制写入)        img = open('img' + str(index) + '.png', 'wb')
        #通过urls中的网址发送请求        req = urllib.request.urlopen(i)                    #读取文件流        buf = req.read()                #把流写入img文件对象中        img.write(buf)

这里就判断了png,其它图片也一样。就不写了。

代码在这,左边是下载好的图片。

下一篇
举报
领券