访问古诗文网站(https://so.gushiwen.cn/mingjus/),使用 Scrapy 框架编写爬虫程序,爬取每个名句及其完整古诗内容,并把爬取到的数据保存到文本文件中。
时间: 2024-12-16 09:17:42 浏览: 110
使用Scrapy框架编写爬虫程序来抓取古诗文网站的数据,可以分为以下几个步骤:
1. 安装Scrapy:首先确保已经安装了Python和pip,然后通过命令行运行`pip install scrapy`来安装Scrapy框架。
2. 创建Scrapy项目:打开终端或命令提示符,导航到你想存放项目的目录,然后输入`scrapy startproject gushiwen_spider`创建一个新的Scrapy项目。
3. 设计Spider:在项目中找到并编辑spiders文件夹内的新文件,比如`gushiwen_spider.py`。在此文件中,定义一个新的Spider类,比如命名为`GushiwenSpider`,并设置起始URL(https://so.gushiwen.cn/mingjus/)。
```python
import scrapy
class GushiwenSpider(scrapy.Spider):
name = 'gushiwen'
start_urls = ['https://so.gushiwen.cn/mingjus/']
def parse(self, response):
# 这里会遍历页面中的所有名句链接
for quote in response.css('div.item'):
quote_title = quote.css('a::text').get() # 获取名句标题
poem_url = quote.css('a::attr(href)').get() # 获取名句链接
yield {
'title': quote_title,
'poem_url': poem_url,
}
# 对于每个名句链接,我们需要再次发送请求获取完整的诗内容
yield response.follow(poem_url, self.parse_poem)
def parse_poem(self, response):
poem_content = response.css('div.poetry-content::text').getall() # 获取诗的内容
yield {
'title': response.meta['title'], # 从上一级请求中获取标题
'content': '\n'.join(poem_content), # 合并诗句内容
}
```
4. 数据存储:在`parse_poem`函数内部,使用`yield`关键字返回包含名句标题和内容的字典。Scrapy会自动将其写入CSV或JSON等格式的文件。为了保存到纯文本文件,你需要自定义一个writer,比如使用`open()`函数和`write()`方法:
```python
def parse_poem(self, response):
...
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(f'{response.meta["title"]}\n')
f.write('\n'.join(response.meta['content']))
f.write('\n\n') # 分隔不同的诗
```
5. 运行爬虫:在项目根目录下运行`scrapy crawl gushiwen`启动爬虫,它会开始抓取数据并保存到`output.txt`文件中。
注意:实际操作时,网站的结构可能会有变化,需要根据实际情况调整CSS选择器。同时,频繁的爬取可能需要遵守网站的robots.txt规则,并尊重版权。
阅读全文
相关推荐


















