python爬虫实例练习:批量爬取头像图片并保存到磁盘

实战爬虫:爬取糗事百科用户的头像图片

ps:文章来源于小编的头条号:“python数据科学频道”,想在手机端方便看文章的朋友可以去关注我的头条号。

爬取图片的关键:构建头像的正则表达式
pattern = ‘<img src="//([^s:;]+.(w|/)*(.jpg|.JPEG)??imageView2/1/w/90/h/90)"’

1、实训代码如下:

import re
import urllib.request
def getimg(url,page):
    # 设置头文件,模拟成浏览器爬取网页
    headers = {
    'Connection':'keep-alive',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Accept':'text/html,application/xhtml+xml,application/xml;\
    q=0.9,image/webp,image/apng,*/*;q=0.8',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \
    (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    }
    headall = []
    for key,value in headers.items():
        items = (key,value)
        headall.append(items)
    print(headall)  # 测试点1:输出头文件
    
    # 设置 opener 对象
    opener = urllib.request.build_opener()
    opener.addheaders = headall
    # 将opener对象设置成全局模式
    urllib.request.install_opener(opener)
    string = urllib.request.urlopen(url).read()
    # 将爬取的网页转换成字符串形式
    string = str(string)
    print(string)  # 测试点2:输出网址的字符串形式
    
    # 构建匹配图片的正则表达式
    pattern = '<img src="//([^\s:;]+\.(\w|/)*(.jpg|.JPEG)?\?imageView2/1/w/90/h/90)"'
    result = re.compile(pattern).findall(string)
    print(result)  # 测试点3:输出正则表达式匹配的结果
    x = 1
    for item in result:
        img = item
        print(img[0])  # 测试点4:输出真正需要的图片网址
        print('检验--','第'+str(page)+'页的第'+str(x)+'图片')  # 测试点5:测试前面局部代码是否正确
        # 这里的D盘的地址是我保存在我的电脑的本地磁盘地址
        filename = urllib.request.urlretrieve('http://'+img[0],\
                                              'D:/python shizhan/myweb/part6-1/'+str(page)+'-'+str(x)+'.jpg')
        urllib.request.urlcleanup()
        x += 1
    print('\n结束--','第'+str(page)+'页结束--')  # 测试点6:测试前面局部代码是否正确
    
# 设置循环遍历爬取13页的用户的头像 
for i in range(1,14):
    # 爬取的原网页地址
    url = 'https://www.qiushibaike.com/8hr/page/'+str(i)+'/'
    getimg(url,i)

2、程序运行结果部分截图:

在这里插入图片描述

3、应用

这个程序代码的思想可以运用来爬取类似的图片并下载下来。

4、解释代码的原理:

爬取糗事百科的用户头像最重要的两点是:

1.构建匹配头像的正则表达式:

第一个用户图像的链接为:

<img src="//pic.qiushibaike.com/system/avtnew/2680/26800306/thumb/20171229230411.JPEG?imageView2/1/w/90/h/90" alt="山鹰寂寞飞">

第二个用户图像的链接为:

<img src="//pic.qiushibaike.com/system/avtnew/3154/31545611/thumb/20160522144530.jpg?imageView2/1/w/90/h/90" alt="迷你猪猪侠小号">

所以总结出规律得出正则表达式:

 pattern = '<img src="//([^s:;]+.(w|/)*(.jpg|.JPEG)??imageView2/1/w/90/h/90)"'

2.糗事百科的网页地址的规律变化:

第一页网址:

https://www.qiushibaike.com/

第二页网址:

https://www.qiushibaike.com/8hr/page/2/

第三页网址:

https://www.qiushibaike.com/8hr/page/3/

我们把 https://www.qiushibaike.com/8hr/page/1/ 打开发现是第一页的内容,所以由此我们得出糗事百科的网页地址的规律变化:

url = ‘https://www.qiushibaike.com/8hr/page/’+str(i)+’/

文章到此结束。

猜你喜欢

转载自blog.csdn.net/qq_41731978/article/details/86631613