一、需求

爬取网址:https://www.gushiwen.org/

需求:

(1)获取侧边栏【类型】信息;
(2)获取每个类型中古诗文详情页信息;
(3)提取详情页数据:古诗文名、作者、朝代、类型、内容、译文及注释;
(4)将数据保存到 csv 文件;

二、代码实现

import requests
import csv
from lxml import etreestart_url = "https://so.gushiwen.cn/shiwen/"
base_url = "https://so.gushiwen.cn"headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}items = []def parse_url(url):"""解析url,得到响应内容"""# time.sleep(random.random())response = requests.get(url=url, headers=headers)return response.content.decode("utf-8")def parse_html(html):"""使用xpath解析html,返回xpath对象"""etree_obj = etree.HTML(html)return etree_objdef get_first_type():"""获取所有的一级类型"""first_type_list = []html = parse_url(start_url)etree_obj = parse_html(html)first_type_name_list = etree_obj.xpath('(//a[contains(@href,"/gushi/")]|//a[contains(@href,"/wenyan/")])/text()')first_type_url_list = etree_obj.xpath('(//a[contains(@href,"/gushi/")]|//a[contains(@href,"/wenyan/")])/@href')data_zip = zip(first_type_name_list, first_type_url_list)for data in data_zip:first_type = {}first_type["name"] = data[0]first_type["url"] = data[1]first_type_list.append(first_type)return first_type_listdef get_data(first_type):"""查询数据"""#一级类型urlurl = base_url + first_type["url"]first_type_name = first_type["name"]#向一级类型url发送请求获取二级类型数据html = parse_url(url)etree_obj = parse_html(html)div_list = etree_obj.xpath('//div[@class="typecont"]')#二级类型类型数据divfor div in div_list:#二级类型名称second_type_name = div.xpath(".//strong/text()")if second_type_name:  # 有的没有二级类型second_type_name = second_type_name[0]else:second_type_name = ""#二级类型下诗词的名称和urlpoetry_name_list = div.xpath(".//span/a/text()")poetry_url_list = div.xpath(".//span/a/@href")data_zip = zip(poetry_name_list,poetry_url_list)for data in data_zip:#item是一个诗词数据item = {}item["first_type_name"] = first_type_nameitem["second_type_name"] = second_type_nameitem["poetry_name"] = data[0]#诗词urlpoetry_url = base_url+data[1]html = parse_url(poetry_url)etree_obj = parse_html(html)#诗词作者poetry_author = etree_obj.xpath('//p[@class="source"]')[0].xpath(".//text()")item["poetry_author"] = "".join(poetry_author).strip()#诗词内容poetry_content = etree_obj.xpath('//*[@id="contson45c396367f59"]/text()')item["poetry_content"] = "".join(poetry_content).strip()#诗词译文和注释if etree_obj.xpath('//div[@class="contyishang"]'):#有的没有注释poetry_explain = etree_obj.xpath('//div[@class="contyishang"]')[0].xpath(".//text()")item["poetry_explain"] = "".join(poetry_explain).strip()else:item["poetry_explain"] = ""print(item)#保存save(item)def save(item):"""将数据保存到csv中"""with open("./古诗词.csv", "a", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(item.values())def start():first_type_list = get_first_type()for first_type in first_type_list:get_data(first_type)if __name__ == '__main__':start()

三、运行结果


保存数据:

Python爬取古诗词相关推荐

  1. Python爬取古诗词写入Neo4j

    最近准备自己动手做一个诗词智能问答的工具,首先爬取古诗词,以作者.合称.朝代.分类.诗词标题为节点,以作者live_in朝代,作者write诗词,诗词belong分类为关系,创建知识图谱.代码如下: ...

  2. python爬虫爬取古诗词实例补充讲解之获取注释和译文

    对这个网站的具体每首诗,如果想获取它的注释和译文,要怎么实现. 比如: https://so.gushiwen.org/shiwenv_30a67e5c53be.aspx 这首诗,直接进去后,注释和译 ...

  3. python输出古诗词_python爬虫——爬取古诗词

    一. 概要 1.通过python爬虫循环爬取古诗词网站唐诗宋词 2.落地到本地数据库 二. 页面分析 首先通过firedebug进行页面定位: 其次源码定位: 最终生成lxml etree定位div标 ...

  4. python爬虫——爬取古诗词

    一:需求 1.通过python爬虫循环爬取古诗词网站唐诗宋词 2.保存爬下来的诗词与url 二:效果截图 三:代码实现 import requests from lxml import etree i ...

  5. python爬虫爬取古诗词内容,并存入mysql

    python爬虫爬取古诗词内容,并存入mysql 爬取结果展示: 代码如下: from urllib import request import re,os import pymysql import ...

  6. 使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站

    使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站 本次测试案例参考厦门大学数据库实验室 链接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建 ...

  7. python爬取三国演义文本,统计三国演义中出场次数前30的人物,并生成词云、图表

    目录 1.目标 2.码前须知 3.操作流程 4.完整代码 5.总结 1.目标 python爬取三国演义,生成词云.图表 2.码前须知 项目目标:三国人物名称及出现次数-----数据统计分析 提出问题: ...

  8. python爬取唐诗300首的诗名和对应的诗人存为Excel

    今天,又为了生活而奔波,干了一天的苦力.测试通话是否正常,耳朵都快测废了,明天还有一天.虽然深度学习没有精力搞不了,但是不编程是不可能的,这辈子都不可能不编程.编个爬虫顺便跟大家分享一波python爬 ...

  9. python爬取电影评分_用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

最新文章

  1. R语言获得所有Aesthetics(美学映射)参数:使用长表输出、使用宽表输出
  2. SQLserver 中时间减,并把结果转换成varchar类型,拼接上字符串
  3. 【Python3_基础系列_009】Python3-条件语句-If
  4. Python画散点图(Knn中数据)
  5. Java编程的逻辑 (36) - 泛型 (中) - 解析通配符
  6. c++实现时间轴,时间管理器
  7. ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?
  8. Spring写第一个程序HelloSpring
  9. leetcode第一刷_Unique Binary Search Trees
  10. bzoj1043 下落的圆盘
  11. 条件语句的if语句的5种替代方法
  12. NX1957在VS2019上二次开发的环境配置
  13. mac 桌面显示服务器,隐藏 Mac 桌面内容的三种方法 | 一日一技 · Mac
  14. POJ原题测试数据合集+使用方法
  15. 【U8】固定资产模块卡片管理栏目设置中没有“凭证号”栏目
  16. python线程isalive_如何在线程类上使用.isAlive()
  17. 移动端手机网页适配iPad与折叠屏设备
  18. RAVDESS语音情感分类数据集的介绍
  19. 透过万科看房地产信息化
  20. 51单片机程序加密c语言,51单片机24C04密码锁(C程序+Proteus仿真)

热门文章

  1. Android实现网络图片app
  2. MQTT学习笔记——Yeelink MQTT服务 使用mqtt.js和paho-mqtt
  3. Tesseract-OCR 图片数字识别的样本训练
  4. unity鼠标固定在屏幕中间_unity3D技术之屏幕内跟随鼠标移动
  5. [20190718]12c rman新特性 表恢复.txt
  6. Agarose bound-WFA,WFL;琼脂糖结合紫藤凝集素(WFA,WFL)
  7. 安卓:点击空白处隐藏软键盘
  8. 2008¸ß¿¼×÷ÎĸãЦ¼¯
  9. 测试oschina
  10. 关键词提取——有监督方法