- 爬取的网站:https://h.bilibili.com/eden/draw_area#/all/hot
- 寻找图片链接
- 审查图片链接模式
- 实现,核心:正则匹配图片链接地址
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!')
- 图片输出到文件