动态网页爬取是爬虫学习中的一个难点。本文将以知名插画网站pixiv为例,简要介绍动态网页爬取的方法。
写在前面
本代码的功能是输入画师的pixiv id,下载画师的所有插画。由于本人水平所限,所以代码不能实现自动登录pixiv,需要在运行时手动输入网站的cookie值。
重点:请求头的构造,json文件网址的查找,json中信息的提取
分析
创建文件夹
根据画师的id创建文件夹(相关路径需要自行调整)。
def makefolder(id): # 根据画师的id创建对应的文件夹
try:
folder = os.path.join('E:\pixivimages', id)
os.mkdir(folder)
return folder
except(FileExistsError):
print('the folder exists!')
exit()
获取作者所有图片的id
访问url:https://pixiv.net/ajax/user/画师id/profile/all(这个json可以在画师主页url:https://www.pixiv.net/users/画师id 的开发者面板中找到,如图:)
json内容:
将json文档转化为python的字典,提取对应元素即可获取所有的插画id。
def getAuthorAllPicID(id, cookie): # 获取画师所有图片的id
url = 'https://pixiv.net/ajax/user/' + id + '/profile/all' # 访问存有画师所有作品
headers = {
'User-Agent': user_agent,
'Cookie': cookie,
'Referer': 'https://www.pixiv.net/artworks/'
# referer不能缺少,否则会403
}
res = requests.get(url, headers=headers, proxies=proxies)
if res.status_code == 200:
resdict = json.loads(res.content)['body']['illusts'] # 将json转化为python的字典后提取元素
return [key for key in resdict] # 返回所有图片id
else:
print("Can not get the author's picture ids!")
exit()
获取图片的真实url并下载
访问url:https://www.pixiv.net/ajax/illust/图片id?lang=zh,可以看到储存有图片真实地址的json:(这个json可以在图片url:https://www.pixiv.net/artworks/图片id 的开发者面板中找到)
用同样的方法提取json中有用的元素:
def getPictures(folder