python项目实战-xPath下载人生格言

news2024/12/31 5:36:50

事先声明一下,仅分享爬虫经验,不会对网站有影响的,也请想要实操的小伙伴不要对网站频繁访问,如有侵权请联系我删除文章

文章目录

  • 代码展示
  • 步骤解析
    • 思路整理
    • 节点树
    • xPath语法
    • 分析网页结构
  • 实战思路
    • 获取源代码
    • 源代码转化成节点树
    • 提取信息
    • 文本处理
    • 写入文件
    • 整理成函数
    • 从目录页获取每个独立页面的链接!

代码展示

import requests![请添加图片描述](https://i-blog.csdnimg.cn/direct/7852a7698e854f0caa1c562aa398dcf0.png)

from lxml import etree

def pachong(url):
    results = requests.get(url=url)
    html = etree.HTML(results.text)
    link = html.xpath('//div[@class="content"]//p/text()')
    wenben = "".join(link)
    listtt = wenben.split()
    print(listtt[0])
    title = listtt[0]
    with open(f'{title}.text','wb') as f:
        for i in listtt:
            f.write((i + '\n\n').encode('utf-8'))
        print(f'已完成……{title}')

url = 'https://www.yjbys.com/lizhi/geyan/'
rt = requests.get(url=url)
html =  etree.HTML(rt.text)
lianjie = html.xpath('//div[@class="newlist"]//dt//a/@href')
for link in lianjie:
    pachong(link)

上面就是实现对一个网站某些内容的板块的爬取

步骤解析

  1. 访问人生格言目录页面
  2. 获取各种分支格言的链接
  3. 按照链接批次访问格言详细页面
  4. 提取格言内容
  5. 把格言保存到本地文件中

思路整理

首先是点开一个网站,确定我们想要爬取的内容
请添加图片描述

这里我们想要得到的是框起来的内容

然后看这段内容是在源代码里面还是包里面,如果是源代码那就简单多了使用xPath语法把这些内容摘出来就可以了,如果是在包里面,就需要使用其他的方法

请添加图片描述

很明显,这些信息都是包含在源代码里面

节点树

一般而言,这个网站的源代码的结构跟一个树相似,有html这个根,还有各种分支,也就是head和body等等

这个结构一般是对称的,比如上面这个页面中,<p></p>由p节点开始,再由p节点结束

xPath语法

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()❤️]选取最前面的两个属于bookstore 元素的子元素的book元素
//title[@lang]选取所有拥有名为lang 的属性的 title 元素。
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为eng的lang 属性
/bookstore/book[price>35.00]选取 bookstore元素的所有book元素,且其中的price 元素的值须大于35.00。
/bookstore/book[price>35.00]/title选取bookstore元素中的book元素的所有title 元素,且其中的 price 元素的值须大于 35.00。

这个语法是拆分信息的重点

分析网页结构

在刚刚上面那个图片中,第一个框里面,就是一个节点,属性是class=“content”

所以我们要在源代码中查找一个叫div的节点,属性是class=“content”

用xPath语法就是//div[@class=“content”]

找到这个节点之后,还要他下面的所有p节点,很明显在网页上的一段话都是相互分开的,由很多个p节点

这一步用xPath语法就是//div[@class=“content”]//p

找到每一个p节点之后,还要里面的文本部分

这一步用xPath语法就是//div[@class=“content”]//p/text()

实战思路

获取源代码

使用requests模块

点击网页中任意一个包,发现是get请求

经过测试发现不需要请求头就可以获取数据,只需要一个链接,就可以得到源代码了,非常容易

再打印一下返回值,检查是不是200

再转换成text格式

源代码转化成节点树

这里我们用到了lxml库里面的etree模块

from lxml import etree

需要提取安装lxml库

html =  etree.HTML(rt.text)

这一步就是把text格式源代码转换成节点树

提取信息

对节点树提取信息

link = html.xpath('//div[@class="content"]//p/text()')

打印link检查是不是那些文本,得到了文本之后就是对文本进行处理

文本处理

这些文本还需要用join进行格式处理

这时候已经是一个个独立的文本了,再进行列表化使用split函数

请添加图片描述

写入文件

然后就是获取这篇文章的标题作为文件名,开始创建文件,这里就是列表的第0位元素

接着就是使用for循环把元素依次写入文件

