当前位置: 首页 > news >正文

Python---爬虫

文章目录

  • 目录

    前言

    一.Http请求/响应模块

    requests模块

     二.文本筛选模块

     re模块

     XPath模块

    XPath 路径表达式

    XPath 语法元素

    三. 爬虫模板

     爬虫案例


前言

Python爬虫是一种通过自动化程序爬取互联网上的信息的技术。爬虫可以自动访问网页并提取所需的数据,比如网站的文本、图片、视频等。Python是一种简单易学的编程语言,广泛用于开发爬虫程序。


一.Http请求/响应模块

requests模块

requests模块可以用于发送GET、POST、PUT、DELETE等各种类型的HTTP请求,并且可以处理URL参数、请求头、响应内容等。

常用函数:

请求函数

  • 发送GET请求,并返回一个Response对象
requests.get(url)
  • 发送POST请求,并返回一个Response对象
requests.post(url)

响应函数 

  • 获取响应的文本内容
response.text
  •  以字节(bytes)形式获取响应体的内容
response.content
  •  获取Http响应的状态码
response.status_code
  •  获取Http响应的头部信息
response.headers
  •  获取响应的JSON格式数据
response.json()

 二.文本筛选模块

 re模块

re模块是Python中的正则表达式模块,它提供了对字符串进行模式匹配和替换的功能。

  • 返回字符串中所有与正则表达式匹配的非重叠模式的列表。
re.findall(pattern, string)

 XPath模块

Python中的XPath模块是一个用于解析和操作XML文档的库。它可以通过使用XPath表达式来查找和选择XML文档中的节点,以便提取所需的数据。

html.xpath("XPath路径")

XPath 路径表达式

XPath 表达式的基本语法是从一个根元素开始,然后沿着树向下选择元素、属性或文本。表达式可以是绝对路径或相对路径。

  • 绝对路径:从根元素开始的路径。例如,/root/child 表示选择根元素 root 下的 child 元素。
  • 相对路径:从当前节点开始的路径。例如,child/grandchild 表示选择当前 child 元素下的 grandchild 元素。

XPath 语法元素

  • 节点名称:选择具有特定名称的节点。
  • /:作为路径分隔符,表示从根节点或当前节点开始选择。
  • //:选择文档中的节点,不考虑它们的位置。
  • *:匹配任何元素节点。
  • @:用于选择属性。
  • []:用于指定条件。
  • .:表示当前节点。
  • ..:表示当前节点的父节点

 演示案例:

<bookstore>  <book>  <title lang="en">Harry Potter</title>  <author>J K. Rowling</author>  <year>2005</year>  <price>29.99</price>  </book>  <book>  <title lang="en">Learning XML</title>  <author>Erik T. Ray</author>  <year>2003</year>  <price>39.95</price>  </book>  
</bookstore>

示例 1: 选择所有 book 元素 

/bookstore/book

示例 2: 选择所有 title 元素 

//title

示例 3: 选择第一个 book 元素的 title 

/bookstore/book[1]/title

示例 4: 选择所有 title 元素,且这些元素的 lang 属性值为 en 

//title[@lang='en']

三. 爬虫模板

第一步:安装必要的库如:requests库

 第二步:在爬取站点页面右键检查,查找User-Agent内容,如下图

第三步:使用requests库向目标网页发送请求,并获取网页的HTML内容

import requests  header = {"User-Agent":"..."} 填入请求报文中User-Agent内容
url = 'http://example.com'  
response = requests.get(url,headers=header)   
response.encoding = 'utf-8'   如果有需要,设置正确的编码  
html_content = response.text  获取响应文本内容

 爬虫案例

下面通过爬取站点​​​​​​ https://pic.netbian.com/的图片做一个演示。

  • 第一步:发送Http请求访问需要爬取的网站
import re
import requests
import os
header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36 Edg/128.0.0.0"}
response = requests.get("https://pic.netbian.com/",headers=header)
#防止乱码对response返回数据进行解码
response.encoding = response.apparent_encoding
print(response.text)

  •  第二步:利用正则表达式/XPath路径筛选出图片链接的相对路径

正则: 

#利用正则表达式匹配以字符串 /uploads/allimg/ 开头,后面跟着一个或多个非双引号(")字符的序列
#此处findall函数会找出所有以/uploads/allimg/开头的图片链接的相对路径
image = re.findall("/uploads/allimg/[^\"]+",response.text)

 XPath路径

html = etree.HTML(response.text)
image = html.xpath('//a[@target="_blank"]/span/img/@src')

  • 第三步: 创建图片链接的绝对路径

