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

news2024/11/18 19:53:38

目录

  • 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.coloradmin.cn/o/641611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webpack生产模式配置

一、生产模式和开发模式介绍 生成模式(production mode)是指在开发完成后将代码部署到生产环境中运行的模式,通常需要进行代码压缩、优化、合并,以减少文件大小和请求次数,提高页面加载速度和运行效率。 开发模式&am…

Android12 系统开发记录-迅为RK3588使用ADB工具

ADB 英文名叫 Android debug bridge ,是 Android SDK 里面的一个工具,用这个工具可以 操作管理 Android 模拟器或者真实的 Android 设备,主要的功能如下所示:  在 Android 设备上运行 shell 终端,用命令行操作 …

How to fix the NHS 如何改革英国的国民医疗保险制度 | 经济学人20230527版社论双语精翻

他山之石:2023年5月27日《经济学人》社论(Leaders)精选:《如何改革英国的国民医疗保险制度》(“How to fix the NHS”) Leaders | The sick factor 社论 | 致病因素 How to fix the NHS 如何改革英国的国民…

软件安装mysql

1系统约定 安装文件下载目录:/data/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置:/data/mysql日志保存位置:/data/log/mysql 2下载mysql 在官网:MySQL :: Download MySQL Community Server 中&#x…

Guitar Pro8.0.1最新中文版本吉他谱下载及使用教程

许多人都对吉他这个乐器很感兴趣,因为吉他的学习成本较低,学习难度较小,即便是零基础的小白通过短期的学习也能掌握基本的技巧。但实际上,学习吉他还需要认识吉他谱,识谱是每个吉他爱好者都必须掌握的技能,…

数字孪生世界建设核心能力:物理世界感知能力

中国信通院在《数字孪生城市白皮书(2022年)》中指出,数字孪生城市技术集成性高,核心板块日渐清晰,当前已逐步深入到城市全要素表达、业务预警预测、场景仿真推演、态势感知只能决策等多个环节。数字孪生技术的向前发展…

Yum update和upgrade的区别

Yum update和upgrade的区别 Linux yum中package升级命令有两个分别是 yum upgrade 和 yum update 1、区别 默认情况下,yum update和yum upgrade的功能是完全一样的,都是将需要更新的package(这里的包包括常规的包、软件、系统版本、系统内核)更新至软件…

如何使用ArcGIS加载历史影像

历史影像对研究地物的变化可以产生很直观的效果,Esri提供了在线浏览的历史影像,这里给大家介绍一下如何将这个历史影像加载到ArcGIS,希望能对你有所帮助。 获取地图链接 打开地图网站(https://livingatlas.arcgis.com/wayback/&a…

【MySQL】复合查询(重点)

🏠 大家好,我是 兔7 ,一位努力学习C的博主~💬 🍑 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🚀 如有不懂,可以随时向我提问&…

实验篇(7.2) 13. 创建点对点安全隧道 (二)(FortiGate-IPsec) ❀ 远程访问

【简介】上一篇实验发现,两端都是可以远程的公网IP的话,两端防火墙都可以发出连接请求,并且都能够连通。这样的好处是安全隧道不用随时在线,只在有需求时才由发起方进行连接。但是现实中很多情况下只有一端公网IP可以远程&#xf…

番外篇 离线服务器环境配置与安装

(离线远程服务器的Anaconda安装与卸载torch的安装与卸载) 我参考或百度一些博主发的经验贴关于Anaconda的安装与卸载等教程,但实际情况是每一个服务器遇到的问题多多少少总有不一样的地方,虽然可以借鉴,但不能完全照搬…

常见Visual Studio Code 快捷键

一,文件与窗口快捷键: 1.打开一个新窗口: CtrlShiftN 2.关闭窗口: CtrlShiftW 3.文件切换:CtrlTab 4.快速打开文件:CtrlP 5.新建文件: CtrlN 6.切换侧边栏:CtrlB 7.选中单个文…

JWT代码实现

什么是 JWT? JSON Web Token,通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信 息。(将信息进行封装,以 JSON 的形式传递) JWT 有什么用? JWT 最常见的场景就是授权认证,一旦用户…

web3.0 爆红是炒作还是真有赚头?

前言 最近两年虽然疫情肆虐全球,虽然困得住人们的脚步,但是困不住科技的发展趋势,前有元宇宙,后有 web3.0,新的热点一个接着一个的出现,技术革新也是越来越快,之前只能在科幻电影、科幻小说中出…

SIFT算法

文章目录 1. SIFT算法简介1.1 SIFT特征检测步骤1.2 SIFT算法的特点 2. SIFT算法原理2.1 尺度空间2.1.1 多分辨率金字塔2.1.2 高斯金字塔2.1.3 高斯尺度空间(使用不同的参数) 2.2 DoG空间极值检测(查找关键点)2.3 删除不好的极值点…

二、Kafka生产与消费全流程

Kafka生产与消费全流程 Kafka是一款消息中间件,消息中间件本质就是收消息与发消息,所以这节课我们会从一条消息开始生产出发,去了解生产端的运行流程,然后简单的了解一下broker的存储流程,最后这条消息是如何被消费者…

JVM笔记(一)

走进JVM JVM相对于Java应用层的学习难度更大,**开篇推荐掌握的预备知识:**C/C(关键)、微机原理与接口技术、计算机组成原理、操作系统、数据结构与算法、编译原理(不推荐刚学完JavaSE的同学学习),如果没有掌握推荐的一…

javac 无效的目标发行版: xx

一、检查系统JDK版本 java --version 如果不符合&#xff0c;重新配置系统环境。 二、检查IDEA设置 1、项目结构->项目->SDK和语言级别 2、 项目结构->模块->设置每一个模块的语言级别。 3、java编译器&#xff0c;模块预言级别。 三、检查pom文件 <!--Licens…

qt学习——基本使用、对象树、按钮、信号与槽

初识qt **qt****qt命名规范以及相关快捷键的使用****QPushButton****对象树****点击按钮关闭窗口****信号和槽****标准的信号和槽****自定义信号和槽****带参数的自定义信号和槽传参以及函数的二义性问题** qt qt命名规范以及相关快捷键的使用 优点:Qt相对于C&#xff0c;有一…

华为OD机试真题 JavaScript 实现【狼羊过河】【2022Q4 100分】,附详细解题思路

一、题目描述 一农夫带着m只羊&#xff0c;n只狼过河&#xff0c;农夫有一条可载x只狼/羊的船&#xff1b;农夫在时或者羊的数量大于狼时&#xff0c;狼不会攻击羊&#xff1b; 农夫在不损失羊的情况下&#xff0c;运输几次可以完成运输&#xff1f; 返程不计入次数。 二、…