爬虫 python 正则匹配 保存网页图片

目录

  • 1. 简介
    • 1.1 爬虫
    • 1.2 爬虫语言
    • 1.3 python库
    • 1.4 我的步骤
  • 2. 导入包
    • 2.1 代码
    • 2.2 requests库
  • 3. 写入文件函数
  • 4. 获取图片
  • 5. 主函数
    • 5.1 代码
    • 5.2 说明一下webbrowser
  • 6. 所有代码
  • 7. 其他(可以忽略)
  • 8. 总结

在这里我只提供的是一种方法,有很多网页有反爬虫的机制,我的代码并不适用所有的网页(百度的图片搜索就不行)

1. 简介

1.1 爬虫

爬虫是指模拟人工访问网站并抓取网站内容的程序。通常爬虫程序由以下几个部分组成:

  1. 获取网页内容:爬虫程序需要模拟 HTTP 请求,向目标网站发送请求,并获取网页内容。

  2. 解析网页内容:爬虫程序需要对获取的网页内容进行解析,提取出需要的信息,这些信息可能包括文本、图像、视频、链接等。

  3. 存储数据:爬虫程序需要将获取到的数据存储到本地或者数据库中,以便进行分析和处理。

爬虫程序通常可以分为以下几个步骤:

  1. 确定要爬取的目标网站。

  2. 分析目标网站的网页结构,了解网站的 URL 规则和数据格式。

  3. 编写爬虫程序,模拟 HTTP 请求,获取网页内容,并解析需要的数据。

  4. 对爬取到的数据进行处理,存储到本地或者数据库中。

需要注意的是,爬虫程序需要遵守网站的访问规则和法律法规,不得对网站进行恶意攻击和侵犯他人隐私等行为。此外,为了避免对目标网站的服务器造成负担,爬虫程序应该设置合理的访问频率和访问间隔。

1.2 爬虫语言

爬虫可以使用多种编程语言进行开发,常见的有:

  1. Python:Python 是目前应用最广泛的爬虫编程语言之一,具有简洁易学、生态丰富、库众多等优点。

  2. Java:Java 是一种通用的编程语言,也可以用来开发爬虫程序。Java 虽然有些冗长,但是其稳定性和跨平台性在爬虫领域表现出色。

  3. JavaScript:JavaScript 常用于前端开发,但也可以用来开发爬虫程序。JavaScript 的优点是在浏览器环境下运行,可以从页面中获取动态生成的内容。

  4. Ruby:Ruby 是一种优雅的编程语言,具有易读易写、面向对象等优点,也可以用来开发爬虫程序。

  5. Go:Go 是一种新兴的编程语言,由于其简单易用、高效等特点,也开始逐渐应用于爬虫编程领域。

不同的编程语言有不同的特点和优缺点,在选择时需要考虑自己的实际需求和个人偏好。

1.3 python库

Python 爬虫使用的库非常丰富,以下是一些常用的爬虫库:

  1. Requests:用于发送 HTTP 请求,并返回相应的数据,是 Python 中最流行的库之一。

  2. Beautiful Soup:用于解析 HTML 和 XML 文档,可以方便地从网页中提取数据。

  3. Scrapy:一个基于 Python 的高级爬虫框架,可用于抓取大量数据。

  4. Selenium:用于模拟浏览器行为,可以模拟点击、输入等操作,自动化地获取数据。

  5. Pandas:用于数据处理和分析,可以将抓取的数据整理成表格形式进行分析。

  6. Pyquery:用于解析 HTML 和 XML 文档,类似于 jQuery 的语法,可以方便地从网页中提取数据。

  7. Textract:用于提取文本和表格数据,可以自动识别 PDF、Word、Excel 等文档格式。

  8. Scikit-learn:用于机器学习相关的应用,可以对抓取的数据进行分类、聚类等操作。

以上库只是常用的一部分,具体使用时需要根据实际需求选择适合的库。

1.4 我的步骤

  1. 导入要使用的包
  2. 测试是否读取网页
  3. 查看网页源代码,来写正则匹配
  4. 打开一个图片,测试保存
  5. 结合起来,依次匹配,进行保存到文件夹

2. 导入包

2.1 代码

import os
import requests
import webbrowser
import sys
import cv2
import re

2.2 requests库

我使用的库是requests

