我最喜欢的一首词——王安石的《桂枝香·金陵怀古》

桂枝香·金陵怀古【王安石】

登临送目,
○○●▲
正故国晚秋,
●●●⊙○
天气初肃。
⊙⊙○▲
千里澄江似练,
⊙●○○⊙●
翠峰如簇。
●○○▲
征帆去棹残阳里,
⊙○⊙●○○●
背西风,
●○○
酒旗斜矗。
⊙○○▲
彩舟云淡,
●○○○●
星河鹭起,
⊙○⊙●
画图难足。
●○○▲

念往昔豪华竞逐,
●⊙●○○●▲
叹门外楼头,
●⊙●○○
悲恨相续。
⊙⊙○▲
千古凭高对此,
⊙●○○⊙●
漫嗟荣辱。
●○○▲
六朝旧事随流水,
⊙○⊙●○○●
但寒烟、
●○○
衰草凝绿。
⊙⊙○▲
至今商女,
●○○●
时时犹唱,
⊙○⊙●
后庭遗曲。
●○○▲

(○平声 ●仄声 ⊙可平可仄 △平韵 ▲仄韵)

<think> 我们使用Scrapy框架来实现这个需求。根据引用[1],我们已经有一个定义好的Item类(PoemItem),包含category, title, author, article, note字段。 但注意,用户提供的items.py文件中note字段注释为“译文注解”,而用户需求中只需要收集诗、内容和作者(即title, author, article),但是category(分类)也是需要的。 用户需求:收集每个分类下的诗(标题)、诗内容和作者,并保存到一个文件中。 步骤: 1. 创建Scrapy项目(如果尚未创建)。 2. 在items.py中定义Item(已经存在,如引用[1]所示,但我们可以根据需求调整,去掉不需要的note字段,但考虑到引用[1]已经定义,我们可以保留并只使用需要的字段)。 3. 编写Spider来解析网https://gushici365.com/gushi/wanyue_17.html。 4. 从网中提取每个分类下的诗信息(标题、作者、内容),同时记录分类名称。 5. 将提取的数据保存到文件(如JSON、CSV等)。 分析目标网: 打开网https://gushici365.com/gushi/wanyue_17.html,可以看到有多个分类,例如“写景”、“咏物”等。每个分类下有多个诗。 网结构: - 分类标题:例如<h2>写景</h2> - 每个分类下有一个<ul class="list">,里面的每个<li>对应一首诗。 - 每首诗的信息在<li>中,包含标题(在<a>标签内)、作者(在<span class="author">内)、内容(在<div class="content">内)。 由于一个面有多个分类,我们需要按分类来提取诗。 思路: 1. 首先找到所有的分类区块。观察发现,每个分类区块是一个<div class="w470 fl">,里面包含一个<h2>和一个<ul>。 2. 遍历这些区块,提取分类名称(h2标签的文本)。 3. 在每个区块中,遍历<ul>下的所有<li>,提取每首诗的标题、作者和内容。 注意:有些分类可能被分割成多个区块?但当前面观察只有一个区块。但为了通用性,我们按照每个<div class="w470 fl">来提取。 编写Spider: 创建spider的命令(假设项目已创建): scrapy genspider gushi365 gushici365.com 然后修改gushi365.py。 代码实现: 首先,在items.py中,我们使用已有的PoemItem,但我们可以去掉note字段(如果不需要的话)。不过,用户引用中已经包含了note,但需求没有提到,我们可以不提取note,也不保存。 下面编写spider: </think> 我将指导你使用Python的Scrapy框架收集网数据。根据引用[1]的Item结构,以下是完整解决方案: ### 解决方案步骤 1. **创建Scrapy项目**(若未创建): ```bash scrapy startproject gushi365 cd gushi365 ``` 2. **修改items.py**(使用引用[1]的结构): ```python import scrapy class PoemItem(scrapy.Item): category = scrapy.Field() # 分类 title = scrapy.Field() # 标题 author = scrapy.Field() # 作者 content = scrapy.Field() # 内容(修改自原article字段) ``` 3. **创建爬虫文件gushi_spider.py**: ```python import scrapy from gushi365.items import PoemItem class GushiSpider(scrapy.Spider): name = 'gushi' start_urls = ['https://gushici365.com/gushi/wanyue_17.html'] def parse(self, response): # 提取所有分类区块 categories = response.css('div.w470.fl') for cat in categories: category_name = cat.css('h2::text').get().strip() poems = cat.css('ul.list > li') for poem in poems: item = PoemItem() item['category'] = category_name item['title'] = poem.css('a::text').get().strip() item['author'] = poem.css('span.author::text').get().replace('·', '').strip() item['content'] = ''.join(poem.css('div.content::text').getall()).strip() yield item ``` 4. **配置数据存储(pipelines.py)**: ```python import json class JsonWriterPipeline: def open_spider(self, spider): self.file = open('poems.json', 'w', encoding='utf-8') self.file.write('[') def close_spider(self, spider): self.file.write(']') self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item), ensure_ascii=False) + ",\n" self.file.write(line) return item ``` 5. **启用管道(settings.py)**: ```python ITEM_PIPELINES = { 'gushi365.pipelines.JsonWriterPipeline': 300, } ``` 6. **运行爬虫**: ```bash scrapy crawl gushi ``` ### 关键代码说明 1. **选择器逻辑**: - 分类区块:`div.w470.fl` - 分类名称:`h2::text` - 诗条目:`ul.list > li` - 标题:`a::text` - 作者:`span.author::text`(清理·符号) - 内容:拼接所有`div.content::text` 2. **数据存储**: - 生成UTF-8编码的JSON文件 - 每首诗保存为JSON对象 - 输出文件:`poems.json` ### 输出示例 ```json [ { "category": "写景", "title": "江南春", "author": "杜牧", "content": "千里莺啼绿映红,水村山郭酒旗风。..." }, { "category": "咏物", "title": "梅花", "author": "王安石", "content": "墙角数枝梅,凌寒独自开。..." } ] ``` ### 扩展优化建议 1. 增加翻处理(观察分规则) 2. 添加去重机制(避免重复诗) 3. 实现增量爬取(通过记录已爬URL) 4. 添加请求延迟(遵守robots.txt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值