正则解析

实战案例-糗图图片爬取

  • 通过图片地址爬取一张图片:糗图图片
    1. url = 'https://pic.qiushibaike.com/system/pictures/12464/124644653/medium/OCDQRBU16H6YGDS6.jpg'
    2. # content返回的的是二进制的图片数据
    3. img_data = requests.get(url=url).content
    4. with open('qioutu.jpg', 'wb') as fp:
    5. fp.write(img_data)
    image.png
    提取每张图片的‘img src’,里面包含了图片地址信息

正则表达式的编写过程:目的——提取img src

  1. # 1、将一张图片所在的class‘thumb’源码复制过来
  2. <div class="thumb">
  3. <a href="/article/124644870" target="_blank">
  4. <img src="//pic.qiushibaike.com/system/pictures/12464/124644870/medium/SNAEZ8KNQITTKXBF.jpg" alt="糗事#124644870" class="illustration" width="100%" height="auto">
  5. </a>
  6. </div>
  7. # 2、写正则表达式
  8. ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
  9. # 3、将正则表达式作用于源码即可提取所有图片地址形成一个列表
  • 爬取图片到本地(还未进行分页操作)

    1. def get_pic():
    2. # 创建存储图片的文件夹,若存在该文件夹则不执行
    3. if not os.path.exists('./qioutupics'):
    4. os.mkdir('./qioutupics')
    5. url = 'https://www.qiushibaike.com/imgrank/' # 网页地址
    6. headers = {
    7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
    8. '92.0.4515.131 Safari/537.36'
    9. }
    10. # 使用通用爬虫对URL对应的一整张页面进行爬取
    11. page_text = requests.get(url=url, headers=headers).text
    12. # 使用聚集爬虫将页面中所有糗图进行解析
    13. ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
    14. img_src_list = re.findall(ex, page_text, re.S)
    15. # print(img_src_list) # 打印要在return前面
    16. for src in img_src_list:
    17. src = 'https:' + src # 拼接全图片地址
    18. img_data = requests.get(url=src, headers=headers).content
    19. img_name = src.split('/')[-1]
    20. imgPath = './qioutupics/' + img_name
    21. with open(imgPath, 'wb') as fp:
    22. fp.write(img_data)
    23. print(img_name, '下载成功!')
    24. # return img_src_list

    分页操作
    image.png
    从第1,2,3页网址可以发现规律

    1. def get_pic(pagenum=None):
    2. # 创建存储图片的文件夹,若存在该文件夹则不执行
    3. if pagenum is None:
    4. pagenum = [1, 1]
    5. if not os.path.exists('./qioutupics'):
    6. os.mkdir('./qioutupics')
    7. url = 'https://www.qiushibaike.com/imgrank/page/%d/' # 网页地址
    8. headers = {
    9. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
    10. '92.0.4515.131 Safari/537.36'
    11. }
    12. for page in range(pagenum[0], pagenum[1]):
    13. new_url = format(url % page)
    14. # 使用通用爬虫对URL对应的一整张页面进行爬取
    15. page_text = requests.get(url=new_url, headers=headers).text
    16. # 使用聚集爬虫将页面中所有糗图进行解析
    17. ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
    18. img_src_list = re.findall(ex, page_text, re.S)
    19. # print(img_src_list) # 打印要在return前面
    20. for src in img_src_list:
    21. src = 'https:' + src # 拼接全图片地址
    22. img_data = requests.get(url=src, headers=headers).content
    23. img_name = src.split('/')[-1]
    24. imgPath = './qioutupics/' + img_name
    25. with open(imgPath, 'wb') as fp:
    26. fp.write(img_data)
    27. print(img_name, '下载成功!')
    28. # return img_src_list
    29. get_pic(pagenum=[1, 3]