python爬虫---js加密和混淆,scrapy框架的使用.
python爬虫---js加密和混淆,scrapy框架的使用.
一丶js加密和js混淆
js加密
对js源码进行加密,从而保护js代码不被黑客窃取.(一般加密和解密的方法都在前端)
http://www.bm8.com.cn/jsConfusion/ # 反解密
js混淆
# 目的: 为了缩小js体积,加快http传输速度 ,混淆的目的是保护代码
· 合并多个js文件
· 去除js代码里面的空格和换行
· 压缩js里面的变量名
· 剔除掉注释
二丶SCRAPY爬虫框架
概述scrapy框架特点
- 高性能的网络请求
- 高性能的数据解析
- 高性能的持久化存储
- 深度爬取
- 全栈爬取
- 分布式
- 中间件
- 请求传参
下载与安装
- 环境的安装:
- mac/linux:pip install scrapy
- window:
- pip install wheel
- 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
- 进入下载目录,执行 pip install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
- pip install pywin32
- pip install scrapy
基本使用
创建项目
- 新建一个工程:scrapy startproject ProName
- 目录结构:
- spiders(包):空包
- settings:配置文件
- 不遵从robots
- UA伪装
- 日志等级的指定
- cd ProName:进入到工程目录中
- 在spiders(爬虫文件夹)中创建一个爬虫文件
- scrapy genspider spiderName www.xxx.com
- 编写代码:主要的代码会编写在爬虫文件中
- 执行工程:scrapy crawl spiderName
scrapy目录结构
- 项目名
- 同名项目文件夹
- spiders 文件夹
- init.py
- items.py
- middlewares.py
- pipelines.py
- settings.py
- scrapy.cfg
scrapy数据解析
# scrapy 可以使用 xpath进行解析
# extract_first() 获取 读取文本并获得索引为0的字符串
# extract() 获取文本
content = div.xpath('.//div[@class="link-detail"]/a/text()').extract_first()
scrapy数据存储
# 基于终端进行持久化存储
- 只可以将parse方法的返回值存储到本地的磁盘文件(指定形式后缀)中
- scrapy crawl spiderName -o filePath
# 基于管道持久化存储 (**)
- 在items注册存储的字段 (Filed万能字段,包含大部分数据类型)
- 在piplelines文件 编写管道类 ,并在settings配置文件进行注册'ITEM_PIPELINES'
- 编码流程
- 1.在爬虫文件中进行数据解析
- 2.在item类中定义相关的属性
- 3.将解析到的数据存储到一个item类型的对象中
- 4.将item类型的对象提交给管道 (yiled item)
- 5.管道类的process_item方法负责接受item,接受到后可以对item实现任意形式的持久化存储操作
- 6.在配置文件中开启管道
- 一个管道类对应一种平台的持久化存储
## 两种方式
# 基于 本地的管道存储
class ChoutiproPipeline(object):
# 重写父类的方法, 只执行一次
fp = None
def open_spider(self, spider):
print('开始爬虫~~~~')
self.fp = open('./本地持久化存储文件.txt', 'w', encoding='utf-8')
def process_item(self, item, spider):
author = item['author']
content = item['content']
self.fp.write(author + ':' + content + '\n')
return item
def close_spider(self, spider):
print('爬虫结束~~~')
self.fp.close()
# 基于 mysql的管道存储
class MySqlChoutiproPipeline(object):
conn = None
cursor = None
def open_spider(self, spider):
print('创建数据库连接~~')
# 建立数据库连接
self.conn = pymysql.Connection(host='127.0.0.1', port=3306, db='scrapy_db1', user='root', password='123',charset='utf8')
# pymysql.Connection(host='127.0.0.1', port=3306, user='root', password='123', db='spider', charset='utf8')
def process_item(self, item, spider):
authro = item['author']
content = item['content']
sql = 'insert into chouti values ("%s","%s")' %(authro ,content)
self.cursor = self.conn.cursor()
try:
self.cursor.execute(sql)
self.conn.commit() # 提交
except Exception as e:
print(e)
self.conn.rollback() # 回滚
return item
def close_spider(self,spider):
self.cursor.close()
self.conn.close()
python爬虫---js加密和混淆,scrapy框架的使用.的更多相关文章
- python爬虫入门(七)Scrapy框架之Spider类
Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...
- Python 爬虫js加密破解(四) 360云盘登录password加密
登录链接:https://yunpan.360.cn/mindex/login 这是一个md5 加密算法,直接使用 md5加密即可实现 本文讲解的是如何抠出js,运行代码 第一部:抓包 如图 第二步: ...
- Python 爬虫js加密破解(三) 百度翻译 sign
第一步: 模拟抓包分析加密参数 第二步: 找到加密字段 调试出来的sign和抓取得到的数据一致,都是 275626.55195 第三部: 分析js加密方法 第四部:运行js代码: 仅供交流学习使用
- python爬虫入门(八)Scrapy框架之CrawlSpider类
CrawlSpider类 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl tencent tencent.com CrawSpid ...
- python爬虫入门(九)Scrapy框架之数据库保存
豆瓣电影TOP 250爬取-->>>数据保存到MongoDB 豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字.演员列表.评分和简介 2.设置随机UserAge ...
- Python爬虫【实战篇】scrapy 框架爬取某招聘网存入mongodb
创建项目 scrapy startproject zhaoping 创建爬虫 cd zhaoping scrapy genspider hr zhaopingwang.com 目录结构 items.p ...
- 网络爬虫第五章之Scrapy框架
第一节:Scrapy框架架构 Scrapy框架介绍 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自 ...
- 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- python网络爬虫(1)——安装scrapy框架的常见问题及其解决方法
Scrapy是为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板. 其实在Linux和 Mac安装,就简单的pip命令即可: pip i ...
随机推荐
- tf.gather_nd()
tf.gather_nd( params, indices, name=None, batch_dims=0) TensorFlow链接:https://tensorflow.google.cn/ap ...
- <人人都懂设计模式>-中介模式
真正的用房屋中介来作例子, 好的书籍总是让人记忆深刻. class HouseInfo: def __init__(self, area, price, has_window, has_bathroo ...
- docker学习11-上传本地镜像到镜像仓库
前言 在本地自己制作用过镜像后,上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境. 如果公开的话,别人也可以用你的镜像快速搭建环境,类似于 GitHub 本地代码上传到代码仓库,再从仓库拉取代 ...
- WTL 9.0的变化 - atlctrls.h
atlctrls.h中是对控件的封装. 第1249行增加: void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(: ...
- Latex 调整断字,连接符,取消断词/断字
latex使用了处理断字的算法去自动的找断字的地方,而且latex会调整单词间距,使得文章看起来不会显得疏密不一致.大多数情况下,这些算法都工作得很好.但是因为断字的算法是根据某种规则来处理单词的断字 ...
- Spring Cloud Turbine 知识点
Turbine 默认使用 Eureka 作为注册中心:如果使用 Consul 作为注册中心,需要排除掉 Eureka:pom.xml 如下: <dependency> <groupI ...
- Vue 生成PDF并下载
实现原理 该功能原理是将页面转化伟canvas在把canvas转化为base64数据 最后将数据通过pdf.js生成下载,故需要和html2canvas一起使用 友情提醒这个pdf下载不能在app里直 ...
- java 动态数组
package testjavapro; import java.util.*; public class testjava { public static void main(String args ...
- 第02组 Alpha冲刺(2/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 任务分配.进度监督 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 还剩下哪些任务 ...
- 基于web公交查询系统---搭建mvc连接数据库(我的毕业设计,进度继续)
建立一个spring的项目:我在已经做过的项目基础下做的,所以接口连接数据库挺快. 搭建好的.对应好数据库: 前几天进度已经完成简单的设计: 完成登录,用户管理(修改删除). 继续的数据库的信息获取, ...