本博客通过采用两种方式来爬取阳光平台,第一种方式是 Scrapy Spider 方式爬取, 第二种是Scrapy CrawlSpider爬取。相比于第一种,第二种更加简洁方便。
通过比较可以突出Scrapy CrawlSpider 适用于在主页中寻找下一页的URL地址或者内容的URL地址上

1 Scrapy Spider 爬取阳光平台

前面步骤(如创建爬虫项目、setting、pipeline、item等的设置)将不在赘述,可以参考之前的博文。下面的文件主要是爬虫逻辑的搭建的代码展示。

import scrapy
from yangguang.yangguan.items import YangguanItem
'''
需求:
爬取阳光平台上的:
事件标题(title),事件链接(href),事件内容(content)
'''
class DemoSpider(scrapy.Spider):name = 'demo'allowed_domains = ['wz.sun0769.com']start_urls = ['http://wz.sun0769.com/political/index/politicsNewest?id=1']def parse(self, response):li_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for li in li_list:item = YangguanItem() # 初始化item['title'] = li.xpath('./span[3]/a/text()').extract_first()  # 标题item['href'] ='http://wz.sun0769.com/' + li.xpath('./span[3]/a/@href').extract_first() # 详情页地址yield scrapy.Request(url=item['href'],callback=self.parse_detail,meta={'item':item})# 获取下一页next_url = 'http://wz.sun0769.com/' + response.xpath("//div[@class='mr-three paging-box']/a[2]/@href").extract_first()if next_url is not None:yield scrapy.Request(url=next_url,callback=self.parse)def parse_detail(self,response):item = response.meta.get('item')item['content'] = response.xpath('/html/body/div[3]/div[2]/div[2]/div[2]/pre/text()').extract_first()yield item


评价:很大⼀部分时间和代码在寻找下一页的URL地址或者内容的URL地址上,是否可以简洁一点呢? 可以通过 Scrapy CrawlSpider 实现
思路:
1.从response中提取所有的li标签对应的URL地址
2.⾃动的构造⾃⼰resquests请求,发送给引擎

2 Scrapy CrawlSpider

2.1 基本介绍

生成crawlspider的命令:
scrapy genspider -t crawl 爬虫名字 域名


2.1.1 LinkExtractors链接提取器

使用LinkExtractors可以不用程序员自己提取想要的url,然后发送请求。这些工作都可以交给LinkExtractors,他会在所有爬的页面中找到满足规则的url,实现自动的爬取。

class scrapy.linkextractors.LinkExtractor(allow = (),deny = (),allow_domains = (),deny_domains = (),deny_extensions = None,restrict_xpaths = (),tags = ('a','area'),attrs = ('href'),canonicalize = True,unique = True,process_value = None)'''
主要参数讲解:
allow:允许的url。所有满⾜这个正则表达式的url都会被提取。
deny:禁⽌的url。所有满⾜这个正则表达式的url都不会被提取。
allow_domains:允许的域名。只有在这个⾥⾯指定的域名的url才会被提取。
deny_domains:禁⽌的域名。所有在这个⾥⾯指定的域名的url都不被提取。
restrict_xpaths:严格的xpath。和allow共同过滤链接。
'''

2.1.2 Rule规则类

定义爬虫的规则类。

class scrapy.spiders.Rule(link_extractor,callback = None,cb_kwargs = None,follow = None,process_links = None,process_request = None
)
'''
主要参数讲解:
● link_ extractor: 一个LinkExtractor对象, 用于定义爬取规则。
● callback: 满足这个规则的url,应该要执行哪个回调函数。因为CrawlSpider使用了parse作为回调函数,因此不要覆盖parse作为回调函数自己的回调函数。
● follow: 指定根据该规则从response中提取的链接是否需要跟进。
● process_ links: 从link_ extractor中获取到链接后会传递给这个函数,用来过滤不需要爬取的链接。
'''

2.2 Scrapy CrawlSpider 爬取阳光平台

这里还是只展示爬虫文件的代码,其他操作同于之前

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
'''
1.创建CrawlSpider 创建方式 scrapy genspider -t crawl 爬虫的名字 域名
2.CrawlSpider 需要定义回调函数的时候最好找个函数名字不要以parse命名
3.Rule对象 什么时候你要follow callback的实现方式'''class CygSpider(CrawlSpider):name = 'cyg'allowed_domains = ['wz.sun0769.com']start_urls = ['http://wz.sun0769.com/political/index/politicsNewest?id=1']# 定义提取url地址的规则rules = (# LinkExtractor 链接提取器 需要提取的url地址# callback 提取Url地址的response会交给回调函数处理# follow=True 就是请求连续不断新的url地址# 列表页Rule(LinkExtractor(allow=r'http://wz.sun0769.com/political/index/politicsNewest\?id=\d+'),follow=True), # 问号前加转义斜杠,避免误会# 详情页Rule(LinkExtractor(allow=r'http://wz.sun0769.com/political/politics/index\?id=\d+'), callback='parse_item'), # 问号前加转义斜杠,避免误会)def parse_item(self, response):item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()# 详情页的数据item['content'] = response.xpath("//div[@class='details-box']/pre/text()").extract_first()print(item)return item

3 爬取小程序名字