如下图,不难发现第二步获取的图片链接与图片源中的链接还有差别,此时需要我们将获取的相对链接扩展为绝对链接

#image获取的是图片链接的相对路径,绝对路径需要添加https://pic.netbian.com/
#创建空列表link用于存储图片链接的绝对路径
link = []
#利用for循将图片链接的绝对路径添加到空列表link中
for i in image:link.append("https://pic.netbian.com/"+i)

  •  第四步:创建用于保存爬取图片的文件并保存爬取图片
#for循环每次遍历一个图片链接
for i in range(1,len(link)+1):#遍历的同时创建一个保存图片的文件with open(f"爬虫/image{i}.jpg.","wb") as img:#向图片链接发送Http请求res = requests.get(link[i - 1])#将返回的字节数据写入文件img.write(res.content)img.close()

整体代码演示:

import re
import requests
import os
header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36 Edg/128.0.0.0"}
response = requests.get("https://pic.netbian.com/",headers=header)
response.encoding = response.apparent_encodingimage = re.findall("/uploads/allimg/[^\"]+",response.text)
link = []
for i in image:link.append("https://pic.netbian.com/"+i)for i in range(1,len(link)+1):with open(f"爬虫/image{i}.jpg.","wb") as img:res = requests.get(link[i - 1])img.write(res.content)img.close()


 


总结

相关文章:

Python---爬虫

文章目录 目录 前言 一.Http请求/响应模块 requests模块 二.文本筛选模块 re模块 XPath模块 XPath 路径表达式 XPath 语法元素 三. 爬虫模板 爬虫案例 前言 Python爬虫是一种通过自动化程序爬取互联网上的信息的技术。爬虫可以自动访问网页并提取所需的数据&#xff0c;比…...

设计模式之组合设计模式

一、组合设计模式概念 组合模式 (Component) 是一种结构型设计模式&#xff0c;将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有唯一性。 适用场景 想要表示对象的部分-整体层次结构。想要客户端忽略组合对象与单个对象的…...

Java汽车销售管理

技术架构&#xff1a; springboot mybatis Mysql5.7 vue2 npm node 有需要该项目的小伙伴可以添加我Q&#xff1a;598748873&#xff0c;备注&#xff1a;CSDN 功能描述&#xff1a; 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能&…...

js TypeError: Cannot read property ‘initialize’ of undefined

js TypeError: Cannot read property ‘initialize’ of undefined 在JavaScript开发旅程中&#xff0c;遇到TypeError: Cannot read property ‘initialize’ of undefined这样的错误提示&#xff0c;无疑是令人沮丧的。这个错误通常意味着你试图访问一个未定义对象的initiali…...

【Motion Forecasting】【摘要阅读】BANet: Motion Forecasting with Boundary Aware Network

BANet: Motion Forecasting with Boundary Aware Network 这项工作发布于2022年&#xff0c;作者团队来自于OPPO。这项工作一直被放在arxiv上&#xff0c;并没有被正式发表&#xff0c;所提出的方法BANet在2022年达到了Argoverse 2 test dataset上的SOTA水准。 Method BANet…...

Cpp快速入门语法(下)(2)

文章目录 前言一、函数重载概念与使用C为何支持函数重载&#xff1f; 二、引用概念语法特性权限(常引用)使用场景与指针的区别 三、内联函数四、auto关键字(C11)五、基于范围的for循环(C11)六、指针空值nullptr(C11)总结 前言 承前启后&#xff0c;正文开始&#xff01; 一、函…...

【GO开发】MacOS上搭建GO的基础环境-Hello World

文章目录 一、引言二、安装Go语言三、配置环境变量&#xff08;可跳过&#xff09;四、Hello World五、总结 一、引言 Go语言&#xff08;Golang&#xff09;因其简洁、高效、并发性强等特点&#xff0c;受到了越来越多开发者的喜爱。本文将带你一步步在Mac操作系统上搭建Go语…...

探索轻量级语言模型 GPT-4O-mini 的无限可能

随着人工智能技术的日益发展&#xff0c;语言模型正逐渐成为人们日常生活和工作中不可或缺的一部分。其中&#xff0c;GPT-4O-mini 作为一个轻量级大模型&#xff0c;以其强大的功能和易用性吸引了众多关注。本文将带您了解 GPT-4O-mini 的出色表现、应用场景以及如何免费使用这…...

CSS 笔记 1

