爬取摄图网

news/2024/11/25 4:22:24/

爬虫步骤详解

以爬取摄图网为例 ‘’https://699pic.com/tupian/so.html‘

1.准备起始url
这个步骤可以说是爬虫的关键
我们先来看 https://699pic.com/tupian/so.html
在这里插入图片描述
我们接下来在搜索框输入 关键词 宝马
拿到相应的url https://699pic.com/tupian/baoma.html

在这里插入图片描述
然后输入美女 得到相应的url https://699pic.com/tupian/meinv.html
这样我们就拿到了起始的url

我们设置title = input(‘请输入标题’)
但是这里有一个问题 title需要转换成拼音 才是正确的url
可以通过from xpinyin import Pinyin解决

– start_url = f’https://699pic.com/tupian/{title}.html’
附上headers ={ ‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36’,}

2.发送请求,获取响应
response = requests.get(start_url,headers=headers)
#打印观察
printf(response.status_code)
在这里插入图片描述
–状态码为200 说明请求成功

3.解析响应,数据提取
html_str = response.content.decode()
然后我们在网页中找到我们需要的数据
在这里插入图片描述
拿到这个 //img95.699pic.com/photo/50108/2763.jpg_wh300.jpg
放进浏览器看看
在这里插入图片描述
这说明我们接下来只要拿到这个data-original的值就行了。这里我使用正则匹配获取,代码如下:
data_list_1 = re.findall(‘data-original="(.*?)"’, html_str)
此时我们拿到了图片url的集合,打印后发现存在2个问题
1.获取到了我们不需要的数据
2.获取的数据中有重复的
同时,我们还没有给图片命名,于是我采用集合和枚举的方法解决
data_list = list(set(data_list_1))
set利用集合的特性进行去重,list将其转化为列表方便我们遍历处理
for num, img_url in enumerate(data_list):

num值是img_url,在data_list中的下标

 url = 'https:' + img_url

现在我们打印url 观察一下
在这里插入图片描述
我们可以通过状态码来跳过,无法请求的‘假’url

        resp = requests.get(url)if resp.status_code != 200:continueelse:data = resp.content

4.保存数据
with open(os_path_1 + str(num) + ‘.jpg’, ‘wb’)as f:
f.write(data)
print(f’第{num+1}张图片保存完成’)

在这里插入图片描述在这里插入图片描述
好像有奇怪的东西0…0

完整代码如下:

!/usr/bin/env python

-- coding: utf-8 --

#@author:uuyjp
from xpinyin import Pinyin
import requests, re, osp = Pinyin()os_path = os.getcwd() + '/数据/'
if not os.path.exists(os_path):os.mkdir(os_path)
while True:# 1.准备起始的url地址title_1 = input('请输入壁纸标题:')os_path_1 = os_path + f'/{title_1}/'if not os.path.exists(os_path_1):os.mkdir(os_path_1)title = p.get_pinyin(title_1).replace('-', '')# print(title)start_url = f'https://699pic.com/tupian/{title}.html'# print(start_url)"""构造headers"""# https/http 请求# 1.请求头headers = {# 伪装成为一个浏览器,人的操作,达到欺骗服务器的目的'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',}# 2.发送请求,获取响应response = requests.get(start_url, headers=headers)#3.解析响应,数据提取html_str = response.content.decode()# 正则data_list_1 = re.findall('data-original="(.*?)"', html_str)# 集合data_list = list(set(data_list_1))# 循环遍历,取出每一个url地址找for num, img_url in enumerate(data_list):# num值是img_url,在data_list中的下标url = 'https:' + img_url# print(url)try:resp = requests.get(url)if resp.status_code != 200:continueelse:data = resp.content# 4.保存数据with open(os_path_1 + str(num) + '.jpg', 'wb')as f:f.write(data)print(f'第{num+1}张图片保存完成')except:continue

http://www.ppmy.cn/news/403306.html

相关文章

晒照片

学校 大宁 2008.7.27 Food 2008.7.29

2022广州国际绿色标签印刷技术展览会

2022广州国际标签印刷技术展览会 Guangzhou International Label Printing Technology Exhibition 2022 时间:2022年8月18-20日 地点:广州琶洲-保利世贸博览馆 【指导单位】 中国印刷技术协会 香港数码印刷协会 北京市印刷行业协会 上海数字印刷行业协会…

2022-2028年中国晒图机行业发展战略研究及投资规划分析报告

报告类型:产业研究 报告格式:电子版、纸介版、电子纸介 出品单位:智研咨询-产业信息网 智研咨询发布的《2022-2028年中国晒图机行业发展战略研究及投资规划分析报告》共十三章。首先介绍了晒图机行业市场发展环境、晒图机整体运行态势等&am…

Selenium+Unittest自动化测试框架实战详解

目录 前言 项目框架 首先管理时间 !/usr/bin/env python3 -- coding:utf-8 -- 配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 管理页面元素 封装Selenium基类 创建页面对象 熟悉unittest测试框架 编写测试用例 执行用例 生成测试报…

软文营销,如何写出优质的新闻稿

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 一,什么是软文营销? 软文营销是一种通过撰写和发布具有信息性、有趣性和可读性的文章,来推广产品、服务或品牌的营销策略。软文是指以一种较为隐晦、…

Linux系统:优化命令sar

目录 一、理论 1.命令描述 2.命令作用 3.命令参数 4.实用实例 二、实验 1.压力测试 三、问题 1.Linux系统五大负载如何解决 2.为什么使用ab命令进行网络传输数据的压力测试 3.ab命令发送请求测试失败 四、总结 1.sar命令 2.ab命令 3.五大负载 一、理论 1.命令描…

MySQL为什么使用B+树,而不是B树?

MySQL使用B树而不是B树,主要有以下几个原因: B树可以更好地利用磁盘预读特性 在数据库中,数据通常都存储在磁盘上。而磁盘的读写速度比内存慢很多,因此需要尽量减少磁盘I/O操作。B树相对于B树来说,其内部节点只存储键…

SQL题记录

1193. 每月交易 I 题目 SQL Schema: Create table If Not Exists Transactions (id int, country varchar(4), state enum(approved, declined), amount int, trans_date date) Truncate table Transactions insert into Transactions (id, country, state, amo…