安装:

  1、pip install wheel 安装wheel

  2、安装Twisted
    a.访问 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载Twisted-17.9.0-cp36-cp36m-win_amd64.whl
    b.进入文件所在目录 pip install Twisted-17.1.0-cp35-cp35m-win_amd64.whl

  3、pip3 install scrapy 安装scrapy

使用:  

  1、scrapy startprojec 项目名称 创建项目
  2、 cd 项目名称 进入项目目录
  3、scrapy genspider xxx xxx.com 创建爬虫文件 例如,要创建oppo爬虫文件,则scrapy genspider oppo www.oppo.cn
  4、scrapy crawl xxx 运行爬虫文件 在当前目录下,运行oppo爬虫 scrapy crawl oppo
  5、scrapy crawl xxx -o file.json 运行爬虫,并把文件存放到指定文件中,多用来调试!

  注意事项:去settings .py 中注释掉 ROBOTSTXT_OBEY = True (如项目无其他侵权功能,则可以注释“鉴别是否允许爬取”)
  域名有www 则需要加上www, 如果当前页面添加ssl加密传输,则需要去oppo.py中修改http为https

重点:yield下 ,callback如果不指定回调函数,则默认结束时,会回调一次parse

调试方法:

  

  scrapy shell 域名
  scrapy shell -s USER_AGENT="Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5" 域名 注意: 调试中增加请求头,USER_AGENT=后面必须是英文状态下的双引号,单引号会报错
  scrapy shell https://www.oppo.cn
  scrapy shell https://www.oppo.cn/topic/index/thread.json?page=1&limit=20&type=3&id=856
  域名后面&换行后无法连接成整个域名,则可: scrapy shell "www.oppo.cn/topic/index/thread.json?page=1&limit=20&type=3&id=856" 去掉"https://"

  CSS选择器使用

  response.css("#ID dt::text") 提取文本信息
  response.css('.class p::attr(href)').extract() 提取属性信息 显示所有
  response.css('.class p::attr(href)').extract_first() 提取属性信息 显示第一条

  

  html对象转换:

  import  parsel

  data=parsel.Selector(html_str)

  Spider 注意事项:
    allowed_domains = ['qiushibaike.com'] 这是正确匹配规则,
  错误示范
    1 、allowed_domains = ['www.qiushibaike.com'] 主域名前面添加 www
    2 、allowed_domains = ['qiushibaike.com/text'] 主域名后面添加多余页码

创建crawl_spider

  1、scrapy startproject 项目名称
  2、cd 项目名称
  3、scrapy genspider xxx -t crawl xxx '域名'

 Spider


关于Spider的使用方法:

  name='xx'

     name必须是唯一的

    allowed_domains=['xxxx.com']

     设置爬虫的规则,url不在规则范围之内的,不予爬取

  start_urls=['xxxxx.com']

    初始url链接 

    custom_srttings 

     它是一个字典,是专属于spider的配置,此方法会覆盖全局的配置,此设置必须在初始化前更新,必须定义类变量

  

  GET 

  POST

  

crawl_Spider 

创建crawl_spider 的方法:

   scrapy startproject xxx

   cd xxx

   scrapy genspider  -t crawl  xxx xxx.xom

   LinkExtractors链接提取器:

 Settings


关于settings调用到方法:

  1.在spider.py文件中,可以直接使用 self.settings.get('XXX') 获取

         

  2.在Middleware中使用settings的方法:

  

 

MiddleWares


 在middlewares中修改response下载器为selenium的方法:

  注意事项:需要在settings中将downloader_middlewares反注释,并将红色文字部分修改成你的middlewares类名:

  DOWNLOADER_MIDDLEWARES = {

      'JdSelenium.middlewares.JdseleniumMiddleware': 543,
  }
  如果要修改下载中间件,则需要使用start_requests方法

       

  

       

 添加IP代理池

  Httpbin.org相关测试接口

      https://blog.csdn.net/chang995196962/article/details/91362364

  ip代理:https://www.xicidaili.com/wt/

       

  校验IP不可用后,更换IP代理

        requests中添加ip代理,一定要使用字典格式,否则就会报错

  

