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 ...
随机推荐
- python 数据库小测试
1.整理博客 2.详细解释下列mysql执行语句的每个参数与参数值的含义 mysql -hlocalhost -P3306 -uroot -proot # mysql (连接数据库) # hloc ...
- Eslint 允许使用双等号
资料 网址 ESlint: Expected !== and instead saw != https://stackoverflow.com/questions/48375316/eslint-ex ...
- 【Hadoop】集群网络
- wordpress调用指定类型post_type的文章
wordpress很强大,可以添加多种post_type文章类型,假如我们要调用product产品模型的文章要如何操作呢?随ytkah一起来看看吧.我们用'post_type' => 'prod ...
- l获取list 的长度,EL表达式获取list的长度,EL表达式获取list大小
在jsp页面中不能通过${list.size}取列表长度,而是 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" pref ...
- js提取DOM属性和设置DOM属性值
<style type="text/css"> #div1{width:100px;height:100px;} #div2{background} </styl ...
- 达信:深度解读COSO新版企业风险管理框架(ERM)
http://www.sohu.com/a/124375769_489979 2016年6月,美国反欺诈财务报告委员会(The Committee of Sponsoring Organization ...
- 8259A的初始化(多片)
1.主从式8259A的初始化设置: 初始化设置如下: (1)中断触发方式:边沿触发 (2)中断屏蔽方式:常规屏蔽方式,即使用OCW1向IMR写屏码 (3)中断优先级排队方式:固定优先级的完全嵌套方式 ...
- css如何让父元素下的所有子元素高度相同
小颖最近做的项目中要实现一个样式 ,小颖怕自己忘记了,写个随笔记下来 需求父元素下有多个子元素,并且子元素过多时要实现自动换行,给每个子元素都加了右边框,而每个子元素里的内容多少不一定,这就会产生右边 ...
- 操作excel文件爬取nvd.nist数据
#!/usr/bin/env python # encoding: utf-8 #@author: jack import random from time import sleep import p ...