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

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

时间:2024-08-24 15:21:58浏览次数:13  
标签:Python self list 爬虫 bt params 古诗文 div zw

前言:

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 = 1
        self.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).text
        self.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 += 1

    def main(self):
        self.confirm_params()

if __name__ == '__main__':
    tw = Two_Spider()
    tw.main()

运行效果:

标签:Python,self,list,爬虫,bt,params,古诗文,div,zw
From: https://blog.csdn.net/m0_74614835/article/details/141302175

相关文章

  • LeetCode-Python-1650. 二叉树的最近公共祖先 III
    给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA)。每个节点都包含其父节点的引用(指针)。Node 的定义如下:classNode{publicintval;publicNodeleft;publicNoderight;publicNodeparent;}根据维基百科中对最近公共祖先节点......
  • MAC 查看是否安装 Python
    在Mac上查看是否安装了Python以及安装的版本,你可以通过终端(Terminal)来执行一些简单的命令。以下是几种常用的方法:方法1:使用python或python3命令打开终端(Terminal)。输入python--version或python3--version(取决于你的系统配置和Python的安装方式),然后回车。如果系统返......
  • 基于python+flask框架的鞋子购物系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和电子商务的普及,线上购物已成为人们日常生活中不可或缺的一部分。鞋类作为时尚与舒适并重的消费品,其市场需求持......
  • 基于python+flask框架的假期托管服务管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会节奏的加快和家庭结构的变化,双职工家庭及单亲家庭对于儿童假期托管的需求日益增长。传统的家庭照看模式已难以满足现代家庭对于孩......
  • Python 教程(三):Python运算符合集
    Python中常用的一些运算符类型算术运算符+:加法-:减法*:乘法/:除法(结果为浮点数)%:取模(即除法余数)**:幂(指数)//:整除(结果为商的整数部分)示例代码: a=10b=3print("加法:",a+b)#输出13print("减法:",a-b)#输出7print("乘法:",a*b)#输出3......
  • 基于python+flask框架的同城跑腿平台(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,人们对于即时服务的需求日益增长,尤其是在同城范围内,从紧急文件传递、代购商品到代取快递等,各种即时需求层出不穷。然......
  • 基于python+flask框架的奶茶连锁管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着奶茶市场的蓬勃发展,奶茶连锁品牌日益增多,市场竞争也愈发激烈。为了在竞争中脱颖而出,奶茶连锁企业不仅需要不断创新产品、提升口感,更需......
  • 快速入门:使用Python构建学生成绩管理应用
    前言诸位观众,本学期我有幸学习了Python编程课程。随着课程的结束,授课教师布置了一项任务,要求我们开发一个学生信息管理系统。基于老师的要求,我个人独立完成了这项任务。今天,我希望将这个简易的程序分享给大家,主要面向刚开始接触Python的新学者,希望它能助你们一臂之力。在这个......
  • 字符串包含了不需要的双引号,导致读取成json文件失败?Python怎么批量修改?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python数据处理的问题。问题如下:大佬们请教下这个问题,数据为下载的html文件,写法已经固定,解析成json文件会报错,这种字符串包含了不需要的双引号,导致读取成json文件失败?怎么批量修改?用......
  • 【python教程】打包和发布自己的项目,让别人去pip
    @目录1.环境搭建1.1换源1.2安装wheel1.3安装twine1.4注册PyPI账号2.编写setup.py2.1项目文件树2.2编写setup.py文件3.构建4.上传ERROR:Theuser'XXX'isn'tallowedtouploadtoproject''2024.1.19更新:1.环境搭建1.1换源在pip安装时使用-i参数,可以指定源。以下有许......