添加随机请求头

User_Agent 集合:http://useragentstring.com/pages/useragentstring.php

 

 Pipeline


Scrapy.imagesPipeline:

不论是FILES_STORE 还是IMAGE_STORE,路径一定要懂'\' 来表示:   IMAGES_STORE='D:\IM'

下载文件的 Files Pipeline :

  当时用 Files Pipeline 下载文件的时候,按照以下步骤完成:

  1.定义好一个Item,然后在这个item中定义两个属性,分别为 file_urls以及files。file_urls 用来存储需要下载的文件的url链接,需要给一个列表

      file_urls=scrapy.Field()

    files=scrapy.Field()

  2.当文件下载完成后,会把文件下载的相关信息存储到item 的files属性中,比如下载路径,下载的url和文件的校验码等。

   3.在配置文件 settings.py 中配置 FILES_STORE,这个配置是用来设置下载下来的路径

   4.启动pipeline: 在settings.py中的ITEM_PIPELINES中设置 scrapy.pipelines.files.FilesPipeline:1

下载图片的 Images Pipelins:

  当时用 Files Pipeline 下载文件的时候,按照以下步骤完成:

  1.定义好一个Item,然后在这个item中定义两个属性,分别为 file_urls以及files。file_urls 用来存储需要下载的文件的url链接,需要给一个列表

       image_urls=scrapy.Field()

    images=scrapy.Field()

  2.当文件下载完成后,会把文件下载的相关信息存储到item 的images属性中,比如下载路径,下载的url和文件的校验码等。

   3.在配置文件 settings.py 中配置 IMAGES_STORE,这个配置是用来设置下载下来的路径

   4.启动pipeline: 在settings.py中的ITEM_PIPELINES中设置 scrapy.pipelines.images.ImagesPipeline:1

在settings中设置plpelines,

 当要修改下载路径或者文件加名称从被爬取的网页中获取时,当重写父类方法:

from scrapy.pipelines.images import ImagesPipeline
from QB import settings
import os

class QbImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
# 这个方法是在发送下载请求之前调用
# 其实这个方法本身就是去发送下载请求的
request_objs = super(QbImagesPipeline, self).get_media_requests(item, info)
for request_obj in request_objs:
request_obj.item = item
return request_objs

def file_path(self, request, response=None, info=None):
path = super(QbImagesPipeline, self).file_path(request, response, info)
# 文件路径分类,从item中拿到的文件夹名称,一般是从网上获取的名称
category = request.item.get('category')
images_store = settings.IMAGES_STORE
# 将settings中设置的路径与item中的路径拼接
category_path = os.path.join(images_store, category)
if not os.path.exists(category_path):
os.mkdir(category_path)
# 将父类中的路径分割,得到图片名称
image_name = path.replace('full/', '')
image_path = os.path.join(category_path, image_name)
return image_path

 Plpeline Mysql数据存储

  同步IO存储

  异步IO存储

