Python实现简易爬图

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

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。发出请求,获取响应:

#从urllib中导入request
from from urllib import request
import urllib

#发出请求
response = request.urlopen(url)

#读取响应里面的东西,这时候text就是网页源码了
text = response.read()

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

#调用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列表了

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

#用于给图片命名
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,其它图片也一样。就不写了。

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

发布了33 篇原创文章 · 获赞 3623 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/ZackSock/article/details/96887696