Python爬虫| 一文掌握XPath

news2024/11/15 10:07:02

本文概要

本篇文章主要介绍利用Python爬虫爬取付费文章,适合练习爬虫基础同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧!
在这里插入图片描述

🌟🌟🌟个人简介🌟🌟🌟

☀️大家好!我是新人小白博主朦胧的雨梦,希望大家多多关照和支持😝😝😝
🌖大家一起努力,共同成长,相信我们都会遇到更好的自己👊👊👊
🌗期待我的文章能给各位带来收获和解决问题的灵感🤩🤩🤩
🌟大家的三连是我不断更新的动力~😘😘😘

在这里插入图片描述

目录

  • 本文概要
  • 🌟🌟🌟个人简介🌟🌟🌟
  • 本次爬虫思路
  • 本次操练网页
  • 学习目标🏆
  • ✨一.爬虫模板
    • 🌲1.urllib库的使用模板
    • 🌲2.requests库的使用模板
  • ✨二.分析信息接口
  • ✨三.通过请求拿到响应
  • ✨四. 提取信息
    • 🌲1.正则表达式
    • 🌲2.XPath
    • 🌲 3.漂亮的汤(BeautifulSoup)<本次不使用>
  • ✨五.保存内容
  • ✨六.总结(附完整代码)
    • 🌲完整代码
  • 💫往期好文推荐

本次爬虫思路

最最重要的是分析信息接口!!!
1. 获取url
2. 通过请求拿到响应
3. 处理反爬
4. 提取信息
5. 保存内容

本次操练网页

    https://www.duanmeiwen.com/xinshang/3203373.html(某美文网)在这里插入图片描述
网页内容:
在这里插入图片描述

学习目标🏆

  1.掌握爬虫布置模板;

  2.掌握反爬手段;

  3.了解如何提取保存内容。

✨一.爬虫模板

🌲1.urllib库的使用模板

import urllib.request     
url ='xxxxxxxxxxxx'   
#发送请求                
 request= urllib.request.Request(url,data,header)      
 #得到响应
 response=urllib.request.urlopen(request)
 #解码
 content = response.read().decode() 
 #查看数据
 print(content)    

🌲2.requests库的使用模板

import requests   
url ='xxxxxxxxxxxx' 
#发送请求                              
response = request.get(url, params,headers)  (get请求或者post请求)  
#根据响应的格式解码,非常智能
response.encoding=response.appareent_encoding
 #查看数据
 print(response.txt)

✨二.分析信息接口

  1.首先右键查看网页源代码

在这里插入图片描述
  很明显,爬取的信息就在源代码里,所以直接对网页链接发起请求。这里请求头伪装我们优先携带user-agent

✨三.通过请求拿到响应

import requests

# 需要请求的url
url = 'https://www.duanmeiwen.com/xinshang/3203373.html'

# 伪装请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

# 获得响应
response = requests.get(url=url, headers=headers)

# 智能解码
response.encoding = response.apparent_encoding
# 打印数据
print(response.text)

在这里插入图片描述
在这里插入图片描述
真轻松,这种网页就是最好的,把东西都放在你面前,拿吧拿吧我很大方!

✨四. 提取信息

针对返回数据的特点,我们现在有三种方法:

🌲1.正则表达式

  正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。简单来说,利用一定的逻辑公式,过滤掉不需要的数据,主要处理字符串。对于本题来说有点杀鸡用牛刀了。简单来示范一下:
首先导入re模块

import re

接下来开始操作这堆"字符串"
  re.compile()是用来优化正则的,它将正则表达式转化为对象,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式,多次调用一个正则表达式就重复利用这个正则对象,可以实现更有效率的匹配。需要搭配finditer()等一起使用,参数pattern : 正则表达式;,flags : 表示匹配模式。

在这里插入图片描述

  右键点击检查进入Network页面,主要是方便我们看清楚结构。
在这里插入图片描述

效果
在这里插入图片描述
  这里写的比较粗糙,因为大家会发现我们会大量在重复写一个相同的筛选语句,所以就有那么一点机械重复的感觉,而且我们有专门对付这中HTML结构的工具,所以接下来咱们隆重介绍XPath!

🌲2.XPath

  XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。我们只要简单理解为它主要是针对定位HTML中某部分位置的语言。
首先导入XPath

from lxml import etree

接下来开始操作
在这里插入图片描述

效果
在这里插入图片描述

这就是优雅,对比上面,我们用三行代码就完成了任务,由此可见,用对方法很重要。

🌲 3.漂亮的汤(BeautifulSoup)<本次不使用>

✨五.保存内容

  这里就很简单,基础文件操作的知识,“行百里者半九十”,来吧,咱们直接一口气写完。

