scrapy学习

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: scrapy学习

scrapy学习笔记

参考

中文文档:http://scrapy-chs.readthedocs.io/zh_CN/0.24/index.html


初步使用

高级特性:

1.内置的数据抽取器css/xpath/re

2.(scrapy shell)交互式控制台用于调试数据抽取方法

3.内置对结果输出的的支持,可以保存为JSON,CSV,XML等

4.自动处理编码

5.支持自定义扩展

6.丰富的内置扩展,可用于处理

(1)cookies and session

(2)HTTP features like compression,authentication,caching

(3)user-agent spoofing

(4) robots.txt

(5) crawl depth restriction

7.远程调试scrapy

8.更多的支持,比如爬取xml,csv,自动下载图片


原理讲解

scrapy runspider somefile.py -o xx.csv

1.在somefile.py 文件中找到已定义的爬虫,然后通过抓取引擎运行爬虫

2.具体抓取过程

(1)使用start_urls作为初始url生成request,并默认把parse作为他的回调函数

(2)在parse中采用css选择器获得目标url,并注册parse_question作为目标url的回调函数


背后的处理

(1)请求被异步的调度,处理

(2)有一些参数可以控制过程,比如每个域名ip的并发请求数,请求之间的下载延迟(或者自动调节)


使用步骤:

安装步骤:

python2.7 pip lxml openssl scrapy

使用步骤:

创建工程

定义项目

写spider

配置项目pipeline

执行crawl


命令行工具

help 查看帮助信息 -h

version 查看版本信息, 参数:-v 查看各组件的版本信息

startproject 新建工程

genspider 产生一个spider 不同的spider名字需要不同

list 查看spider列表

view 在浏览器中查看页面源码显示

parse 固定使用的函数,解析页面

shell 调试数据,检测xpath,查看页面源码

runspider 运行一个爬虫

bench 执行基准检测,检测scrapy是否安装成功


重要组件

Spider是一个类,定义了怎样爬取一个网站,包括怎样跟踪链接,怎样提取数据


循环执行流程


产生初始请求requests
解析响应,parse response
使用选择器,selector
存储item

基类scrapy.Spider

(1)属性


name: spider名称,要求唯一
allowed_domains: 允许的域名
start_urls:初始urls
custom_settings:个性化设置,会覆盖全局设置
crawler: 抓取器,spider将绑定到上面
settings: 配置实例,包含工程中所有的配置变量
logger: 日志实例

(2)方法


from_crawler(crawler, *args, **kwargs):类方法,用于创建spiders
start_requests():生成初始的requests
make_requests_from_url(url):根据url生成一个request
parse(response): 用来解析网页内容
log(message[, level, component]):用来记录日志,
    这里请使用logger属性记录日志
self.logger.info("visited success")
close(reason): 当spider关闭时候调用的方法

(3)子类


CrawlSpider
    最常用的spider,用于抓取普通的网页
    rules:定义了一些抓取规则,链接怎么跟踪,
        使用哪一个parse函数解析此链接
    parse_start_url(response):解析初始url的相应
XMLFeedSpider
CSVFeedSpider
SitemapSpider

选择器selector

https://docs.scrapy.org/en/latest/topics/selectors.html
用来解析网页的库有很多,比如beautifulsoup,lxml,scrapy默认使用selector
实例化:
    text初始化
    TextResponse对象初始化
xpath
css
re
extract

items

编写形式

作用:定义要抽取的数据项


item pipelines


作用
1.清洗html数据
2.验证抓取到的数据
3.核查重复数据
4.将抓取到的数据存储到数据库中

feed exports

存储数据的抓取结果
格式: json json lines xml csv

重要对象

requests


