Python 使用 Re 爬取 bilibili 画友图

  1. 爬取的网站:https://h.bilibili.com/eden/draw_area#/all/hot
bilibili 画友
  1. 寻找图片链接
图片链接
  1. 审查图片链接模式
Json 链接
  1. 实现,核心:正则匹配图片链接地址
from urllib import request
import requests, re

# 图片保存路径
SAVE_PATH = '/Users/shuai/PycharmProjects/Crawler/bilibili/'

# 伪装的 Request Headers
header = {
    'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
    'Accept-Encoding': 'gzip, deflate'
}

PAGE_NUMS = 4  # 爬取的页面数,从0开始,共4页(0,1,2,3)

# 依次爬取4个页面
for i in range(PAGE_NUMS):

    # 页面 url 中的 page_num 对应不同的页面
    url = 'https://api.vc.bilibili.com/link_draw/v2/Doc/list?category=all&type=hot&page_num=' + str(i) + '&page_size=20'

    # get 方法 得到 html 源码
    html = requests.get(url, headers=header).text

    # 正则得到图片链接
    img_urls = re.findall(r'https://i[0-9]\.hdslb\.com/bfs/album/[0-9a-z]{40}\.(?:jpg|png)', html)

    # 打印每个页面爬取到的图片总数
    print('page', i, 'image number:', len(img_urls))

    for j in range(0, len(img_urls)):

        # 判断图片格式
        if img_urls[j].endswith('png'):
            img_name = str(i) + '-' + str(j + 1) + '.png'
        else:
            img_name = str(i) + '-' + str(j + 1) + '.jpg'

        # urlretrieve 方法 保存图片到本地
        request.urlretrieve(img_urls[j], SAVE_PATH + img_name)

        # 信息流
        print('url:', img_urls[j], img_name, 'has been download!')
  1. 图片输出到文件
爬取的图片
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容