python爬虫(二十一)scrapy案例--爬取古诗文网

爬取古诗文网

需求

爬取网页中诗词的数据,爬取每首诗的名字、作者、朝代和诗词的内容

页面分析

爬取页面的诗词,复制任意诗词的内容,在网页源码中可以找到,说明网页是静态加载出来的,说明显示的url就是爬取的目标,可以直接用url获取数据。目标url:https://www.gushiwen.cn/。
任意选择一首诗词的标题,点右键检查,会发现标题的内容存放在p标签下的a标签内。
在这里插入图片描述
标签折叠到p标签内,可以看到第一个p标签里存放的是诗词的标题,第二个p标签存放的是作者和朝代,下面的div标签里存放的是诗词的内容。
在这里插入图片描述
继续往上折叠标签,我们会发现,每一首的诗词都存放在div[@class=“sons”]的标签里,而所有的诗词内容都存放在div[@class=“left”]的标签里
在这里插入图片描述
翻到页面底部,发现需要进行翻页操作,点击下一页找到url,试着把后面的2改为1,可以进入第一页的界面。
https://www.gushiwen.cn/default_2.aspx 第二页
https://www.gushiwen.cn/default_1.aspx 第一页
也可以通过下面的输入数字进行跳转页面,两种方法都可以
https://www.gushiwen.cn/default.aspx?page=2 第二页
https://www.gushiwen.cn/default.aspx?page=1 第一页

代码实现

1.创建scrapy项目

我这里pycham的项目目录在D盘,进入cmd,输入cd回车,输入D:回车,把路径切换到D盘,把项目的目录复制进去回车就进入到了项目文件目录下。输入scrapy startproject +项目名称,创建完成后 输入cd + 项目名称 进入项目内部,输入 scrapy genspider + 爬虫文件名 + 网站域名,创建爬虫文件。

2.进行文件的配置

settings.py
LOG_LEVEL = 'WARNING'
BOT_NAME = 'prose'

SPIDER_MODULES = ['prose.spiders']
NEWSPIDER_MODULE = 'prose.spiders'
ROBOTSTXT_OBEY = False
DEFAULT_REQUEST_HEADERS = {
   
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62'
}
ITEM_PIPELINES = {
   
   'prose.pipelines.ProsePipeline': 300,
}

如果要使用另一个py文件中的变量、方法可以通过导入类的方式导入到使用的py文件中
方法一:直接导。默认pycharm打开的目录为根目录,一级一级的导入。from day22.mySpider.mySpider.items import MyspiderItem
方法二:自己设定根目录。在需要设定根目录的文件夹处点右键,Mark Directory as —> Sources Root,导入的时候 用import 文件夹名 就可以了,如 from mySpider.items import MyspiderItem
在这里插入图片描述
右键点击下一页,发现下一页在a标签内,里面href的值是下一个url的地址,我们可以通过href的属性值来实现翻页处理
在这里插入图片描述

3.其他运行文件

启动程序

start.py
from scrapy import cmdline

# cmdline.execute(['scrapy', 'crawl', 'gsw'])  # 方法一
cmdline.execute('scrapy crawl gsw'.split(" "))  # 方法二

管道文件

pipelines.py
import json

class ProsePipeline:
    # 第一种方法:
    # def process_item(self, item, spider):
        # # print(item)  # 测试一下管道是否接收到数据,接收到就能打印
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值