python爬虫基础爬取用户头像实战

爬取糗事百科用户的头像图片

在这里插入图片描述

 #爬取图片的关键:构建头像的正则表达式

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

    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)

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

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/82955460
今日推荐