scrapy框架使用示例_学习笔记
scrapy框架使用学习笔记
scrapy 框架是python中最活跃、最著名、相对成熟的爬虫框架。像一个半成品的爬虫,已经为我们实现了工作队列、下载器、保存处理数据的逻辑,以及日志、异常处理等功能。使用scrapy框架更像做填空题,更多的工作是配置这个爬虫框架,针对具体要爬取的网站,编写相应的爬取规则,而诸如多线程下载、异常处理等,交给框架来实现即可。
1.scrapy框架的安装
scrapy框架安装Windows:
conda install scrapy
安装后查看是否成功安装:
scrapy version
2.scrapy框架下的项目创建
cd D: cd py19 scrapy startproject project_name
上述创建的新的项目spider-test在D://py19/ 路径下,它的目录结构如下:
spider-test/ scrapy.cfg #项目配置文件,一般不用设置 spider-test/ __init__.py items.py #定义爬取什么数据 middlewares.py #对所有发出的请求、收到的响应或者爬虫做全局性的自定义设置 pipelines.py#处理已爬取到的数据,如:items去重,或保存数据到数据库 settings.py #爬虫框架设置文件 spiders/ #文件下用于存放编写的爬虫代码,即主要的爬虫逻辑在这里面定义 __init__.py
使用 scrapy startproject spider-test 生成爬虫项目后,命令行下有以下提示:
cd spider-test #进入爬虫项目 scrapy genspider example example.com #生成爬虫文件 #其中,example表示爬虫名字;example.com表示爬虫网址 scrapy genspider baidu baidu.com
上面的命令执行完成后,在spiders文件夹下会生成一个名称为baidu.py的爬虫文件。
3.百度爬虫实现
假定要爬取百度首页右上角“新闻”链接的名称和它的URL。
(1)定义要爬取的数据:
items.py 是用于定义爬取数据的容器,定义要爬取哪些字段的数据,打开items.py 文件,看到如下默认代码:
import scrapy class SpiderTestItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pass
上述默认代码给人很好的提示,即使用类似来定义要提取的字段,此处需要提取两个字段,一个是栏目(title),另一个是栏目对应的url (title_url) ,因此将items.py的代码改成如下形式:
import scrapy class SpiderTestItem(scrapy.Item): # define the fields for your item here like: title = scrapy.Field() title_url = scrapy.Field()
(2)编写爬虫文件
打开soiders文件夹下的baidu.py 爬虫文件,将看到如下代码:
import scrapy class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['baidu.com'] start_urls = ['https://baidu.com/'] def parse(self, response): pass
上面为爬虫框架生成的爬虫文件模板,可在这个模板基础上增加具体的提取规则、解析方法等。具体修改完后的baidu.py代码如下所示:
import scrapy from spider_test.items import SpiderTestItem #引入Item类 class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['baidu.com'] start_urls = ['https://baidu.com/'] def parse(self, response): item = SpiderTestItem() #初始化Item类的数据容器 #提取新闻这个栏目名称 item['title'] = response.xpath('//*[@id="u1"]/a[1]/text()').extract()[0] #提取新闻这个栏目名称对应的URL item['title_url '] = response.xpath('//*[@id="u1"]/a[1]/@href').extract_first() print(item['title']) print(item['title_url']) return item
***注:***items数据容器的使用语法类似Python字典。Scrapy爬虫框架为了提取真实的原文数据,需要调用extract() 序列化提取节点为unicode字符串,这样提取出来的是全部匹配元素的列表,因此提取第一个可写为extract()[0] 或 extract_first() ,二者等价。
至此,百度Scrapy爬虫框架已编写完成。再在命令行窗口定位到项目的根目录,使用如下命令运行这个爬虫:
#scrapy crawl example scrapy crawl baidu
这是就运行了Scrapy百度爬虫,但是可能在屏幕上没有看到代码中的打印结果,而是发现类似Forbidden by robots.txt 这样的提示。这是因为新版本的Scrapy爬虫框架默认遵守robots协议,设置Scrapy爬虫框架的settings.py中的ROBOTSTXT_OBEY = True 为 ROBOTSTXT_OBEY = False即可。然后再次运行:
scrapy crawl baidu
顺利的话,屏幕上会看到打印爬取结果,如下图所示:
- Python爬虫框架Scrapy 学习笔记 5 ------- 使用pipelines过滤敏感词
- entlib5.0 学习笔记 caching application block2 简单使用示例
- php学习笔记(三十四)smarty框架的初步使用和注意事项
- Flask学习笔记-在Bootstrap框架下Web表单WTF的使用
- HTML学习笔记【8】使用框架结构
- bkwin学习笔记之BkWin界面框架使用说明
- Scrapy框架学习笔记(一)
- onvif学习笔记3:Windows环境使用gsoap生成onvif框架代码
- 开源框架之Bonita BPM的使用(五):bonita-server-5.5后台引擎代码学习笔记(1)
- 【Cocos2d-X开发学习笔记】第02期:渲染框架之节点类(CCNode)的使用
- 【Cocos2d-X开发学习笔记】第02期:渲染框架之节点类(CCNode)的使用 [
- MongoDB学习笔记之分组(group)使用示例
- Androidx学习笔记(39)--- 使用HttpClient框架做POST提交
- 分布式服务框架学习笔记8 ActiveMQ入门使用
- python 爬虫 学习笔记(一)Scrapy框架入门
- Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)
- 【Cocos2d-X开发学习笔记】第02期:渲染框架之节点类(CCNode)的使用
- 【Cocos2d-X开发学习笔记】第05期:渲染框架之布景层类(CCLayer)的使用
- NodeJS-学习笔记(2)--使用node提供的express框架开发简单的web应用
- yii 学习笔记二 、路由 及 yii框架模版使用