scrapy框架

框架介绍: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

安装:
  Linux:
pip3 install scrapy
  Windows:
a. pip3 install wheel
b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted‑17.1.‑cp35‑cp35m‑win_amd64.whl
d. pip3 install pywin32
e. pip3 install scrapy
基础使用
.创建项目: scrapy startproject 项目名称
.       cd proName
.创建爬虫文件 scrapy genspider spidername xxx.com
.执行 scrapy crawl spiderName scrapy crawl spider --nolog #忽略log日志
# -*- coding: utf-8 -*-
import scrapy
class Pa1Spider(scrapy.Spider):
# 爬虫文件的名称
name = 'pa1'
# allowed_domains = ['www.xxx.com'] # 允许域名
start_urls = ['https://www.qiushibaike.com/text/'] # 起始url列表 可写多个 # 解析数据
def parse(self, response): #响应
div_list = response.xpath('//div[@id="content-left"]/div')
names = []
for div in div_list:
# author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() names.append({'name':author}) #必须封装到字典中 ('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle')
return names
# 持久化存储
# - 基于终端指令 特性:只能将parse方法的返回值存到磁盘里面
      scrapy crawl first -o qiubai.csv #指定文件类型有要求.json .csv
    # - 基于管道 pipelines 

      - 数据解析        spider.py

      - 封装item类           items.py

      - 实例化item类型的对象  spider.py

      - 将解析倒的数据依次存储封装到item类型的对象中

      - 将item对象提交给管道

     - 在管道中实现IO操作  spider.py

      - 开启管道  settings.py

  # 同一份数据存储到不同的平台:
    管道文件定义多个类,之后settings.py里注册开启,根据优先级数字越小,越早执行,不同类之间传递item,在def process_item():中return item.
# 全站数据的爬取: 不同页面
  1 页面全添加到start_urls中,不建议,在url很多的时候不好
  2 手动请求
    设置url模板,%s %d 字符串格式化
    手动请求发送写在哪里? 在parse方法
    yield scrapy.Request(url=url,parse.callback)
# 5大核心组件
爬虫: 干活的
管道: 接收item,
调度器:
下载器: 去互联网请求   
    下载中间件作用:拦截请求和响应
      -拦截请求:
        1 篡改请求头UA UA池,随机random.choice()
        2 设置相关请求对象的代理IP(process_exception中)
引擎: 数据流处理,处理事务
# POST请求的发送:
  重写def start_requests(self):
      yield scrapy.FormRequest(url,callback,formdata)
  scrapy 默认是自己处理cookie的, settings.py里面COOKIES_ENNABLE=False
# 日志等级
  settings.py 里面 LOG_LEVEL='ERROR'
# 日志路径
  settings.py 里面 LOG_FILE = 'path'
# 请求传参的应用场景:
  爬取和解析的数据不在同一张页面上面
  在请求方法中使用meta(字典)参数,该字典会传递参数给回调函数
    回调函数接收meta:response.meta['key']
# 一般的settings.py 里面这样修改
ROBOTSTXT_OBEY = False
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'
ITEM_PIPELINES = {
'xiaohua.pipelines.XiaohuaPipeline': 300,
'xiaohua.pipelines.MysqlPipeline': 200,
} # 可定义多个管道类 300优先级 数值越小优先级越高
LOG_LEVEL = "ERROR"
# items.py
# -*- coding: utf-8 -*-
import scrapy
class XiaohuaItem(scrapy.Item):
name = scrapy.Field() #为啥? 不能保证解析到的数据类型统一, 可以存储任何type的数据
img_url = scrapy.Field()
# 手动全站数据抓取
# -*- coding: utf-8 -*-
import scrapy
from xiaohua.items import XiaohuaItem class Xh1Spider(scrapy.Spider):
name = 'xh1'
# allowed_domains = ['www.ccc.com']
start_urls = ['http://www.521609.com/daxuemeinv/']
# 生成一个通用的url模板
url = 'http://www.521609.com/daxuemeinv/list8%d.html'
pageNum = 1 def parse_detail(self,response):
pass def parse(self, response):
li_list = response.xpath('//div[@class="index_img list_center"]/ul/li') #返回列表 selector
for li in li_list:
name = li.xpath('./a[2]/text() | ./a[2]/b/text()').extract_first()
img_url ='http://www.521609.com' + li.xpath('./a[1]/img/@src').extract_first() # 实例化一个item 对象
item = XiaohuaItem()
item['name'] = name
item['img_url'] = img_url
# item 提交给管道
yield item # 对其他页码的url手动请求的发送
if self.pageNum <= 3:
self.pageNum += 1
new_url = format(self.url%self.pageNum)
yield scrapy.Request(url=new_url,callback=self.parse)

