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 ...
随机推荐
- bootstrap的selectpicker的方法
方法 .selectpicker('val') 您可以通过调用val元素上的方法来设置所选值. 1 2 $('.selectpicker').selectpicker('val', 'Mustard' ...
- 排序算法-计数排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className CountSort * @date 201 ...
- 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(配置MQTT的SSL证书,验证安全通信)
4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书) 前面的准备工作终于完了 复制这两个证书 放到云端MQTT的这个位置,其实放哪里都可以 ...
- Flask内的特殊装饰器
@app.template_global() # 全局变量 @app.template_filter() # 偏函数 @app.before_request # 请求进入视图函数之前,比 ...
- # 数位DP入坑
Hdu 2089 不要62 #include<iostream> #include<cstdio> #include<cmath> #include<cstr ...
- 【JZOJ5739】【20190706】毒奶
题目 有\(n\)个现实城市,另有\(n\)个幻想城市 原图中在现实城市存在\(m\)条边,在幻想城市存在\(m-1-n\)条边 一个排列是合法的当且进当显示城市 \(i\) 向幻想城市 \(p_i\ ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- ACT开发初步(二)——XML
由于pc无法发文,先挖坑,慢慢填
- springboot swagger2注解使用
swagger2 注解整体说明 @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI ...
- Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组 import time dt=time.strptime('2019-08-08 11:32:23', ...