Python爬虫案例一:获取古诗文并按用户输入的作者名进行数据保存

前言:

1、什么是爬虫?也称为网页蜘蛛(Web Spider),通俗来说,解放人的双手, 去互联网获取数据, 以数据库, txt, excel, csv, pdf, 压缩文件, image, video, music保存数据。本质: 模拟浏览器, 向服务器发送网络请求, 接受服务器返回的数据,并保存数据。
2、爬虫的分类?A、通用爬虫(根据目标获取选项): 百度, google, 搜狗 bing ... 搜索引擎B、聚焦爬虫: 根据指定的目标,指定的内容,获取数据, 保存数据
3、网址的构成(了解)例如:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=张三A、协议部分:https / http  -- 超文本传输协议B、域名部分:www.baidu.com -- 【方便人记忆】C、路径部分:一层一层的信息D、参数部分:请求时候, 携带必要参数 -- &符号链接
4、爬虫四部曲:A、准备网址: B、请求网址:  # 注意:请求成功 不一定 拿到数据C、解析数据: D、保存数据: 
5、动态【异步】页面和静态【同步】页面  (数据加载方式)
静态页面----所需信息全部能找到   【同步请求】:发送请求后数据一次性返回过来,数据量小
动态页面---找不到或数据不全      【异步请求】:发送请求后数据没有一次性返回过来

源代码:

链接:https://www.gushiwen.cn/

import requests
from lxml import etree
class Two_Spider(object):def __init__(self):# self.keyword = input('请输入作者:')self.no = 1self.keyword = '白居易'self.start_url = 'https://so.gushiwen.cn/search.aspx?'self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}def confirm_params(self):# 构造请求参数,保存3页for i in range(1, 4):params = {'type': 'author','page': str(i),'value': self.keyword,'valuej': self.keyword[0]}self.request_start_url(params)def request_start_url(self, params):response = requests.get(self.start_url, headers=self.headers, params=params).textself.parse_response(response)def parse_response(self, response):# 解析响应A = etree.HTML(response)div_list = A.xpath('//div[@class="left"]/div[@class="sons"]')for div in div_list:# 标题bt = div.xpath('.//div[@class="cont"]/div[2]/p/a/b/text()')bt = ''.join(bt).strip()# 正文zw = div.xpath('.//div[@class="contson"]//text()')# 简单处理正文zw = ''.join(zw).split('。')# for 行 in zw:#     if '?' in 行:#         前面 = 行.split('?')[0] + '\n'#         后面 = 行.split('?')[1] + '\n'#         zw_list.append(前面)#         zw_list.append(后面)#     elif ')' in 行:#         前面 = 行.split(')')[0] + ')'#         后面 = 行.split(')')[1]#         zw_list.append(前面)#         zw_list.append(后面)#     else:#         zw_list.append(行)# zw_list = [i.strip() for i in zw_list]# zw_list = '\n'.join(zw_list)self.save_Data(bt, zw)def save_Data(self, bt, zw):# 保存数据with open(f'{self.keyword}.txt', 'a+', encoding='utf-8') as f:f.write(f'【第{self.no}首】' + '\n')f.write(f'{bt}' + '\n')f.write(f'{self.keyword}' + '\n')f.write(f'{zw}' + '\n')f.write('\n')f.write('---------------' * 15)f.write('\n')print('ok---第{}首:{}'.format(self.no, bt))self.no += 1def main(self):self.confirm_params()if __name__ == '__main__':tw = Two_Spider()tw.main()

运行效果:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(上)

目录 一.Apache介绍 1.Apache prefork 模型 2.Apache worker 模型 3.Apache event模型 二.Nginx介绍 1.什么是Nginx 2.Nginx 功能介绍 3.Nginx基础特性 4.Nginx 进程结构:web请求处理机制 5.主进程(master process)的功能: 6.工作进程&#x…

k8s基础概念以及部署

kubernetes基础概念 来历 kubernetes以谷歌borg为前身,基于谷歌15年生产环境经验开源的一个项目。k8s是一个开源,的分布式的容器编排技术。 k8s的优势 对比对象 裸容器 例如docker,直接将容器部署在宿主机的方式被称为裸容器。 缺点 纯粹的裸…

使用docker-compose运行kafka及验证(无需zookpeer)