初始化参数
class scrapy.http.Request(
url[, callback, method="GET", 
header, body, cookies, meta, encoding="utf-8", priority=0
don't_filter=False, errback]
)
实例:
1.生成Request的方法
2.通过Request传递数据的方法
3.Request.meta 中的特殊关键字
子类
FormRequest登录网站
1.new parameter formdata
2.new class method:from_response

response


初始化参数
class scrapy.http.Response(
    url[, status=200, headers, body, flags])
子类
scrapy.http.TextResponse(url,[,encoding])
scrapy.http.HtmlResponse(url)
scrapy.http.http.XmlResponse(url)

logging


1.简单用法
import logging
logging.warning("test")
2.通用的记录日志方法,可以加入日志的级别
import logging
logging.log(logging.WARNING, "test")
3.通过logger记录日志
logger = logging.getLoger(__name__)
logger.warning("this is a warning")
settings文件中日志级别
LOG_FILE
LOG_ENABLED
LOG_ENCODING
LOG_LEVEL
LOG_FORMAT
LOG_DATEFORMAT
LOG_STDOUT

Stats Collections


Sending-email


项目实例

爬取西刺


(1)需求分析

使用单一ip抓取网页过程中,经常碰到ip被封的情况,现需要获取一批代理ip进行网页抓取

目前找到西刺网站,可以提供免费代理ip,先爬取ip,供日后使用

(2)网站结构分析

(3)存储方式

文本文件

csv文件

json文件

jsonlines文件

数据库

云存储

(4)代码结构

创建工程

编写item

编写spider

编写&配置pipeline

调试运行代码


爬虫原理

spiders:用户编写的可定制化部分,负责解析response,产生items和url

scrapy engine:负责组建之间的数据流转,当某个动作发生时触发事件

scheduler:接收requests,并把他们加入队列,以便后续调度

downloader:负责抓取网页,并传送给引擎,之后抓取结果将传给spider

downloader middlewares:位于引擎和下载器之间的钩子,处理传送到下载器requests和传送到引擎的response

spider middlewares:位于引擎和抓取器之间的一个钩子,处理抓取器的输入和输出


itemPipeline:负责处理item,典型的用途:清洗,验证,持久化


数据流:

由执行引擎控制,过程如下:

1.引擎打开一个网站(open a domain)找到处理该网站的spider,并向该spider请求第一个要爬取的url

2.引擎从spider中获取到第一个要爬取的url并在调度器scheduler以requests调度

3.引擎向调度器请求下一个要爬取的url

4.调度器返回下一个要爬取的url给引擎,引擎将url通过下载中间件(请求request方向)转发给下载器downloader

5.一旦页面下载完毕,下载器生成一个该页面的response,并将其通过下载中间件(返回response方向)发送给引擎

6.引擎从下载器中接受到response,并通过spider中间件(输入方向)发送给spider处理

7.spider处理response并返回爬取的item及新的request给引擎

8.引擎将spider爬取到的item返回给itemPipeline,将spider返回的response给调度器

9.从第二步重复,知道调度器中没有更多的request,引擎关闭该网站


项目实用技巧

需求分析

目标网站 天猫商城 https://www.tmall.com/

抓取内容 天猫商城销量前60

商品情况(商品价格,商品名称,商品url)

店铺情况(店铺名称,店铺url,公司名称,公司地址)

存储格式 excel表格


项目实施

代码解读

item编写

spider编写

settings设置


cmd : scrapy runspider tmallgoods.py -o data.csv


打开csv文件乱码,用notpad++,保存为asii编码格式


图片抓取

以上任务增加保存图片的功能


代理ip

原理:A用户 -> 在线代理服务器 -> 目标网站


实现方法

spider middlewares

downloader middlewares


具体实现

1.代理ip的抓取 西刺

2.代理ip的验证 socket

3.代理ip的使用 downloader middlewares


登陆的原理

身份识别 用户名 密码 秘钥

web中的身份识别

cookie 通过在客户端记录信息确定用户身份

实际上是一小段文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie,客户端浏览器会把cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同交给服务器,服务器检查该cookie,以此来辨认用户状态,服务器还可以根据需要修改的cookie的内容


session通过在服务器端记录信息确定用户身份

是一另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从该session中查找该用户的状态就可以了


如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份,session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了


登陆的方法

(1)FormRequest 用户名密码

(2)添加cookie到request中


cookie的处理

cookies middleware

手动定制


通过第三方工具执行js脚本 selenium


手动模拟js的执行

通过火狐浏览器监控页面链接

通过js代码获取必要的信息


 

from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    driver.page_source

scrapyd 是一个部署和云心scrapy spider 的应用,他可以使用Json api部署工程并控制spider


scrapyd 可以管理多个工程,并且每个工程都可以有多个版本,但只运行最新的那个版本

依赖: scrapy twisted

安装: pip install scrapyd

启动服务: cmd: scrapyd


上传工具:scrapyd-client

安装方法:pip install scrapyd-client

上传方法:python scrapyd-deploy target -p project


调度工具curl


调度爬虫

添加版本

调度spider执行

取消spider执行

列出工程


总结:

scrapy是什么 爬虫框架 调度,并发

scrapy基本使用 创建工程 编写item 编写spider 编写pipline 配置组件,运行爬虫

scrapy基本概念 request response

scrapy基本命令 调试网页

scrapy内置服务 状态收集,日志管理logging

爬虫原理 框架,scheduler spider downloader middleware pipline

多级页面抓取 不同页面获取信息

图片抓取 imagepipline

代理ip的使用 过多爬取网站,ip被禁用

cookies的原理 识别用户身份,登陆网站

js的处理技巧 selenium

scrapy的部署和调度 scrapyd curl


深入的内容

scrapy定制化,如:添加扩展,编写中间件

scrapy调度平台搭建


学习原则

多动手

多看源代码

多看官方文档


scrapy shell 加user agent

scrapy shell -s USER_AGENT=”Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36” url  #url指你所需要爬的网址


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
SQL JSON 自然语言处理
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
|
数据采集 Linux Python
Scrapy 框架学习
Scrapy 框架学习
42 0
Scrapy 框架学习
|
数据采集 JSON 缓存
Python | Python学习之初识Scrapy
Python | Python学习之初识Scrapy
|
中间件 Python
一日一技:从 Scrapy 学习模块导入技巧
一日一技:从 Scrapy 学习模块导入技巧
151 0
|
存储 数据采集 Python
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
113 6
|
2月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
64 1
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
122 0
|
1月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
89 4
|
1月前
|
数据采集 中间件 API
在Scrapy爬虫中应用Crawlera进行反爬虫策略
在Scrapy爬虫中应用Crawlera进行反爬虫策略