scrapy入门使用
scrapy入门
- 创建一个scrapy项目
- scrapy startporject mySpider
- 生产一个爬虫
- scrapy genspider itcast "itcast.cn"
- 提取数据
- 完善spider,使用xpath等方法
- 保存数据
- pipeline中保存数据
创建一个scrapy项目
命令:scrapy startproject+<项目名字>
scrapy startproject myspider
使用pipeline
从pipeline的字典形式可以看出来,pipline可以有多个,而且确实pipeline能够定义多个
为什么需要多个pipeline:
1. 可能会有多个spider,不同的pipeline处理不同的item内容
2. 一个spider的内容可能要做不同的操作,比如存入不同的数据库中
注意:
1. pipeline的权重越小优先级越高
2. pipeline中process_item方法名不能修改为其他的名称
loggin 模块的使用
- scrapy
- settings中设置LOG_LEVEL="WANRING"
- settings中设置LOG_FILE="./a.log" # 设置日志保存位置,设置后终端不会显示日志内容
- import logging,实例化logger的方式在任何文件中使用logger输出
实现翻页请求
通过爬取腾讯招聘的页面的招聘信息,学习如何实现翻页请求
http://hr.tencent.com/position.php
next_page_url = response.xpath("//a[text()='下一页']/@href").extract()
while len(next_page_url) > 0:
yield scrapy.Request(next_page_url, callback=self.parese)
# scrapy.Request能构建一个requests,同时指定提取数据的callback函数
在setting中设置User-Agent:
USER_AGENT = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
scrapy.Request知识点:
scrapy.Request(url[, callback, method='GET', header, body, cookies, meta, dont_filter=False])
注:一般文档中方括号中的参数表示可选参数
scrapy.Request常用参数为:
callback:指定传入的url交给哪个解析函数去处理
meta:实现在不同的解析函数中传递数据,meta默认会携带部分信息,比如下载延迟,请求深度等
dont_filter:让scrapy的去重不会过滤当前url.scrapy默认有url去重的功能,对需要重复请求的url有重要用途
Scrapy深入之认识程序debug信息
[scrapy.utils.log] INFO: Overridden setting:自己设置的setting的信息
[scrapy.middleware] INFO: Enabled extensions extensions:启动的扩展,默认有一堆
[scrapy.middleware] INFO: Enabled downloader extensions:启动的下载扩展,默认一堆
[scrapy.middleware] INFO: Enabled spider extensions:启动的爬虫中间件,默认一堆
[scrapy.middleware] INFO: Enabled pipelines extensions:启动的管道
[scrapy.extensions.telnet] DEBUG:爬虫运行的时候能够使用telenet命令对爬虫做一些控制,比如暂停等
[scrapy.statscollectors] INFO: Dumping Scrapy stats:爬虫结束时候的一些统计信息,比如请求响应数量等
[scrapy.core.scraper] DEBUG: Scraped from <200 http://wz.sun0769.com/html/question/201707/340346.shtml>{'content':......} :每次yield item的时候会提示item的内容以及这个item来自的url地址
Scrapy深入之scrapy shell
Scrapy shell是一个交互终端,我们在未启动spider的情况下尝试及调式代码,也可以用来测试Xpath表达式
使用方法:
scrapy shell http://www.itcast.cn/channel/teacher.shtml
response.url:当前响应的url地址
response.request.url:当前响应对应的请求的url地址
response.headers:响应头
response.body:响应体,也就是html代码,默认是byte类型
response.request.headers:当前响应的请求头
scrapy深入之认识setting文件
为什么需要配置文件:
配置文件存放一些公共的变量(比如数据库的地址,账号密码等)
方便自己和别人修改
一般用全大写字母命名变量名 SQL_HOST = '192.168.0.1'
scrapy深入之pipeline使用
import json
class JsonWritePipeline(object):
def open_spider(self, spider): # 在爬虫开启的时候执行,仅执行一次
self.file = open(spider.settings.get("SAVE_FILE", "./temp.json"), 'w')
def close_spider(self, spider): # 在爬虫关闭的时候执行,仅执行一次
self.file.close()
def process_item(self, item, spider):
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
return item # 不return的情况下,另一个权重较低的pipline就不会获取该item
JsonItemExporter和JsonLinesItemExporter:
保存json数据的时候,可以使用这个两个类,让让操作变得更简单
JsonItemExporter:每次把数据添加到内存中,最后统一写入到磁盘中。存储的数据是一个满足json规则的数据。但消耗内存较大。示例代码:
from scrapy.exporters import JsonItemExporter
class QsbkPipeline(object):
def __init__(self):
self.fp = open("duanzi.json", "wb")
self.exporter = JsonItemExporter(self.fp, ensure_ascii=False,encoding='utf-8')
def open_spider(self, spider):
print("爬虫开始了。。。")
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.exporter.finish_exporting()
self.fp.close()
print("爬虫结束了")
JsonLinesItemExporter:这个是每次调用export_item的时候就把这个item存储到硬盘中。每次处理数据的时候直接存储到硬盘中,但每一个字典是一行,整个文件不是满足json格式的文件
from scrapy.exporters import JsonLinesItemExpoprter
class QsbkPipline(object):
def __init__(self):
self.fp = open("duanzi.json", 'wb')
self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding='utf-8')
def open_spider(self, spider):
print("爬虫开始了。。。")
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.fp.close()
print("爬虫结束了")
scrapy入门使用的更多相关文章
- [转]Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...
- Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...
- Scrapy入门教程(转)
关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...
- 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...
- 2019-03-22 Python Scrapy 入门教程 笔记
Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...
- 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(36):爬虫框架 Scrapy 入门基础(四) Downloader Middleware
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
随机推荐
- CSS布局-flex布局入门教程
前言 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. 查询兼容 F ...
- Dijkstra算法的C++实现
Dijkstra算法是在图中寻找两顶点最短路径的算法. 下面以下图有向图为例,说明其基本思想. 上图为转化为邻接矩阵存储: 现在我要寻找1点到其他点的最短距离以及路径: a)1点到各点的距 ...
- [C++]数据结构-排序:插入排序之直接插入排序
得赶紧休息了,木有时间写原理了.直接上代码. /* <插入排序-直接插入排序> */ #include<iostream> using namespace std; void ...
- Contest2154 - 2019-2-28 高一noip基础知识点 测试1 题解版
传送门 预计得分:100+100+100+100=400 实际得分:55+100+60+80=295 细节决定成败啊!!! T1 这道题思路很简单,就是一些细节很变态坑人 首先,数据不一定是有序的,虽 ...
- ue4 材质表达式分类
绿色节点 颜色 Color Desaturation 数学 Math GO 字体 Font FontSample,FontSampleParameter 实用程序 Utility 常用: Desatu ...
- 拆系数FFT及其部分优化
模拟考某题一开始由于校内OJ太慢直接拆系数FFT跑不过 后来被神仙婊了一顿之后发现复杂度写炸了改了改随便过 模版题:任意模数NTT 三模数NTT 常数巨大,跑的极慢 拆系数FFT 原理是对于两个多项式 ...
- ado.net 使用:ExecuteReader 无法获取输出参数
解决方法: 要获取到输出参数.需要连接关闭之后才行. 一般都是用using把打开数据库连接的reader包起来
- 找不到或无法加载主类(Could not find or load main class)
一般可能会是包名引起的,还有可能就不小心加上了.class后缀 解决方案如下 可以加上目录或者使用符号 . ,注意要用空格隔开 java -cp d:\sample HelloWorldjava -c ...
- 34. Find First and Last Position of Element in Sorted Array
1. 原始题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在 ...
- iOS开发多线程之NSThread
一.NSThread的属性与方法 1.NSThread 类方法 类方法,顾名思义通过类名直接调用的方法 1. + (void)detachNewThreadWithBlock:(void (^)(vo ...