Requests 是 Python 中非常流行的 HTTP 请求库,用于发送 HTTP 请求并获取响应。它提供了简单易用的 API,可以轻松地发送 GET、POST、PUT 等请求,还可以添加请求头、发送 cookie 等。以下是 Requests 库的基本使用方法:

  1. 安装 Requests 库:在命令行中输入 pip install requests 即可安装。

  2. 导入 Requests 库:在 Python 文件中使用 import requests 导入库。

  3. 发送 HTTP 请求:使用 requests.get(url) 发送 GET 请求,使用 requests.post(url, data) 发送 POST 请求。其中,url 是请求的网址,data 是请求参数。

  4. 获取响应:使用 response.text 获取响应内容,使用 response.status_code 获取响应状态码。

  5. 添加请求头:使用 headers 参数添加请求头,如 requests.get(url, headers=headers)。

  6. 发送 cookie:使用 cookies 参数添加 cookie,如 requests.get(url, cookies=cookies)。

  7. 超时设置:使用 timeout 参数设置超时时间,如 requests.get(url, timeout=5)。

以下是一个使用 Requests 发送 GET 请求的示例:

import requests

response = requests.get('https://www.baidu.com')
print(response.text)

以上代码会发送一个 GET 请求到百度首页,并获取响应内容打印出来。注意,这里的 response.text 是获取响应内容的方法。如果要获取二进制数据,可以使用 response.content。

3. 写入文件函数

代码:

# 写入文件函数
def down_pic(url, filename):
   #定义一个函数,用于下载网络图片,参数url为图片对应的url地址,filename为爬取图片名字
    r = requests.get(url) # 获取网页内容
    path = './picture' # 爬取图片待存储目录
    if not os.path.exists(path): # 判断桌面是否有一个名称为“图片”的文件夹,如果没有,就创建它
        os.mkdir(path)    # 爬取图片
    with open(path + '\\' + filename, 'wb') as f:     
        f.write(r.content) # 以二进制形式写入文件   
        f.close # 关闭文件

这里的url不是网页地址,是图片地址。
我们可以打开一个含有图片的网页
网页

在空白处右击进行检查或者按Ctrl+shift+I
检查

选择你想查看的图片
图片

复制地址
复制

新开一个网页,在最上面,输入这个地址,进入地址
输入
进入
这里的地址就是网页地址
右击可以选择地址进行保存,嘻嘻!!!

4. 获取图片

代码:

def get_web(url):
    header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
        'Cookie':'*****'#cookie需要你先自己在浏览器登录百度账号,再按f12就有了
        'Accept':'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
        'Accept-Encoding':'gzip, deflate, br',
        'Accept-Language':'zh-CN,zh;q=0.9'}
    response = requests.get(url,headers=header)
    # print(response)
    # print(response.content.decode())
    text = response.content.decode() # 获取文档
    # 存一下看看
    path = "./text.html"
    file = open(path,'w',encoding="utf-8")
    file.write(text)
    file.close()
    # 接下来进行正则匹配
    r = r"data-original=\"(.*?)\""
    fill = re.findall(r,text)
    print(fill[0])
    # 命名
    a = ""
    for i in range(len(fill)):
        url = "https:" + fill[i]
        a = str(i) +".jpg"
        down_pic(url,a)
        a = ""

在你要爬虫的页面,按ctrl+shift+I进行检查的console栏,输入alert(document.cookie)
这样就获取了你的cookie

在这个代码里,我将获取的text保存到html文件里了,这样方便查看。

最主要的部分是正则匹配,可以通过查看文档来考虑图片地址的匹配方式。

5. 主函数

5.1 代码

if __name__ == '__main__':
    url = 'https://sc.chinaz.com/tupian/gudianmeinvtupian.html' # 图片对应的url地址
    # webbrowser.open(url)  # 打开网页
    # 获取文件文档,然后匹配文件
    get_web(url)

这里我爬虫的网页是一个含有图片的免费下载的网站,对于别的网站我也没有试过。
https://sc.chinaz.com/tupian/gudianmeinvtupian.html
图片

5.2 说明一下webbrowser

webbrowser 是 Python 内置的标准库,可以用来在默认浏览器中打开指定的 URL。webbrowser.open(url) 方法接收一个 URL 参数,它会自动打开系统默认浏览器并在其中打开指定的 URL。

下面是一个示例:

import webbrowser

url = "https://www.baidu.com"
webbrowser.open(url)

运行以上代码后,系统默认浏览器会打开百度的首页。如果系统中有多个浏览器,那么会打开默认浏览器。

webbrowser 库还提供了其他一些方法,例如 open_new() 和 open_new_tab(),它们分别用来在新窗口和新标签页中打开 URL。例如:

import webbrowser

url = "https://www.baidu.com"
webbrowser.open_new_tab(url)