仍然是只显示爬虫文件代码

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from WechatAPPSpider.items import WechatappspiderItem'''
提取微信小程序的程序名字、程序作者、程序日期
思路:在主页面中查找小程序的详情页,在详情页查询并获取名字
'''
class WxappSpider(CrawlSpider):name = 'wxapp'allowed_domains = ['wxapp-union.com']start_urls = ['http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1']# 列表页面# http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=3# http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=4# 详情页面# http://www.wxapp-union.com/article-6101-1.html# http://www.wxapp-union.com/article-6102-1.htmlrules = (# 列表页面Rule(LinkExtractor(allow=r'http://www.wxapp-union.com/portal.php\?mod=list&catid=2&page=\d+'),follow=True),# 详情页面Rule(LinkExtractor(allow=r'http://www.wxapp-union.com/article-\d+-1.html'), callback='parse_item'),)def parse_item(self, response):# item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()item = WechatappspiderItem()item['title'] = response.xpath("//h1[@class='ph']/text()").extract_first()item['author'] = response.xpath("//p[@class='authors']/a/text()").extract_first()item['pub_data'] = response.xpath("//p[@class='authors']/span/text()").extract_first()yield itemreturn item

python爬虫之Scrapy CrawlSpider说明——以阳光平台为例相关推荐

  1. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  2. 阅读《精通Python爬虫框架Scrapy》

    精通Python爬虫框架Scrapy 精通Python爬虫框架Scrapy 2018年2月的书,居然代码用的是Python2 环境使用的是Vagrant,但是由于国内网络的问题,安装的太慢了. 书里内 ...

  3. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  4. python 爬虫实例-Python 爬虫:Scrapy 实例(二)

    原标题:Python 爬虫:Scrapy 实例(二) 稍微增加点难度,做个所需项目多一点的,并将的结果以多种形式保存起来.我们就从网络天气预报开始. 首先要做的是确定网络天气数据的来源.打开百度,搜索 ...

  5. 精通python爬虫框架-精通Python爬虫从Scrapy到移动应用(文末福利)

    原标题:精通Python爬虫从Scrapy到移动应用(文末福利) 我能够听到人们的尖叫声:"Appery.io是什么,一个手机应用的专用平台,它和Scrapy有什么关系?"那么,眼 ...

  6. python常用命令汇总-Python爬虫框架Scrapy常用命令总结

    本文实例讲述了Python爬虫框架Scrapy常用命令.分享给大家供大家参考,具体如下: 在Scrapy中,工具命令分为两种,一种为全局命令,一种为项目命令. 全局命令不需要依靠Scrapy项目就可以 ...

  7. 精通python爬虫框架-精通Python爬虫框架Scrapy.pdf

    作 者 :(美)迪米特里奥斯·考奇斯·劳卡斯(Dimitrios Kouzis Loukas)著:李斌译 出版发行 : 北京:人民邮电出版社 , 2018.02 ISBN号 :978-7-115-47 ...

  8. python数据分析案例2-1:Python练习-Python爬虫框架Scrapy入门与实践

    本文建立在学习完大壮老师视频Python最火爬虫框架Scrapy入门与实践,自己一步一步操作后做一个记录(建议跟我一样的新手都一步一步进行操作). 主要介绍: 1.scrapy框架简介.数据在框架内如 ...

  9. python爬虫之Scrapy介绍八——Scrapy-分布式(以爬取京东读书为示例)

    Scrapy-分布式(scrapy-redis)介绍 1 Scrapy-分布式介绍 1.1 Scrapy-redis工作原理 1.2 Scrapy-redis 安装和基本使用 1.2.1 安装 1.2 ...

  10. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

最新文章

  1. 迁移学习之VGG16和VGG19
  2. vue脚手架项目技术集合
  3. 人工智能算法_人工智能的灵魂——算法
  4. 平面最接近点对问题(分治)
  5. java 指令级别理解i++和++i
  6. 开源的恶果,程序员正在「自掘坟墓」
  7. nacos使用_使用Nacos的CMDB实现微服务的就近访问!
  8. D3中数据与DOM element绑定之data() enter() exit()浅析
  9. centos6 查看SELinux状态 关闭SELinux
  10. layui php ajax分页,layui+thinkphp5.1实现分页(非动态表格)
  11. [转]什么是lib文件,lib和dll的关系如何
  12. 彻底搞懂 python 中文乱码问题
  13. o2o电商模式的创业机会有哪些?
  14. java 数字排列组合
  15. 自己动手编译最新Android源码及SDK
  16. SimpleBGC三轴云台用户手册
  17. android 4.4 获取图片主色调,Android Lollipop:使用Palette抽取图片主色调
  18. 【动态规划】有后效性 DP
  19. iphone浏览器Safari中的数字被识别为电话号码
  20. 推荐一个非常不错得网站——精品视频网

热门文章

  1. 初次打开QQ空间后IE卡死问题处理
  2. 2021中国山地自行车哪个品牌好全球十大顶级自行车品牌排行榜
  3. 文本挖掘与matlab,文本挖掘与数据挖掘:发现差异
  4. 我的世界服务器存档的文件夹,我的世界存档在哪个文件夹
  5. ERP实施顾问职业所具备的知识和能力结构的几个建议
  6. 2021厦大计算机考研炸了,厦门大学2021年硕士研究生复试名单
  7. 阿里云MVP精选2018年终盘点:大咖专访+最佳实践,丰富干货等你来!
  8. vue下载二进制流图片
  9. 季冠2022年会 | 我们乘风而去 必将破浪而归
  10. python版植物大战僵尸源码_『原创』植物大战僵尸分析及Python辅助实现