前言:要求安装docker-compose kafka镜像版本:apache/kafka:3.8.0 可能存在镜像拉不下来的情况: 1、vim /etc/docker/daemon.json {"data-root":"/data/docker","registry-mirrors": ["https://docker.m…

【C++二分查找】875. 爱吃香蕉的珂珂

本文涉及的基础知识点 C二分查找 LeetCode875. 爱吃香蕉的珂珂 珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。 珂珂可以决定她吃香蕉的速度 k (单位:根/小时)…

Golang基于DTM的分布式事务SAGA实战

SAGA介绍 SAGA是“长时间事务”运作效率的方法,大致思路是把一个大事务分解为可以交错运行的一系列子事务的集合。原本提出 SAGA 的目的,是为了避免大事务长时间锁定数据库的资源,后来才逐渐发展成将一个分布式环境中的大事务,分…

The Sandbox 新提案: 2024 年亚洲和拉丁美洲区块链活动预算

理事会建议: 积极 🙂 内容 此提案请求为2024年第四季度,The Sandbox 在东南亚和拉丁美洲的主要区块链活动中的激活分配 94,500 美元的 SAND 倡议预算。(具体活动列表见下方活动描述) 原因 区域团队希望在这些现场活…

一文学会本地部署可视化应用JSONCrack并配置公网地址实现远程协作

文章目录 前言1. Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 前言 本文主要介绍如何在Linux环境使用Docker安装数据可视化工具JSONCrack,并结合cpolar内网穿透工具实现团队在…

【二分查找】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 本篇博客我们继续来了解一些有关二分查找算法的进阶题目。 🏠 寻找峰值 📌 题目内容 162. 寻找峰值 - 力扣&#…

【python爬虫】邮政包裹物流查询2瑞数6加密

大家好呀,我是你们的好兄弟【星云牛马】,今天给大家带来的是瑞数6的补环境的总结,补环境肯定是需要一些基础补环境知识的,所以建议没有基础的小伙伴可以加入学习群进行学习,有基础的伙伴加入交流起来。 QQ群&#xff…

用C#写一个随机音乐播放器

form1中namespce里的代码如下 public partial class Form1 : Form {public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string folder textBox1.Text;string folderPath folder; // 指定音频文件所在的文件夹路径OpenRandomFi…

thinkphp5漏洞分析之文件包含

目录 一、环境 二、开始研究 三、漏洞分析 四、漏洞修复 五、攻击总结 一、环境 thinkphp官网下载 创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错) 二、开始研究 创…

后端开发刷题 | 链表内指定区间反转【链表篇】

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4 返回 1→4→3→2→5→NULL 数据范围: 链表…

java使用itext 直接生成pdf

itext 使用 需求背景itext 的使用依赖简单示例基础设置(页面大小、边距、字体等)段落内部,特殊设置关键字 字体或颜色生成动态表格页脚展示页数其他设置密码添加水印(背景图)目录Header, Footer分割 PDF合并 PDF 需求背…

Oracle+ASM+High冗余详解及空间计算

Oracle ASM(Automatic Storage Management)的High冗余模式是一种提供高度数据保护的策略,它通过创建多个数据副本来确保数据的可用性和安全性。 以下是关于Oracle ASM High冗余的详细解释: 一、High冗余的特点 1.数据冗余度 在Hi…

ThreadLocal 详解

文章目录 1.什么是Thradlocal2.Thradlocal常见的API3.什么是内存溢出与内存泄漏内存溢出 (Memory Overflow)内存泄漏 (Memory Leak) 4.强 软 弱 虚引用实现区别5.Threadlocal原理分析set方法get方法 6.Threadlocal产生内存泄漏问题断点查看变化 1.什么是Thradlocal ThreadLoca…

Golang基于DTM的分布式事务TCC实战

Golang基于DTM的分布式事务SAGA实战-CSDN博客 源代码:https://github.com/Ssummer520/dtm-gin 我们可以通过canal来监听转账表的binlog来看数据库变更docker-compose 安装canal-CSDN博客 代码在宿主机运行 docker network:bridge docker安装,安装成功后可以访问h…

python提取b站视频的音频(提供源码

如果我想开一家咖啡厅,那么咖啡厅的音乐可得精挑细选!又假设我非常喜欢o叔,而o叔只在b站弹钢琴,那这时候我就得想方设法把b站的视频转为音频咯! 一、首先打开网页版bilibili,按F12: 二、刷新页面…

力扣爆刷第174天之TOP200五连刷136=140(最小k数、字典序、跳跃游戏)

力扣爆刷第174天之TOP200五连刷136140(最小k数、字典序、跳跃游戏) 文章目录 力扣爆刷第174天之TOP200五连刷136140(最小k数、字典序、跳跃游戏)一、LCR 159. 库存管理 III二、450. 删除二叉搜索树中的节点三、440. 字典序的第K小…

【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)

简介 注意: 在部署spark集群前,请部署好Hadoop集群,jdk8【当然Hadoop集群需要运行在jdk上】,需要注意hadoop,spark的版本,考虑兼容问题。比如hadoop3.0以上的才兼容spark3.0以上的。 下面是Hadoop集群部署…

【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…