前言
嗨喽!大家好,这里是魔王。总所周知, 某站是某知名的虚拟社区, 聚集了众多的优秀艺术家.他们在某站上相互交流, 分享高清优秀插画, 是一个正经的网站!那么我们今天就来爬一爬它!
亮点:
- 系统分析目标网页
- html标签数据解析方法
- 海量图片数据一键保存
环境介绍:
- python 3.8 – anaconda 安装了一些模块 / 自动的 配置环境变量
- pycharm 2021专业版 >>> 激活码
- requests >>> pip install requests
- parsel >>> pip install parsel
思路分析
确定需要爬取的数据是什么 在哪里?
- 图片
- 网页源代码
代码实现
- 发送网络请求 目标网站 https://www.acg-pixiv.com/tags/459.html
- 获取数据 网页源代码
- 提取数据 在网页源代码中提取所有的详情页链接
- 发送网络请求 详情页链接
- 获取数据 每一个详情页的网页源代码
- 提取数据 提取详情页中的图片链接
- 发送网络请求 图片链接
- 获取数据 图片二进制数据
- 保存数据
- 翻页爬取
要把现在的代码推翻, 重新写
导入模块
import requests # 发送网络请求的模块
import parsel # 提取数据
import re
发送网络请求 目标网站
url_1 = 'https://www.acg-pixiv.com/tags/450.html'
response_1 = requests.get(url_1)
# <Response [200]>: 告诉我们访问成功了
获取数据 网页源代码
data_html_1 = response_1.text
提取数据 在网页源代码中提取所有的详情页链接
selector = parsel.Selector(data_html_1)
# 提取链接 属性内容 @属性名称 css xpath re 三节课 6-9个小时
href_list = selector.xpath('/html/body/div/div[1]/ul/li/a/@href').getall()
title_list = selector.xpath('/html/body/div/div[1]/ul/li/a/@title').getall()
发送网络请求 详情页链接
for info in zip(href_list, title_list):
# 索引取值 元组
url_2 = 'https://www.acg-pixiv.com' + info[1]
获取数据 每一个详情页的网页源代码
# content? 获取二进制数据
response_2 = requests.get(url_2).text
提取数据 提取详情页中的图片链接
selector_2 = parsel.Selector(response_2)
# 图片链接
url = selector_2.xpath('/html/body/div/div[1]/div[1]/div/img[1]/@src').get()
print(url)
发送网络请求 图片链接
# 图片是二进制数据 网站 延迟太高了 实在是访问不到图片
# 如果说我的请求超过了五秒钟没有给我反应? 直接报错
# 当这个程序报错的时候
try:
img_data = requests.get(img_url, timeout=5).content
except:
# 图片链接改一下
img_url = img_url.replace('800', '400')
img_data = requests.get(img_url).content
# 标题有问题 里面有一些特殊字符
title = re.sub(r'[\\/:*?"<>|]', '_', info[1])
print(f'---------正在爬取{title}---------')
with open(f'img/{title}.jpg', mode='wb') as f:
f.write(img_data)
ps:这是重翻写后得代码
好了,我的这篇文章就先到这里啦,有更多建议或问题可以评论区或私信我哦!一起加油努力叭(? ?_?)?
|