url = 'https://www.yjbys.com/lizhi/geyan/315372.html'
rt = requests.get(url=url)
# print(rt.text)  # 查看源代码
html =  etree.HTML(rt.text)  # 把源代码导入节点树
content = html.xpath('//div[@class="content"]//p/text()')  # 从任意未知查找属性为class="content"的节点 在该节点所有是p节点的文本部分拿出来
wenben = "".join(content)  # 这部分是把文本部分转换成join的格式
print(wenben.split())  # 把文本转成列表格式
listtt = wenben.split()
print(listtt[0]) # 把每一句话都当成列表的一个元素,再逐个写入文件
title = listtt[0]
with open(f'{title}.text','wb') as f:
    for i in listtt:
        # 将行转换为字节并写入文件
        f.write((i + '\n\n').encode('utf-8'))
        print(f'已完成……{title}')

这个代码实现了对一个页面进行爬取

整理成函数

把上面这个单文件操作改成一个函数

发现只需要一个链接就可以获取信息,我们也只需要给一个链接

请添加图片描述

从目录页获取每个独立页面的链接!

发现每个链接都是在节点div属性是class="newlist"下面的所有dt节点的a节点的href属性

用xPath语法就是//div[@class=“newlist”]//dt//a/@href

这里的链接有很多,我们还是把他看成列表,再次使用for循环,把获取到的链接给上面的函数

在成功下载文件后给自己一个提示,就可以在项目文件夹中看到爬取的信息了

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

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

相关文章

新手必备!百度思维导图在内四款必备工具分享

作为一名资料员&#xff0c;每天都要处理大量的信息和数据&#xff0c;思维导图对我来说简直就是救星。它帮我理清思路&#xff0c;把复杂的信息条理化&#xff0c;让我能更高效地完成工作。今天&#xff0c;我就来跟大家分享一下我用过的几款思维导图工具&#xff1a;福昕思维…

java项目之基于保密信息学科平台系统源码(springboot+vue+mysql)

项目简介 基于保密信息学科平台系统实现了以下功能&#xff1a; 基于保密信息学科平台系统的主要使用者管理员有个人中心&#xff0c;用户管理&#xff0c;教师管理&#xff0c;学科概况管理&#xff0c;人才培养管理&#xff0c;学科动态管理&#xff0c;学科资源管理&#…

2本书让你轻松入门大模型!《大模型入门:技术原理与实战应用》+《自然语言处理:大模型理论与实践》

随着大模型技术的不断完善和普及&#xff0c;我们将进入一个由数据驱动、智能辅助的全新工作模式和生活模式。个人和企业将能够利用大模型来降本增效&#xff0c;并创造全新的用户体验。 人工智能是人类探索未来的重要领域之一&#xff0c;以GPT为代表的大模型应用一经推出在短…

信息系统与计算技术国际学术会议

第十二届信息系统与计算技术国际会议&#xff08;ISCTech 2024&#xff09;将于2024年11月8日-11月11日在中国西安盛大举行&#xff0c;由长沙理工大学主办&#xff0c;同济大学、西北工业大学联合协办。 会议聚焦信息系统与计算技术等相关研究领域&#xff0c;广泛邀请国内外…

JavaGuide(3)

一、项目背景与简介 JavaGuide由GitHub用户Snailclimb开发并维护&#xff0c;是一个全面而深入的Java学习资源库。它旨在为Java初学者和有经验的开发者提供一个系统的学习路径和丰富的资源&#xff0c;帮助他们系统地学习和巩固Java及相关技术知识。 二、项目内容与特点 Jav…

【HTML】defer 和 async 属性在 script 标签中分别有什么作用?

需要这两个属性的原因&#xff1f; 首先我们要知道的是&#xff0c;浏览器在解析 HTML 的过程中&#xff0c;遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建&#xff0c;首先去下载 js 代码&#xff0c;并且执行 js 的脚本&#xff1b;只有在等到 js 脚本执行…

try、catch、finally、return执行顺序超详解析与throw与throws区别

try、catch、finally、return执行顺序超详解析&#xff08;针对面试题&#xff09; 有关try、catch、finally和return执行顺序的题目在面试题中可谓是频频出现。总结一下此类问题几种情况。 写在前面 不管try中是否出现异常&#xff0c;finally块中的代码都会执行&#xff1b…

IPguard与Ping32敏感内容防护能力对比,两款知名防泄密软件对比

