爬取古诗文网
需求
爬取网页中诗词的数据,爬取每首诗的名字、作者、朝代和诗词的内容
页面分析
爬取页面的诗词,复制任意诗词的内容,在网页源码中可以找到,说明网页是静态加载出来的,说明显示的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) # 测试一下管道是否接收到数据,接收到就能打印