运行以上代码后,系统默认浏览器会在新标签页中打开百度的首页。

6. 所有代码

'''
Descripttion: 存储网络上的图片,算是做了一些吧
version: 版本
Author: YueXuanZi
Date: 2023-05-30 14:52:30
LastEditors: YueXuanZi
LastEditTime: 2023-05-31 20:53:50
Experience: 心得体会
'''
import os
import requests
import webbrowser
import sys
import cv2
import re
# 写入文件函数
def down_pic(url, filename):
   #定义一个函数,用于下载网络图片,参数url为图片对应的url地址,filename为爬取图片名字
    r = requests.get(url) # 获取网页内容
    path = './picture' # 爬取图片待存储目录
    if not os.path.exists(path): # 判断桌面是否有一个名称为“图片”的文件夹,如果没有,就创建它
        os.mkdir(path)    # 爬取图片
    with open(path + '\\' + filename, 'wb') as f:     
        f.write(r.content) # 以二进制形式写入文件   
        f.close # 关闭文件

def get_web(url):
    header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
        'Cookie':'***',#cookie需要你先自己在浏览器登录百度账号,再按f12就有了
        'Accept':'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
        'Accept-Encoding':'gzip, deflate, br',
        'Accept-Language':'zh-CN,zh;q=0.9'}
    response = requests.get(url,headers=header)
    # print(response)
    # print(response.content.decode())
    text = response.content.decode() # 获取文档
    # 存一下看看
    path = "./text.html"
    file = open(path,'w',encoding="utf-8")
    file.write(text)
    file.close()
    # 接下来进行正则匹配
    r = r"data-original=\"(.*?)\""
    fill = re.findall(r,text)
    print(fill[0])
    a = ""
    for i in range(len(fill)):
        url = "https:" + fill[i]
        a = str(i) +".jpg"
        down_pic(url,a)
        a = ""

if __name__ == '__main__':
    url = 'https://sc.chinaz.com/tupian/gudianmeinvtupian.html' # 图片对应的url地址
    # webbrowser.open(url)  # 打开网页
    # 获取文件文档,然后匹配文件
    get_web(url)

7. 其他(可以忽略)

不是专门学习爬虫,有了想法就去做了,遇到困难就解决困难。多去尝试一下,哈哈哈哈哈。
就当是给自己玩一个游戏吧,感受一下键盘敲击的快乐,在头脑风暴中沉醉。
这是很重要的一个体验,接触多了有趣多了。

8. 总结

还算顺利,都还可以,CSDN里基本上都有我想要找到的,方法总比苦难多,以后要不要学习用JAVA或者javascript等别的一些语言进行爬虫啊,还在考虑,哈哈哈哈。学习爬虫是因为做一下机器视觉实验或者机器学习的时候没有素材,后来发现,没有网上人家自己搜集的数据集好。就当是一个体验吧,哈哈哈哈。


最后把开始那张照片放在这吧,欢迎大家在评论区交流。

women

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/28478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 万字通关

文章目录 1. 什么是 Spring MVC?1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系 2. Spring MVC 有什么用 ?3. 如何学 Spring MVC ?3.1 Spring MVC 的创建3.2 实现连接功能3.2.1 RquestMapping 详解1. RequestMapping 支持什么请求?2. 请求限定3. GetMapping 和 PostMapping4. c…

【Android -- JNI 和 NDK】Java 和 C/C++ 之间传递参数和返回值

本文主要介绍 JNI 的数据传递上,即 Java 如何传递对象给 C; 而 C 又如何将数据封装成 Java 所需的对象。 1. 基本数据类型 传递 java 的基本类型是非常简单而直接的,一个 jxxx 之类的类型已经定义在本地系统中了,比如:jint, jby…

认识ASP.NET MVC的5种AuthorizationFilter

一、IAuthorizationFilter 所有的AuthorizationFilter实现了接口IAuthorizationFilter。如下面的代码片断所示,IAuthorizationFilter定义了一个OnAuthorization方法用于实现授权的操作。作为该方法的参数filterContext是一个表示授权上下文的AuthorizationContext对…

FasterTransformer 004 open_attention.h forward

initialize forward() https://github1s.com/NVIDIA/FasterTransformer/blob/v1.0/fastertransformer/cuda/open_attention.h#L149-L217 使用cuBLAS库执行矩阵乘法运算,并对cublasGemmEx()进行三个单独的调用。这些操作包括将属性核与输入张…

【社区图书馆】《看漫画学Python:有趣、有料、好玩、好用(全彩修订版)》

