【Scrapy 五分钟撸网站】[能源行业新闻]Scrapy实战国家煤炭工业网全站数据抓取

目标网站介绍

国家煤炭工业网 是中国煤炭工业协会唯一门户网站,也是国家政府上网工程中唯一代表煤炭行业的信息网站。网站即时向煤炭企事业单位和社会公众提供煤炭行业权威的各类信息服务。
在这里插入图片描述

开始Scrapy

数据采集准备

1. 不了解5分钟快速抓网站思路的小伙伴先看
【Scrapy 五分钟撸网站】全站数据必备基础知识

2. 不了解数据抓取业务管理整理小伙伴先看
【Scrapy 五分钟撸网站】爬虫目标整理和数据准备

3. 不了解Scrapy模板量产的小伙伴先看(必看)
【Scrapy 五分钟撸网站】数据抓取项目框架通用模板

数据整理结果

1. Excel保存截图
在这里插入图片描述

模板套用

Spider下的<项目>.py文件

1. 创建spider项目

scrapy genspider www_coalchina_org_cn " "

2. 整理全站css样式
先来看下页面的CSS样式,全站统一两种样式。

3. 修改www_cwestc_com.py的的内容

这里将需要修改的地方进行说明,其他地方参考模板,不需修改。

  • 作用域&自定义说明
    allowed_domains = []
    web_name = "国家煤炭工业网"
  • 添加抓取数据信息
    start_menu = [
        # 行业新闻
        [
	        {
    
    "channel_name":"协会动态","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=60",},
			{
    
    "channel_name":"行业动态","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=12",},
			{
    
    "channel_name":"经济运行","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=20",},
			{
    
    "channel_name":"统计信息","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=67",},
			{
    
    "channel_name":"科技进步","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=168",},
			{
    
    "channel_name":"两化融合","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=407",},
			{
    
    "channel_name":"国际合作","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=44",},
			{
    
    "channel_name":"安全生产","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=40",},
			{
    
    "channel_name":"公文下载","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=61",},
			{
    
    "channel_name":"项目建设","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=42",},
			{
    
    "channel_name":"加工利用","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=43",},
			{
    
    "channel_name":"人才培养","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=47",},
			{
    
    "channel_name":"政策法规","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=39",},
			{
    
    "channel_name":"能源经济","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=22",},
			{
    
    "channel_name":"煤机装备","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=45",},
			{
    
    "channel_name":"价格指数","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=25",},
			{
    
    "channel_name":"文化体育","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=46",},
			{
    
    "channel_name":"会员之家","url":"http://www.coalchina.org.cn/index.php?m=content&c=index&a=lists&catid=420",},
        ]
    ]
  • 样式整理

整体网站数据列表有多少种样式就要做多少个parseX,并添加到

        parse_list = [
            self.parse1,  # 行业新闻
        ]
  • 标题&链接&封面
    由于整体网站内容列表没有图片因此不使用Item_thumbImg
    在这里插入图片描述
        # 行业新闻 列表内容抓取
        Item_title = response.xpath('//div[@class="col-right"]/ul/li/a/text()').extract()  # 文章标题列表
        Item_url = response.xpath('//div[@class="col-right"]/ul/li/a/@href').extract()  # 文章链接列表

Spider下的parse_detail.py文件

1. 抓取详情页内容

修改列表数据详情页的CSS抓取样式
在这里插入图片描述

    # 处理详情页带格式,这里整个页面进行抓取
    item['content'] = ""
    if 'class="content"' in response.text and len(None2Str(item['content'])) < 5:
        item['content'] = response.xpath('//div[@class="content"]').extract_first()

2. 特别说明

有些网站的程序员丧心病狂到一定程度10个页面9种样式这种,由于我们不可能每个页面都打开看一下详情页的CSS格式,因此有个通用的解决办法。

  • 第一次抓取完内容之后打开MongoDB数据库执行下面的命令会把包含body的页面数据筛选出来,这些是没有根据指定样式抓取的数据,而是直接抓的全部页面的数据。
db.你的表名.find({content:/body/})

在这里插入图片描述

  • 打开任意的link循环处理详情页的内容直到mongo命令没有筛选出来内容为止即可。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/113740258