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. input设置为disabled,表单无法提交后台解决方法

    <input name="country" id="country" size=12 value="disabled提交时得不到该值 " ...

  2. VSFTPD服务器

    我虽然vsftpd服务器做了百遍以上,但是我觉的成功率不大.我要写下这篇日记,来让我分析自己曾经的过错!! vsftpd的原理我不多讲!!!请自行百度吧!! 我搭建的环境是 Linux6.4 IP(1 ...

  3. Redis08——Redis五大数据类型 hash

    hash Redis中的hash是一个键值对集合 同时又是一个string类型的field和value的映射表,hash特别适合用于存储对象 类似于java里面的Map<String,Objec ...

  4. C++的多态总结(静态&动态)

    什么是多态 顾名思义就是同一个事物在不同场景下的多种形态. 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合 ...

  5. 在虚拟机中使用Git

    自己如何从安装虚拟机到使用git进行项目代码版本管理的部分教程因为是自学所以没有好的教程只能自己进行百度,网上的教程太多了但都是只是一个模块没有从头到尾详细的教程,我们如果有个详细的教程本来只需花很少 ...

  6. BZOJ1015[JSOI2008]星球大战starwar题解报告

    题目链接 考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数. 附代码 #include<iostream> #include&l ...

  7. unittest的命令执行

    命令窗口执行: 1.可以在命令窗口下执行单个module.class.method python -m unittest test_module1 test_module2 python -m uni ...

  8. [IOI2005]河流

    Description Luogu3354 Solution 一道树形dp的题. 首先考虑转移,很简单,就是这个点做不做伐木场.为了方便转移,我们定义状态为\(f_{i,j,k}\)表示点\(i\)及 ...

  9. python接口自动化测试 - requests库的post请求进行文件下载

    前言 之前讲了文件上传,当然就有文件下载啦 文件下载操作步骤 极其简单,将二进制格式的响应内容存进本地文件中,根据需要下载的文件的格式来写文件名即可 down_url = 'https://www.i ...

  10. 【visio】故障树分析图

    率属于 商务 故障树是从一个可能的事故开始,自上而下.一层层的寻找顶事件的直接原因和间接原因事件,直到基本原因事件,并用逻辑图把这些事件之间的逻辑关系表达出来. 主要的应用场景:分析复杂问题原因,一个 ...