手动全站数据抓取

# -*- coding: utf-8 -*-
import scrapy class PostReqSpider(scrapy.Spider):
name = 'post_req'
# allowed_domains = ['www.bb.com'] start_urls = ['https://fanyi.baidu.com/sug'] # 默认这样的get
# def start_requests(self):
# for url in self.start_urls:
# yield scrapy.Request(url=url,callback=self.parse) def start_requests(self):
for url in self.start_urls:
data = {
'kw':'dog'
}
yield scrapy.FormRequest(url=url, callback=self.parse,formdata=data) def parse(self, response):
print(response.text)

scrapy 请求传参

scrapy

scrapy框架 默认处理cookie的

7 scrapy 初识的更多相关文章

  1. Scrapy: 初识Scrapy

    1.初识Scrapy Scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘,信息处理或者存储历史数据等一系列的程序中. 2.选择一个网站 当需要从某个网站获取信息时, ...

  2. python爬虫框架scrapy初识(一)

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的 ...

  3. 爬虫框架Scrapy 之(一) --- scrapy初识

    Scrapy框架简介 scrapy是基于Twisted的一个第三方爬虫框架,许多功能已经被封装好,方便提取结构性的数据.其可以应用在数据挖掘,信息处理等方面.提供了许多的爬虫的基类,帮我们更简便使用爬 ...

  4. scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

    本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visua ...

  5. python自动化开发-[第二十四天]-高性能相关与初识scrapy

    今日内容概要 1.高性能相关 2.scrapy初识 上节回顾: 1. Http协议 Http协议:GET / http1.1/r/n...../r/r/r/na=1 TCP协议:sendall(&qu ...

  6. 22期老男孩Ptython全栈架构师视频教程

    老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...

  7. 初识scrapy,美空网图片爬取实战

          这俩天研究了下scrapy爬虫框架,遂准备写个爬虫练练手.平时做的较多的事情是浏览图片,对,没错,就是那种艺术照,我骄傲的认为,多看美照一定能提高审美,并且成为一个优雅的程序员.O(∩_∩ ...

  8. 初识python爬虫框架Scrapy

    Scrapy,按照其官网(https://scrapy.org/)上的解释:一个开源和协作式的框架,用快速.简单.可扩展的方式从网站提取所需的数据. 我们一开始上手爬虫的时候,接触的是urllib.r ...

  9. scrapy框架系列 (1) 初识scrapy

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

随机推荐

  1. No Delegate set : lost message:libpng error: Not a PNG file

    当出现这个问题时,是因为本来是jpg或其他格式的图片存成了png导致的.或者有的图片本来就是jpg的,Android Studio一编译,发现不是png才造成了这个问题.解决这个问题可以在Androi ...

  2. c数据结构 -- 链表的理解

    链表是结构体变量与结构体变量链接在一起,怎么链接在一起?通过指针 #include <stdio.h> struct Node{ int data; struct Node* next; ...

  3. Django框架介绍(二)

    1.MVC框架和MTV框架 MVC全名model view controller,是软件工程中的一种软件架构模式,把软件分为三个基本部分:模型(model).视图(view)和控制器(controll ...

  4. 1069 The Black Hole of Numbers (20分)

    1069 The Black Hole of Numbers (20分) 1. 题目 2. 思路 把输入的数字作为字符串,调用排序算法,求最大最小 3. 注意点 输入的数字的范围是(0, 104), ...

  5. Zeta(2) 有图版

    我很早就一直想写一篇文章,跟大家聊一聊: $$\frac{1}{1^2}+\frac{1}{2^2} +\frac{1}{3^2} +\frac{1}{4^2} +\frac{1}{5^2} +\cd ...

  6. SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据

    根据微软文档对sp_delete_backuphistory存储过程的介绍,SQL Server在每次备份和恢复数据库后,会向msdb系统数据库的备份和恢复历史表写入数据,如果SQL Server经常 ...

  7. AAC huffman decoding

    在AAC编码器内部,使用huffman coding用于进一步减少scalefactor和量化频谱系数的冗余. 从individual_channel_stream层提取码流进行huffman解码,码 ...

  8. 【C语言】用C语言输出一个吃豆人

    大圆盘减去扇形和小圆盘: #include <math.h> #include <stdio.h> int main() { double x, y; ; y >= -; ...

  9. C语言编译和链接详解(通俗易懂,深入本质)

    我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program).在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常 ...

  10. SRAM速度提升思路及方法

    SRAM总体分为两大部分,一部分是存储阵列,另一部分是外围辅助电路.提高SRAM工作速度从这两大方面着手. ·存储阵列 对于存储阵列,首先可以通过降低工艺节点,以达到提高器件本身速度,从而提高整体SR ...