背景 Python是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等级考试科目,某些中小学也开设了Python编程课程。本书秉承有趣、有料、好玩…

SpringCloud服务注册与发现组件Eureka(五)

Eureka github 地址: https://github.com/Netflix/eureka Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring…

【Android -- JNI 和 NDK】JNI 基础知识以及如何使用

JNI 基础知识 我们来系统梳理一下JNI中涉及的基本知识。 JNI定义了以下数据类型,这些类型和Java中的数据类型是一致的: Java原始类型:jint, jbyte, jshort, jlong, jfloat, jdouble, jchar, jboolean这些分别对应这 java 的int, byte, shor…

css 包含块

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

微服务springcloud 02 创建项目中的三个service子系统,springcloud中注册中心Eureka介绍和把三个系统注册到Eureka中

item service项目 01.使用springboot创建项目 02.选择依懒项在这里插入代码片 spring web 03.添加sp01-commons依赖 在pom.xml文件中 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" x…

【色度学】光学基础

1. 光的本质 &#xff08;1&#xff09;波长不同的可见光&#xff0c;引起人眼的颜色感觉不同。 &#xff08;2&#xff09;人们观察到的颜色是物体和特有色光相结合的结果&#xff0c;而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色&#xff08;1&#xff0…

NIO 基础

3. 文件编程 non-blocking io 非阻塞 IO 1.1 Channel & Buffer channel 类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入&#…

统信UOS V20 安装mysql5.7.42详细教程

1 安装包准备 到mysql官网可以看到最新的是8.0.33&#xff0c;想下载其他版本的点击 Looking for previous GA versions?Select Operating System: 选择如下版本的mysql 安装包 2 安装 2.1 上传文件至服务器 下载后通过远程将安装包上传至服务器&#xff0c;我这里将安装…

Seesion会话超时时间测试-业务安全测试实操(3)

Seesion会话超时时间测试, Cookie仿冒测试, 密文比对认证测试 本地加密传输测试-业务安全测试实操(2)_luozhonghua2000的博客-CSDN博客 测试原理和方法 在用户成功登录系统获得Session认证会话后,该Session认证会话应具有生命周期,即用户在成功登录系统后,如果在固定时间内…

两个链表相加

描述 假设链表中每一个节点的值都在 0 - 9 之间&#xff0c;那么链表整体就可以代表一个整数。 给定两个这种链表&#xff0c;请生成代表两个整数相加值的结果链表。 数据范围&#xff1a;0≤n,m≤1000000&#xff0c;链表任意值 0≤val≤9 要求&#xff1a;空间复杂度 O(n)…

Triton教程 -- 利用Triton部署你自己的模型

Triton教程—利用Triton部署你自己的模型 给定一个经过训练的模型&#xff0c;我如何使用 Triton 推理服务器以最佳配置大规模部署它&#xff1f; 本文档旨在帮助回答这个问题。 对于那些喜欢高级概述的人&#xff0c;下面是大多数用例的通用流程。 对于那些希望直接进入的人…

Windows Server AD域控服务器升级/迁移(AD域控的五大角色转移)

Windows Server AD域控服务器升级/迁移&#xff08;AD域控的五大角色转移&#xff09; 新域控服务器安装配置域控服务器&#xff0c;加入现有域域控角色迁移到新域控服务器原域控服务器降级退域 本文主要介绍在现有域环境下如何进行域控服务器的迁移/升级操作。对于域结构的网络…

抖音seo矩阵系统源码|需求文档编译说明(一)

抖音seo矩阵系统文章目录技术囊括 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架构文档 短视频矩阵系统源码开发锦囊囊括前言一、短视频账号矩阵系统开发者必备能力语言&…

深度相机介绍

一、什么是深度相机 &#xff08;五&#xff09;深度相机&#xff1a;结构光、TOF、双目相机 - 知乎 传统的RGB彩色普通相机称为2D相机&#xff0c;只能拍摄相机视角内的物体&#xff0c;没有物体到相机的距离信息&#xff0c;只能凭感觉感知物体的远近&#xff0c;没有明确的数…

基于SpringBoot+vue的简历系统设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

seatunnel入门案例,集群模式

目录 安装部署 解压 环境变量 安装plugin 添加资源jar包 SEATUNNEL 配置文件 env&#xff1a;环境设置 source&#xff1a;数据源设置 sink&#xff1a;数据去向设置 transform: 数据转换设置 运行方式 seatunnel 引擎(zeta) 本地模式 集群模式 安装部署 解压 tar…