欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > Python爬虫案例一:获取古诗文并按用户输入的作者名进行数据保存

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

2024/10/25 10:26:22 来源:https://blog.csdn.net/m0_74614835/article/details/141302175  浏览:    关键词: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()

运行效果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com