scrapy

问题
1.空气参数问题
2.代理速度慢
3.截图问题
分辨率
selenium
动作链
浏览器托管
规避检测
无头浏览器
phantomJS
谷歌无头
pyppteer
appnium:
基于手机app的自动化的模块
和爬虫之间的关联
模拟登陆
便捷的捕获到动态加载的数据
js解密
js混淆
对js核心代码进行加密
js逆向
将js代码转换成python代码
手动逆向
自动逆向:
PyExcelJS
scrapy框架

  • 框架:就是一个具有很强的通用性且封装一些通用实现方法(功能)的一个项目模板。
  • scrapy(异步):
  • 高性能的网络请求
  • 数据解析
  • 持久化存储
  • 全站数据爬取
  • 深度爬取
  • 分布式
  • 环境的安装
    a. pip3 install wheel

b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl

d. pip3 install pywin32

e. pip3 install scrapy

  • scrapy的基本使用
  • 创建一个工程
  • scrapy startproject proName
  • cd proName
  • 创建一个爬虫文件(py源文件)
  • scrapy genspider spiderName www.xxx.com
  • 基本的配置:settings.py
  • UA伪装
  • robots协议的不遵从
  • 指定日志等级
  • LOG_LEVEL = ‘ERROR’
  • 执行工程
  • scrapy crawl spiderName
  • 数据解析
  • response.xpath(‘xpath表达式’)
  • 于etree的不同之处:
  • 取文本/属性:返回的是一个Selector对象,文本数据是存储在该对象中,
    可以调用extract()/extract_first()取出字符串数据
  • 常用操作:
  • 直接使用xpath返回列表调用extract()/extract_first()
  • 如果列表元素只有一个则调用extract_first(),返回的字符串
  • 如果列表元素为多个则调用extract(),返回的是列表,列表里装的是字符串
  • 持久化存储
  • 基于终端指令的持久化存储
  • 只可以将parse方法的返回值存储到指定后缀(csv)文本文件中
  • 指令:scrapy crawl spiderName -o filePath
  • 基于管道的持久化存储
  • 实现流程:
    1.数据解析(爬虫文件)
    2.在item类中定义相关的属性(items.py)
  • fieldName = scrapy.Field()
    3.将解析的数据存储封装到item类型的对象中(爬虫文件)
  • item[‘fieldName’] = value #给item对象的fieldName属性赋值
    4.将item对象提交给管道(爬虫文件)
  • yield item #只可以将item提交给优先级最高的管道
    5.在管道中接收item,可以将item中存储的数据进行任意形式的持久化存储(pipelines.py)
  • process_item():负责接收item对象且对其进行持久化存储
    6.在配置文件中开启管道机制
  • ITEM_PIPELINES = {
    300:表示的是优先级,数值越小优先级越高
    ‘duanziPro.pipelines.DuanziproPipeline’: 300,
    }
  • 细节处理
  • 管道文件中的管道类表示的是什么
  • 一个管道类对应的就是一种存储形式
  • 如果想要实现数据备份,则需要使用多个管道类(多种存储形式=》mysql/redis)

process_item中的return item:

  • 将item传递给下一个即将被执行的管道类

手动get请求发送

yield scrapy.Request(url,callback)
url:指定好的请求的url
callback:callback指定的回调函数一定会被执行(数据解析)
post请求的发送:
yield scrapy.FormRequest(url,callback,formdata)
yield在scrapy中的使用

向管道提交item对象:yield item
手动请求发送:yield scrapy.Request(url,callback)
问题:如何将start_urls中的元素进行post请求的发送

重写start_requests方法
def start_requests(self):#父类方法
for url in self.start_urls:
发起get请求
yield scrapy.FormRequest(url=url,callback=self.parse,formdata)
scrapy的五大核心组件
引擎(Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
爬虫(Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

python
原文地址:https://www.cnblogs.com/bky20061005/p/12172575.html