问题
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)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。