1. CSS 优先级&#xff0c; 内部大于外部。 2. 几个属性&#xff1a; flex-grow: 1; 让 当前元素 在剩余空间中&#xff0c; 占据尽可能多的高度&#xff0c;确保它能在中间居中。 max-height: 300px; 限制最大高度 300 像素&#xff0c; flex-grow: 1; 导致占的太满了&#x…...

2024/9/16 dataloader、tensorboard、transform

一、pytorch两大法宝元素 假设有一个名为pytorch的包 dir()&#xff1a;用于打开包&#xff0c;看里面的内容 help():用于查看具体的内容的用处 二、python文件&#xff0c;python控制台和jupyter的使用对比 三、pytorch读取数据 pytorch读取数据主要涉及到两个类&#xff1…...

C/C++语言基础--从C到C++的不同(下),15个部分说明C与C++的不同

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 1-10在上篇C/C语言基础–从C到C的不同(上&#xff09;&#xff1b;当然C和C的不同还有很多&#xff0c;本人暂时只总结这些&#xff0c;其他的慢慢更新&#xff1b;上一篇C/C语言基础–从C到C的不同(上&…...

物理感知扩散的 3D 分子生成模型 - PIDiff 评测

PIDiff 是一个针对蛋白质口袋特异性的、物理感知扩散的 3D 分子生成模型&#xff0c;通过考虑蛋白质-配体结合的物理化学原理来生成分子&#xff0c;在原理上&#xff0c;生成的分子可以实现蛋白-小分子的自由能最小。 一、背景介绍 PIDiff 来源于延世大学计算机科学系的 Sang…...

蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)

目录 一、页面切换内容详解 1.逻辑解释 2.代码详解 code.c&#xff08;内含详细讲解&#xff09; code.h main.c 3.效果图片展示 ​编辑 二、页面选项高亮内容详解 1.逻辑解释 2.读入数据 FIRST.第一种高亮类型 code.c&#xff08;内含代码详解&#xff09; code.…...

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图 Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验 绘图堆积条形图分组条形图 分类模型Logistic回归随机森林 import matplo…...

【3D打印】3D打印机运动控制“Gcode”

一、Gcode是什么&#xff1f; Gcode是一种用于控制数控机床&#xff08;包括3D打印机&#xff09;的语言。它由一系列指令组成&#xff0c;每个指令控制机器的一个特定动作。 二、基础术语 G指令&#xff1a;用于控制机器的运动。M指令&#xff1a;用于控制机器的其他功能&a…...

针对Chsrc换源工具的简单脚本

此脚本目前只是针对 X86和aarch64系统&#xff0c;可根据自身需求进行修改&#xff0c;点赞自取 关于工具的详细介绍请看上一篇文章&#xff1a;全平台通用的换源工具Chsrc #!/bin/bashtag1"https://gitee.com/RubyMetric/chsrc/releases/download/pre/chsrc-x64-linux&…...

vscode中如何配置c/c++环境

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;一、准备工作二、安装 VSCode 插件三、配置 VSCode1. 配置编译任务&#xff08;tasks.json&#xff09;2. 配置调试器&#xff08;launch.json&#xff09; 四、运行和调…...

【梯度消失|梯度爆炸】Vanishing Gradient|Exploding Gradient——为什么我的卷积神经网络会不好呢?

【梯度消失|梯度爆炸】Vanishing Gradient|Exploding Gradient——为什么我的卷积神经网络会不好呢&#xff1f; 【梯度消失|梯度爆炸】Vanishing Gradient|Exploding Gradient——为什么我的卷积神经网络会不好呢&#xff1f; 文章目录 【梯度消失|梯度爆炸】Vanishing Gradi…...

MAC 地址简化概念(有线 MAC 地址、无线 MAC 地址、MAC 地址的随机化)

一、MAC 地址 MAC 地址&#xff08;Media Access Control Address&#xff09;&#xff0c;即媒体访问控制地址&#xff0c;也称为物理地址、硬件地址或链路层地址 MAC 地址有时也被称为物理地址&#xff0c;但这并不意味着 MAC 地址属于网络体系结构中的物理层&#xff0c;它…...

SQL_yog安装和使用演示--mysql三层结构

目录 1.什么是SQL_yog 2.下载安装 3.页面介绍 3.1链接主机 3.2创建数据库 3.3建表操作 3.4向表里面填内容 3.5使用指令查看效果 4.连接mysql的指令 4.1前提条件 4.2链接指令 ​编辑 4.3创建时的说明 4.4查看是不是连接成功 5.mysql的三层结构 1.什么是SQL_yog 我…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...