tree = etree.HTML(response.text)
titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()')
message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()')
for i in range(len(message)):
    with open('优美文艺句子.txt', 'a', encoding='utf-8') as fp:
        fp.write(message[i])
        fp.write('\n')
print('文章爬取完成')

效果
在这里插入图片描述

✨六.总结(附完整代码)

  通过今天的小案例,我们明白了,第一,思路一定要清楚,快准狠分析出接口链接,第二,提取数据的方法要正确,这样会直接事半功倍,好了,今天就分享到这里,谢谢大家的观看,有什么想法记得评论区告诉我!拜拜~✨ ✨ ✨

🌲完整代码

import requests
from lxml import etree

# 需要请求的url
url = 'https://www.duanmeiwen.com/xinshang/3203373.html'

# 伪装请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

# 获得响应
response = requests.get(url=url, headers=headers)

# 智能解码
response.encoding = response.apparent_encoding

# 提取数据
tree = etree.HTML(response.text)
titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()')
message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()')

#遍历保存数据
for i in range(len(message)):
    with open('优美文艺句子.txt', 'a', encoding='utf-8') as fp:
        fp.write(message[i])
        fp.write('\n')
print('文章爬取完成')

💫往期好文推荐

  TOP🥇.自动驾驶技术未来大有可为❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥈.Python爬虫 | 利用python爬虫获取想要搜索的数据(某du)❤️❤️❤️🏆🏆🏆❤️❤️❤️

  TOP🥉.ChatGPT | 一文详解ChatGPT(学习必备)❤️❤️❤️🏆🏆🏆❤️❤️❤️

在这里插入图片描述

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

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

相关文章

公司来了个00后,我愿称之为卷王之王,卷的让人崩溃...

前几天我们公司一下子来了几个新人&#xff0c;看样子好像都是一些00后&#xff0c;这些年轻人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算下班走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好提前走。 2023年春招已经过去了&#xff0…

网络安全前景怎么样?怎么自学?看这一篇就够了

一、网络安全前景 网络安全行业细分岗位比较多&#xff0c;目前需求量比较大的几类网络安全岗位有渗透测试、安全运维、等保测评等&#xff0c;在岗位需求量和薪资待遇方面都比较可观。 这时很多人就会问&#xff0c;网络安全人才需求量这么大&#xff0c;进入行业的人就会越来…

【redis】案例--迷你版微信抢红包

系列文章目录 文章目录 系列文章目录前言在这里插入图片描述 一、业务描述二、需求分析三、架构设计关键点拆红包算法 二倍均值算法 图解 四、编码实现 RedPackageController整体思路&#xff1a;发红包代码进入拆分红包算法抢红包代码 五、多学一手 前言 一、业务描述 二、需求…

鲁棒优化入门(四)——超详细讲解:两阶段鲁棒优化以及列与约束生成算法(CCG)的matlab+yalmip代码实现

本文的主要参考文献&#xff1a; Zeng B , Zhao L . Solving Two-stage Robust Optimization Problems by A Constraint-and-Column Generation Method[J]. Operations Research Letters, 2013, 41(5):457-461. 1.两阶段鲁棒优化问题的引入 鲁棒优化是应对数据不确定性的一种优…

从零玩转设计模式之单例模式-danlimos

title: 从零玩转设计模式之单例模式 date: 2022-12-12 12:41:03.604 updated: 2022-12-23 15:35:29.0 url: https://www.yby6.com/archives/danlimos categories: - 单例模式 - 设计模式 tags: - Java模式 - 单例模式 - 设计模式 前言 单例设计模式是23种设计模式中最常用的设…

面试题背麻了,花3个月面过华为测开岗,拿个26K不过分吧?

计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在一家初创…

基于 ZYNQ 的电能质量系统高速数据采集系统设计

随着电网中非线性负荷用户的不断增加 &#xff0c; 电能质量问题日益严重 。 高精度数据采集系统能够为电能质 量分析提供准确的数据支持 &#xff0c; 是解决电能质量问题的关键依据 。 通过对比现有高速采集系统的设计方案 &#xff0c; 主 控电路多以 ARM 微控制器搭配…

抖音seo排名系统/账号矩阵源码关键词开发部署

抖音seo排名系统/账号矩阵源码关键词开发技术 如何提高 抖音 搜索排名&#xff1f;如何优化抖音搜索排名&#xff1f; 部分代码分析&#xff1a;场景&#xff1a;创建一个Tree()函数来实现以下特性&#xff0c;当我们需要时&#xff0c;所有中间对象 branch1、branch2 和 bra…

Mysql常见的索引模型