在信息安全的新时代&#xff0c;企业面临着日益严重的敏感内容泄露风险。为了保障数据安全&#xff0c;选择合适的防护工具至关重要。IPguard与Ping32作为市场上两款知名的终端管理解决方案&#xff0c;各自具备独特的敏感内容防护能力。本文将对这两者进行深入对比&#xff0c…

kubeadm 搭建k8s 1.28.2版本集群

kubeadm 搭建k8s 1.28.2版本集群 1、kubuadm介绍&#xff1a; kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具&#xff0c;这个工具能通过两条指令完成一个kubernetes 集群的部署&#xff1a; 创建一个Master 节点kubeadm init将Node 节点加入到当前集群中…

minio集群部署

最近接触到minio&#xff0c; 将本地集群部署&#xff0c;分别在ubuntu、centos stream9上进行了搭建&#xff0c;目前看里面的小坑不小&#xff0c;记录以下教程&#xff0c;以备忘、以供他人借鉴。 #### 准备 1、因新版本的minio要求&#xff0c;集群部署必须使用挂载非 roo…

Java基础:字符串详解

1 深入解读String类源码 1.1 String类的声明 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence { }String类是final的&#xff0c;意味着它不能被子类继承&#xff1b;String 类实现了Serializable接口&#xff0c;意味着…

没人告诉你的职场人情世故

看到前同事在群里分享的新年开工遭遇&#xff0c;真是让人感同身受。 第一天就遇到挫折&#xff0c;因为工作做得太快、太早交付&#xff0c;结果反被领导批评&#xff0c;还得重做&#xff0c;头大如斗。这不就提醒我们得时时刻刻记着职场里的那些不成文的规矩吗&#xff1f;…

Hunuan-DiT代码阅读

一 整体架构 该模型是以SD为基础的文生图模型&#xff0c;具体扩散模型原理参考https://zhouyifan.net/2023/07/07/20230330-diffusion-model/&#xff0c;代码地址https://github.com/Tencent/HunyuanDiT&#xff0c;这里介绍 Full-parameter Training 二 输入数据处理 这里…

一、Spring入门

文章目录 1. 课程内容介绍2. Spring5 框架概述3. Spring5 入门案例 1. 课程内容介绍 2. Spring5 框架概述 3. Spring5 入门案例

Java反射专题

目录 一.反射机制 1.Java Reflection 2.反射相关的主要类 3.反射的优缺点 4.反射调用优化—关闭访问检查 二.Class类 1.基本介绍 2.常用方法 3.获取Class对象的方式 4.那些类型有Class对象 三.类加载 1.介绍 2.类加载时机 3.类加载各阶段 四.获取类结构的信息 1…

25.第二阶段x86游戏实战2-背包属性补充

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

机器学习项目——运用机器学习洞察青年消费趋势

1. 项目背景 在21世纪的第三个十年&#xff0c;全球经济和技术的飞速发展正深刻影响着各个领域&#xff0c;尤其是青年消费市场。随着数字化进程的加速&#xff0c;尤其是移动互联网的广泛普及&#xff0c;青年的消费行为和生活方式发生了前所未有的转变。 然而&#xff0c;面对…

开源版GPT-4o来了!互腾讯引领风潮,开源VITA多模态大模型,开启自然人机交互新纪元[文末领福利]

目录 总览 VITA 模型的详细介绍 2.1 LLM 指令微调 2.2 多模态对齐 2.2.1 视觉模态 2.3 音频模态 多模态指令微调 3.1 训练数据 3.1.1 训练过程 模型部署&#xff1a;双工策略 4.1 非唤醒交互 4.2 音频中断交互 评估 5.1 语言表现 5.2 音频表现 5.3 多模态表现 …

离散微分几何中的网格(Meshes)

https://zhuanlan.zhihu.com/p/893338073 一、引言 ![](https://img-blog.csdnimg.cn/img_convert/c5e06e652822e0003cf6be91d26436b7.png) 在离散微分几何的广袤领域中&#xff0c;网格&#xff08;Meshes&#xff09;作为一个核心概念&#xff0c;犹如一座桥梁&#xff0c;…

小灰:从0到年入100万+,从程序员到自由职业者他经历了什么?

这是开发者说的第20期&#xff0c;这次给大家带来的畅销书《漫画算法》作者、自媒体创作者程序员小灰。 小灰做自媒体的时间已经有8年了&#xff0c;目前在全网有60w粉丝&#xff0c;同时《漫画算法》系列和《漫画ChatGPT》的书籍&#xff0c;在全网卖了12万册&#xff0c;靠写…