当前位置:
首页 > temp > python入门教程 >
-
17-用python爬取下载女神照片
今天咱们要爬取花瓣网 https://huaban.com/
设计师寻找灵感的天堂!有海量的图片素材可以下载,是一个优质图片灵感库
这次我们用 requests
登录花瓣网,爬取页面,再用正则与json
提取有用信息,最后把获取的图片信息 保存到本地
一 、用到技术
-
python 基础
-
requests
登录页面获取session用户会话,下载图片 -
正则表达式
提取页面的有用信息 -
json
解析页面中的图片
二、 目标页面
https://huaban.com/search/?q=女神&category=photography
三、结果
四、安装 必要的库
- win+R 打开运行
- 输出cmd 进入控制台
-
分别安装
requests
pip install requests
五、分析页面
-
页面规律
我们单击分页按钮,拿到页面最后一个参数的规律
第一页:https://huaban.com/search/?q=女神&category=photography&page=1
第二页:https://huaban.com/search/?q=女神&category=photography&page=2
2.登录
通过Fiddler我们查看到登录请求的地址和参数
# 地址
https://huaban.com/auth/
# 参数
"email": "******",
"password": "*****",
"_ref":"frame"
我决定使用requests
的session()
功能来获取用户登录后的会话session信息
3. 页面信息
我们通过右键查看源代码发现数据是保存在javascript
里面的我们准备用正则表达式提取页面信息
六、全部代码
#-*- coding:utf-8 -*-
import requests
import re
import json
# 导入 requests re正则 json
'''
login
登录花瓣 获取session
'''
def login():
login_url = 'https://huaban.com/auth/'
# 登录地址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
"Accept": "application / json",
"Content-type": "application/x-www-form-urlencoded; charset=utf-8",
"Referer": "https://huaban.com/",
}
# 请求头信息
session = requests.session()
#sesson 会话
login_data = {
"email": "zengmumu%40126.com",
"password": "zmm123",
"_ref":"frame"
}
response = session.post(login_url, data=login_data, headers=headers,verify=False)
# 登录页面
getPic(session,5)
# 获取图片,前5页
'''
getPic
解析页面中的图片地址
session 会话信息
num 最大是页数
'''
def getPic(session,num):
for i in range(1,num+1):
response = session.get("https://huaban.com/search/?q=%E5%A5%B3%E7%A5%9E&category=photography&page="+str(i))
# 获取页面信息("美女"文字编码后的结果是"%E5%A5%B3%E7%A5%9E" )
data = re.search('app\.page\[\"pins\"\] =(.*);\napp.page\[\"page\"\]', response.text, re.M | re.I | re.S)
# 提取到当前页面所在的所有图片信息
data = json.loads(data.group(1))
# 转换字符串为列表
for item in data:
url = "https://hbimg.huabanimg.com/" + item["file"]["key"]
# 拼接图片地址
index = item["file"]["type"].rfind("/")
type = "."+item["file"]["type"][index + 1:]
# 获取图片的类型
file_name = item["raw_text"]
# 获取图片的中文名
download_img(url, file_name,type)
# 下载图片
'''
下载图片
url 图片的地址
name 图片的中文名
type 图片的类型
'''
def download_img(url,name,type):
response = requests.get(url,verify=False)
# 使用requests 下载图片
index = url.rfind('/')
file_name = name+url[index + 1:]+type
# 获取图片的hash值
print("下载图片:" + file_name)
# 打印图片名称
save_name = "./photo/" + file_name
# 图片保存的地址(注意photo要自己建一个,与当前.py文件同一个文件夹)
with open(save_name, "wb") as f:
f.write(response.content)
# 写入图片到本地
'''
定义主函数
'''
def main():
login()
# 如果到模块的名字是__main__ 执行main主函数
if __name__ == '__main__':
main()
单词表
main 主要的 login 登录
response 响应 content 内容
write 写入 save 保存
print 打印 rfind 从右边查找
download 下载 type 类型
group 组 search 查找
session 会话 group 组
headers 头部 data 数据
request 请求 coding 编码格式
出处:https://www.cnblogs.com/bigzql/p/13812332.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数