目录 有序数组哈希表二叉搜索树B-TreeBTree 有序数组 我们指定一个列为索引&#xff0c;然后按照这个列的值排序&#xff0c;以有序数据存放入数据表中&#xff0c;如下所示 这样&#xff0c;我们在查找数据的时候&#xff0c;就可以通过id这个列&#xff0c;在数据表中进行二…

阿里 P8 整理的《百亿级并发系统设计》实战手册,实在是太香了

面试官问&#xff1a;如何设计一个高并发系统&#xff1f; 说实话&#xff0c;如果面试官问你这个题目&#xff0c;那么你必须要使出全身吃奶劲了。为啥&#xff1f;因为你没看到现在很多公司招聘的 JD 里都是说啥有高并发经验者优先。 如果你确实有真才实学&#xff0c;在互…

9-《数据结构》

[TOC](9-《数据结构》 一、数组1.稀疏数组 二、链表三、队列四、栈五、树5.1 完全二叉树5.2 满二叉树&#xff1a;深度为k且有2^k-1个结点的二叉树称为满二叉树**5.3 二叉排序树&#xff08;二叉搜索树、二叉查找树&#xff09;5.4 平衡二叉树&#xff1a;5.5 红黑树 六、堆七、…

文件夹加密码的方法有哪些?文件夹加密方法盘点

在我们使用电脑的过程中&#xff0c;我们会将一些重要的数据放入文件夹内进行统一管理&#xff0c;为了保护数据安全&#xff0c;文件夹加密码通常是一个不错的选择。那么文件夹该怎么加密码呢&#xff1f;电脑文件夹加密码的方法有哪些呢&#xff1f; 文件夹加密码方法 首先…

opencv读取图片

opencv是一款非常强大的图像处理库&#xff0c;可以用来进行图像的处理。opencv库提供了丰富的工具&#xff0c;比如图像缩放&#xff0c;旋转&#xff0c;倾斜校正&#xff0c;自动对齐等等&#xff0c;使用这些工具可以很方便的进行图像的处理。那么你知道 opencv怎么读取图片…

Java学习笔记-04

目录 静态成员 mian方法 多态 抽象类 接口 内部类 成员内部类 静态内部类 方法内部类 匿名内部类 静态成员 static关键字可以修饰成员方法&#xff0c;成员变量被static修饰的成员&#xff0c;成员变量就变成了静态变量&#xff0c;成员方法就变成了静态方法static修…

Java流程控制(一)

⭐ 控制语句⭐ 条件判断结构(选择结构)⭐ switch 语句 做任何事情事情都要遵循一定的原则&#xff0c;毕竟不以规矩&#xff0c;不成方圆&#xff0c;例如&#xff0c;到图书馆去借书&#xff0c;就必须要有借书证&#xff0c;并且借书证不能过期&#xff0c;这两个条件缺一不可…

【新星计划回顾】第二篇学习计划-通过定义变量简单批量模拟数据

&#x1f3c6;&#x1f3c6;又到周末&#xff0c;最近这段时间非常忙&#xff0c;虽然导师首次参与新星计划活动已经在4月16日圆满结束&#xff0c;早想腾出时间来好好整理活动期间分享的知识点。 &#x1f3c6;&#x1f3c6;非常感谢大家的支持和活动期间的文章输出&#xff0…

软件测试基础(V模型W模型)

软件测试基础 1. 软件测试的生命周期 需求分析&#xff1a;站在用户的角度查看需求逻辑是否正确&#xff0c;是否符合用户的需求和行为习惯。站在开发的角度思考需求是否可以实现&#xff0c;或者说实现起来难度高不高测试计划&#xff1a;指定测试计划&#xff08;包括不限于…

Linux用户和组管理

1、用户和组简介 Linux 是多用户多任务操作系统。换句话说&#xff0c;Linux 系统支持多个用户在同一时间内登陆&#xff0c;不同用户可以执行不同的任务&#xff0c;并且互不影响。不同用户具有不问的权限&#xff0c;毎个用户在权限允许的范围内完成不同的任务。 用户组是具…

进攻即是最好的防御!19个练习黑客技术的在线网站

前言 进攻即是最好的防御&#xff0c;这句话同样适用于信息安全的世界。这里罗列了19个合法的来练习黑客技术的网站&#xff0c;不管你是一名开发人员、安全工程师、代码审计师、渗透测试人员&#xff0c;通过不断的练习才能让你成为一个优秀安全研究人员。以下网站希望能给各…

智能排班系统 【技术选型与工具版本】

技术架构图 前端工具及环境 名称版本介绍NodeJS16.13.2开源、跨平台的 JavaScript 运行时环境Npm8.1.2npm包管理工具可以快速引入别人开发好的工具包进行使用Webpack4.0.0打包工具Vue2.6.14Vue 的核心库只关注视图层&#xff0c;易于上手&#xff0c;便于与第三方库或既有项目…