【Scrapy笔记】使用方法的更多相关文章

  1. Learning Scrapy笔记(六)- Scrapy处理JSON API和AJAX页面

    摘要:介绍了使用Scrapy处理JSON API和AJAX页面的方法 有时候,你会发现你要爬取的页面并不存在HTML源码,譬如,在浏览器打开http://localhost:9312/static/, ...

  2. 转 Scrapy笔记(5)- Item详解

    Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便. Item提供了类字典的API,并且可以很方便的声明字段,很多Scra ...

  3. Scrapy笔记(1)- 入门篇

    Scrapy笔记01- 入门篇 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取(更确切来说, ...

  4. Scrapy笔记02- 完整示例

    Scrapy笔记02- 完整示例 这篇文章我们通过一个比较完整的例子来教你使用Scrapy,我选择爬取虎嗅网首页的新闻列表. 这里我们将完成如下几个步骤: 创建一个新的Scrapy工程 定义你所需要要 ...

  5. Scrapy笔记03- Spider详解

    Scrapy笔记03- Spider详解 Spider是爬虫框架的核心,爬取流程如下: 先初始化请求URL列表,并指定下载后处理response的回调函数.初次请求URL通过start_urls指定, ...

  6. Scrapy笔记04- Selector详解

    Scrapy笔记04- Selector详解 在你爬取网页的时候,最普遍的事情就是在页面源码中提取需要的数据,我们有几个库可以帮你完成这个任务: BeautifulSoup是python中一个非常流行 ...

  7. Scrapy笔记05- Item详解

    Scrapy笔记05- Item详解 Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便. Item提供了类字典的API, ...

  8. Scrapy笔记06- Item Pipeline

    Scrapy笔记06- Item Pipeline 当一个item被蜘蛛爬取到之后会被发送给Item Pipeline,然后多个组件按照顺序处理这个item. 每个Item Pipeline组件其实就 ...

  9. Scrapy笔记07- 内置服务

    Scrapy笔记07- 内置服务 Scrapy使用Python内置的的日志系统来记录事件日志. 日志配置 LOG_ENABLED = true LOG_ENCODING = "utf-8&q ...

  10. Scrapy笔记08- 文件与图片

    Scrapy笔记08- 文件与图片 Scrapy为我们提供了可重用的item pipelines为某个特定的Item去下载文件. 通常来说你会选择使用Files Pipeline或Images Pip ...

随机推荐

  1. HW弹药库之红队作战手册

    红方人员实战手册 声明 Author : By klion Date : 2020.2.15 寄语 : 愿 2020 后面的每一天都能一切安好 分享初衷 一来, 旨在为 "攻击" ...

  2. 学好Flex布局并不容易

    1. Flex布局介绍 CSS的传统布局解决方案,基于盒状模型,依赖display属性.position属性.float属性,对于一些特殊的布局,例如垂直居中,往往要想很多hack的方法来解决. 20 ...

  3. 这次齐了!Java面向对象、类的定义、对象的使用,全部帮你搞定

    概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备自 ...

  4. 史上最全!2020面试阿里,字节跳动90%被问到的JVM面试题(附答案)

    前言:最近老是收到小伙伴的私信问我能不能帮忙整理出一份JVM相关的面试题出来,说自己在大厂去面试的时候这一块问的是特别多的,每次自己学的时候每次都学不到重点去.这不他来了,一份详细的JVM面试真题给大 ...

  5. FL Studio采样器设置的功能是什么

    FL Studio是一款很集成化的软件,它和很多其他的软件不同,FL Studio的通道中集成了很多采样器.这种整合的方式不但功能强大而且也很便捷.今天小编就来为大家详细的简介下FL Studio采样 ...

  6. Mac电脑数据被误删了怎么办,还能恢复吗

    随着苹果产品的使用率越来越高,苹果电脑视频丢失的风险也是居高不下,大部分情况下都是由于误操作或者是中病毒导致视频丢失,苹果电脑视频恢复可以实现吗?涉及到文件恢复的问题,找EasyRecovery文件恢 ...

  7. 在FL Studio编曲软件中查找采样的音高

    相信玩音乐的小伙伴们都遇到过这种情况,在用FL Studio编曲时,想添加一段音频采样,由于采样的调式与我们正在编曲的调式不同,音频之间的衔接就是一个非常头疼的问题,要解决采样的调式,我们就得先确认这 ...

  8. 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

    Hello,早上好,我是楼下小黑哥~ 最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐 ...

  9. 【P2634】聪聪可可——点分治

    (题面来自Luogu) 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头 ...

  10. Spring bean注册

    DefaultListableBeanFactory中: DefaultListableBeanFactory实现了BeanDefinitionRegistry,这个接口的实现完成BeanDefini ...