Python---爬虫

embedded/2024/9/24 6:28:51/

文章目录

  • 目录

    前言

    一.Http请求/响应模块

    requests模块

     二.文本筛选模块

     re模块

     XPath模块

    XPath 路径表达式

    XPath 语法元素

    三. 爬虫模板

     爬虫案例


前言

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


一.Http请求/响应模块

requests模块

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

常用函数:

请求函数

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

响应函数 

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

 二.文本筛选模块

 re模块

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

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

 XPath模块

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

python">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内容

python">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请求访问需要爬取的网站
python">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路径筛选出图片链接的相对路径

正则: 

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

 XPath路径

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

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

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

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

  •  第四步:创建用于保存爬取图片的文件并保存爬取图片
python">#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()

整体代码演示:

python">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()


 


总结


http://www.ppmy.cn/embedded/112795.html

相关文章

56. 合并区间

思路 对区间进行排序&#xff1a;按每个区间第一个数的大小进行升序排序 排好序后&#xff0c;初始化 dp[0]第一个区间 则下一个区间是否为一个单独区间&#xff0c;只需要看 这个区间的第一个数是否小于等于上一个区间的第二数&#xff0c;小于等于&#xff0c;则在上一个区间…

大数据之Spark(二)

9.4.3、RDD持久化 RDD之间进行相互迭代计算&#xff08;Transformation的转换&#xff09;&#xff0c;当执行开启&#xff0c;新RDD的生成代表旧RDD消失。如果有的rdd需要重复使用就需要将rdd缓存&#xff0c;rdd.cache()或rdd.persist()。清理缓存rdd.unpersist() 缓存特点&…

Linux基础---07文件传输

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…

【网络原理】❤️Tcp 常用机制❤️ —— 延时应答,捎带应答, 面向字节流, 异常情况处理。保姆式详解 , 建议收藏 !!!

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

沉浸式利用自然语言无代码开发工具生成式AI产品应用(下)

背景 小伙伴们过去在开发应用时&#xff0c;经常需要编写大量代码文件以实现业务逻辑&#xff0c;想必肯定有小伙伴开发过类似于快消行业索赔处理、订单库存跟踪和项目审批等系统。去解决这些业务实际问题&#xff0c;我们需要定制地开发业务应用程序为这些问题提供解决方案。…

合宙Air201资产定位模组LuatOS入门课程:FOTA远程升级,点点鼠标就搞定

你是否也经常吐槽&#xff1a;开发是个苦差事&#xff01;做项目一时爽&#xff0c;遇到升级火葬场。 如果你也有这种困惑&#xff0c;可以多了解了解合宙的开发工具&#xff0c;简单实用又高效&#xff0c;甚至只需点点鼠标&#xff01; 本期&#xff0c;我们来学习合宙Air2…

小琳AI课堂:MASS模型——革新自然语言处理的预训练技术

大家好&#xff0c;这里是小琳AI课堂。今天我们来聊聊一个在自然语言处理&#xff08;NLP&#xff09;领域非常热门的话题——MASS模型&#xff0c;全称是Masked Sequence to Sequence Pre-training for Language Generation。这是华为诺亚方舟实验室在2019年提出的一种创新模型…

初中生物--5.单细胞生物

单细胞生物 单细胞生物整个身体只由一个细胞构成&#xff0c;是生物 圈中非常原始&#xff0c;形态微小、结构简单的一类生物。大多数生活在水域或湿润的环境中&#xff0c;也有寄生在 其他生物身体上 例如&#xff1a;大肠杆菌、眼虫、酵母菌、变形虫、衣藻、草履虫 草履虫 …