scrapy入门

  1. 创建一个scrapy项目

    • scrapy startporject mySpider
  2. 生产一个爬虫
    • scrapy genspider itcast "itcast.cn"
  3. 提取数据
    • 完善spider,使用xpath等方法
  4. 保存数据
    • 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数据的时候,可以使用这个两个类,让让操作变得更简单

  1. 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("爬虫结束了")
  1. 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入门使用的更多相关文章

  1. [转]Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...

  2. Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  3. Scrapy入门教程(转)

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  4. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

  5. 2019-03-22 Python Scrapy 入门教程 笔记

    Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...

  6. 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. 小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. 小白学 Python 爬虫(36):爬虫框架 Scrapy 入门基础(四) Downloader Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. 小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

随机推荐

  1. HTML(七)HTML 表单(form元素介绍,input元素的常用type类型,input元素的常用属性)

    前言 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input> ...

  2. [再寄小读者之数学篇](2014-04-08 from 1297503521@qq.com $\sin x-x\cos x=0$ 的根的估计)

    (2014-04-08 from 1297503521@qq.com) 设方程 $\sin x-x\cos x=0$ 在 $(0,+\infty)$ 中的第 $n$ 个解为 $x_n$. 证明: $$ ...

  3. bilibili存储型xss (绕过长度限制打乱顺序限制)

    在个人空间的我的收藏中可编辑视频收藏的名称,之后尝试写入标签. http://space.bilibili.com/ 发现输出到前端的尖括号被转义了,不过出现了一个json接口,他的Content-T ...

  4. iTOP-4412开发板_驱动_adc驱动升级和测试例程

    本文档介绍 iTOP-4412 开发板的 adc 驱动的升级和测试例程.自带的驱动只能支持一路 adc,本文介绍如何修改可以支持 4 路 adc 的控制.1 硬件简介如下图所示,这是 4412 的 d ...

  5. C++设计模式——模板方法模式

    模板方法模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不 ...

  6. 解决 Composer-Setup.exe 安装过程中的报错

    问题 在 Windows 7 执行 Composer-Setup.exe 以安装 Composer 过程中 上图中点击[Next]时,出现如下报错信息 原因分析 由上述提示信息,可推测两方面原因: 1 ...

  7. Django-瀑布流

    1.通过ajax方式实现滚动条瀑布流(1)创建数据库:xixi\pubu\models.py from django.db import models #Img图片表 class Img(models ...

  8. KNN与K-Means的区别

    KNN(K-Nearest Neighbor)介绍 Wikipedia上的 KNN词条 中有一个比较经典的图如下: KNN的算法过程是是这样的: 从上图中我们可以看到,图中的数据集是良好的数据,即都打 ...

  9. Java_Runtime&Process&ProcessBuilder

    目录 一.Runtime类 二.Process类 三.ProcessBuilder类 在Java中想调用外部程序,或者执行命令和可运行文件时,网上的典型实例一般都是通过Runtime.getTime( ...

  10. mysql数据库基本语句

    我们除了可以在mysql数据库或phpmyadmin中登陆数据库我们还可以使用linux中命令进行创建,下面我来给大家介绍一个简单的数据库创建方法吧. 首选用putty连接linux服务器,进行命令行 ...