如何用html制作百度首页/什么是网站推广优化
写在前面
- 有小伙伴选题,简单整理
- 理解不足小伙伴帮忙指正
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
采集原理
一般情况下可以通过 selenium
来批量获取图片,定位元素,获取URL ,逻辑相对简单:
部分页面可能存在 翻页,懒加载的情况,一般使用 selenium
基本可以解决(下文 Demo 只涉及了 懒加载场景 )
采集图片实质上是采集图片对应的uri
,图片 URI 一般有三种:
- 一种为返回可预览的图片,报文类型为
image/jpeg
,是一个 JPEG 图像文件,一般uri 后缀为图片名称后缀 - 一种为返回可以直接下载的图片,报文类型为
binary/octet-stream
,是一种二进制数据的MIME
类型。 - 最后一种为直接返回 b64 编码的方式,
所以实际编码中需要考虑这三种情况,对于 b64 编码可以直接保存,对应 其他两两种 uri ,考虑转化字节或者 b64 编码下载
需要注意的问题
selenium
的版本问题,3 版本的和 4 版本 部分 方法差距较大,在实际编码中需要注意- 图片版权问题,是否允许直接使用
- 考虑 IP 流量检测,如果同一IP 获取,会涉及大量的 IO 操作,考虑代理池
- 逻辑方面实际处理中,可能存在部分 广告图片,需要结合网站实际需求进行处理
- 如果对图片有要求,可以适当的添加一些图片大小,模糊度的的过滤条件
下面为一个简单的脚本,以百度图库为 Demo,在实际的生产项目中,可以使用 ASGI
相关支持异步的 Web 框架处理 ( 比如 tornado
等),基于事件循环,不会阻塞 网络IO,有很高的并发性。
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@File : dow_img_file.py
@Time : 2023/11/15 20:53:40
@Author : Li Ruilong
@Version : 1.0
@Contact : liruilonger@gmail.com
@Desc : 批量图片采集
"""# here put the import lib
import requests
import base64
import pandas as pd
import time
import io
import uuid
from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image""""""def get_img_url_base64(url):"""@Time : 2023/05/29 21:50:42@Author : liruilonger@gmail.com@Version : 1.0@Desc : 图片 url 解析为 base64 编码Args:urlReturns:base64_bytes"""response = requests.get(url)image_bytes = response.contentbase64_bytes = base64.b64encode(image_bytes)return base64_bytes.decode('utf-8')def save_base64_image(base64_data, output_file):"""@Time : 2023/11/15 22:17:15@Author : liruilonger@gmail.com@Version : 1.0@Desc : 保存 b64 编码为 图片"""# 解析 Base64 编码字符串format, data = base64_data.split(";base64,")image_format = format.split("/")[-1]# 解码 Base64 数据image_data = base64.b64decode(data)# 将字节数据读取为图像image = Image.open(io.BytesIO(image_data))image = image.convert("RGB")# 保存图像为文件image.save(output_file, image_format)def get_img_url_byte(url):"""@Time : 2023/10/15 23:49:10@Author : liruilonger@gmail.com@Version : 1.0@Desc : 图片 url 解析为 字节"""response = requests.get(url)image_bytes = response.contentreturn image_bytesdriver = webdriver.Chrome()driver.get('https://image.baidu.com/')driver.find_element(By.XPATH, "//input[@id='kw']").send_keys("K8s")
time.sleep(3)
driver.find_element(By.XPATH, "//input[@class='s_newBtn']").click()
time.sleep(5)# 懒加载数据处理,点击 10 次加载更多
for page in range(0,2):# 跳转的页底部,触发懒加载driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")time.sleep(2)driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")time.sleep(2)driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")time.sleep(3)img_elements = driver.find_elements(By.TAG_NAME,'img')
time.sleep(1) # 对采集处理数据进行加工
imgs = []
data = {"URI":[],}
for img_element in img_elements:img_id = img_element.get_attribute('id')img_src = img_element.get_attribute('src')if img_src is not None and len(img_src) > 10:imgs.append((img_id,img_src))data['URI'].append(img_src)# 这里可以根据实际清理输出表格
df = pd.DataFrame(data)
file_name = "img_url"
df.to_csv(f'{file_name}.csv', index=False) # 批量下载图片
for img in imgs:if 'base64' in img[1]:save_base64_image(img[1],f"{str(uuid.uuid4()).replace('-', '')}.jpg")else: image_bytes = get_img_url_byte(img[1])image = Image.open(io.BytesIO(image_bytes))image = image.convert("RGB")image.save(f"{str(uuid.uuid4()).replace('-', '')}.jpg")
测试结果
下载图片
保存的 图片 URI
© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)
相关文章:

基于 selenium 实现网站图片采集
写在前面 有小伙伴选题,简单整理理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对…...

vue3相关内容
ref声明/赋值 操作基本类型数据 string number // 引入方法 import {ref} from vue // 声明变量 const name ref(A) // 修改值 name.value Breactive声明/赋值 操作引用类型数据 array object proxy不能直接赋值,会破坏响应式对象 // 引入方法 import {reacti…...

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FreeRTOS移植
前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…...

《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化
上链接:P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干: 首先给你一个整数t,代表t次操作。 每一次操作包含以下内容: 1.给你一个整数n,让…...

基于单片机的自动循迹小车(论文+源码)
1.系统设计 此次基于单片机的自动循迹小车的设计系统,结合循迹模块来共同完成本次设计,实现小车的循迹功能,其其整体框架如图2.1所示。其中,采用STC89C52单片机来作为核心控制器,负责将各个传感器等模块链接起来&…...

linux系统中安装python到指定目录
Linux系统中安装python 下载Python源码包 根据服务器系统和需要的Python版本,在Python官网下载对应的Python源码包。 安装依赖(需要权限) yum install gcc gcc-c patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel…...

分布式事务 - seata安装
分布式事务 - seata 一、本地事务与分布式事务 1.1、本地事务 本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则(ACID)。 1.2、分布式事务 分布式事务,就是指不是在单个服务或单个数据库架构…...

CentOS to 浪潮信息 KeyarchOS 迁移体验与优化建议
浪潮信息KeyarchOS简介 KeyarchOS即云峦操作系统(简称KOS), 是浪潮信息研发的一款面向政企、金融等企业级用户的 Linux 服务器操作系统。它基于Linux内核、龙蜥等开源技术,支持x86、ARM 等主流架构处理器,其稳定性、安全性、兼容性和性能等核心能力均已…...

Go解析soap数据和修改其中数据
一、解析soap数据 package main import ("fmt" "encoding/xml" ) type Envelope struct { XMLName xml.Name Header Header } type Header struct { XMLName xml.Name xml:"Header" Security Security xml:"Security" } type Secu…...

LeetCode98. Validate Binary Search Tree
文章目录 一、题目二、题解 一、题目 Given the root of a binary tree, determine if it is a valid binary search tree (BST). A valid BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node’s key. The right sub…...

【LeetCode】206. 反转链表
206. 反转链表 难度:简单 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输…...

飞天使-通过GET 和POST进案例演示
文章目录 GETPOST GET def index(request):# 在url中获取学号sno request.GET.get("sno", None)print("学号为:",sno)# 判断学号如果有值,执行查询if sno:results get_student_by_sno(sno)# 展示在页面return render(request, ind…...

【MySql】12- 实践篇(十)
文章目录 1. 为什么临时表可以重名?1.1 临时表的特性1.2 临时表的应用1.3 为什么临时表可以重名?1.4 临时表和主备复制 2. MySql内部临时表使用场景2.1 union 执行流程2.2 group by 执行流程2.3 group by 优化方法 -- 索引2.4 group by 优化方法 -- 直接排序 3. Me…...

<C++> 反向迭代器
我们知道正向迭代器的设计:begin迭代器指向第一个数据,end迭代器指向最后一个数据的下一个位置 。移向下一个数据,解引用得到数据的值,并根据容器储存方式的不同,容器有不同类型的迭代器。 注意:rbegin迭代…...

【EI会议征稿】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024) 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024&#…...

格力报案称“高管遭自媒体侮辱诽谤”
我是卢松松,点点上面的头像,欢迎关注我哦! 王自如的一番话引来了众多围攻,格力已报警,高管遭到侮辱诽谤。这应该是近年来少见的大企业和网络大v之间公开翻脸互撕的场景了! 就在今天格力就高管遭自媒体侮辱诽谤报案。…...

HBase之Compaction
目录 Compaction触发条件相关参数 文件选取策略ExploringCompactionPolicy常见优化 Compaction 随着memstore的不断flush,storefile的数量将会不断增加。compaction将通过合并storefile来减少文件数量,并提高读性能。conpaction以store为单位 Compacti…...

设计模式之结构型模式
这些模式关注对象之间的组合和关联方式,以便形成更大的结构和功能。 适配器模式(Adapter Pattern)桥接模式(Bridge)装饰器模式(Decorator)组合模式(Composite)外观模式&a…...

centOs 6.10 编译 qt 5.15.11
安装依赖库 xcb 依赖库 qt xcb 需要的依赖 如何要用 x11, 就要在编译的时候加上 -xcb 选项,就要安装 xcb 相关的库。 到时可以在 config.log 文件查看,缺少哪个库就安装哪个。 下面是我手动安装的库和对应版本: xcb-proto-1.14.tar.gz x…...

Redis对象的数据结构及其原理汇总
本文首发于公众号:Hunter后端 原文链接:Redis对象的数据结构及其底层实现原理汇总 当我们被问到 Redis 中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在 Redis 中都由…...

@RestController 注解网页返回 [] ,出现的bug
RestController 注解网页返回 [] ,出现的bug RestController RequestMapping("emp") public class EmployeeController {Autowiredprivate EmployeeService employeeService;GetMapping("find")public List<Employee> find(){List<Employee> …...

C语言指针详解(1)(能看懂字就能明白系列)文章超长,慢慢品尝
目录 1、内存和地址 2、指针简介 与指针相关的运算符: 取地址操作符(&) 解引用操作符(间接操作符)(*) 编辑 指针变量的声明 指针变量类型的意义 指针的基本操作 1、指针与整数相加…...

为什么别人年薪30W+?同样为测试人,“我“的测试之路...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件测试员&am…...

【Unity】XML文件的解析和生成
目录 使用XPath路径语法解析 使用xml语法解析 XML文件的生成 XML文件是一种常用的数据交换格式,它以文本形式存储数据,并使用标签来描述数据。解析和生成XML文件是软件开发中常见的任务。 解析XML文件是指从XML文件中读取数据的过程。在.NET中&#…...

Vue h5页面手指滑动图片
场景: 四张图,要求随着手指滑动而滑动 代码: imgs是父盒子 poster-item是每个图片 .imgs {white-space: nowrap;overflow: hidden;overflow-x: auto;margin-bottom: 17px;.poster-item {display: inline-block;vertical-align: middle;wid…...

Python类属性下划线的意义
在Python中,类属性(class attribute)前面带有下划线的命名约定有一些特殊的含义,但它并不会影响属性的实际行为。这是一种命名约定,用于指示属性的用途和访问级别。以下是一些常见的下划线命名约定: 1. 单…...

DbUtils概述
概述 JDBC实用工具组件 Commons DbUtils库是一个小的类集,旨在使使用JDBC更容易。JDBC资源清理代码是平凡的,容易出错的工作,所以这些类从代码中抽象出所有的清理任务,留给你真正想用JDBC做的事情:查询和更新数据。 …...

大数据基础设施搭建 - Hadoop
文章目录 一、下载安装包二、上传压缩包三、解压压缩包四、配置环境变量五、测试Hadoop5.1 测试hadoop命令5.2 测试wordcount案例5.2.1 创建wordcount输入文本信息5.2.2 执行程序5.2.3 查看结果 六、分发压缩包到集群中其他机器6.1 分发压缩包6.2 解压压缩包6.3 配置环境变量 七…...

测试开发环境下centos7.9下安装docker的minio
按照以下方法进行 1、安装docker,要是生产等还是要按照docker-ce yum install docker 2、启动docker service docker start 3、 查看docker信息 docker info 4、加到启动里 systemctl enable docker.service 5、开始docker pull minio/minio 但报错&#x…...

Django之模版层
目录 一、常用语法 二、模版语法之变量 三、模板之过滤器(Filters) 【1】default 【2】length 【3】filesizeformat 【4】slice 【5】date 【6】safe 【7】truncatechars 【8】其它过滤器(了解) 四、模版之标签 【1】for标签 【2】if 标签…...