爬虫之js逆向、手机爬虫、分布式爬虫及布隆过滤器等相关内容-139
1 bloomfilter:是一个通过多哈希函数映射到一张表的数据结构,能够快速的判断一个元素在一个集合内是否存在,具有很好的空间和时间效率
2 数组:连续存储的内存空间:取值,改值效率高;;;插入值,删除值效率低
3 链表:不连续的内存空间,可变长:取值,改之效率低;;;插入删除效率高
3 你现在看到的所有数据结构,本质就是数字,字符串,布尔,数组,链表(列表,元组,字典,集合)
4 计算机最小单位:比特位 8个比特位是1byte
utf-8: abcdefg-----7个bytes----》56个比特位
5 python中使用布隆过滤器(不同语言中都会有)
pip3 install pybloom_live
# from pybloom_live import ScalableBloomFilter
#
#
# bloom = ScalableBloomFilter(initial_capacity=100, error_rate=0.00001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
#
# url = "www.cnblogs.com"
#
# url2 = "www.liuqingzheng.top"
#
# bloom.add(url)
#
# print(url in bloom)
#
# print(url2 in bloom)
from pybloom_live import BloomFilter
# 10来个
bf = BloomFilter(capacity=1000)
url='www.baidu.com'
bf.add(url)
print(url in bf)
print("www.liuqingzheng.top" in bf)
# 使用redis的布隆过滤器
使用方式见博客
1 分布式爬虫
1 借助于scrapy-redis
2 在scrapy的配置文件中修改
# 把调度器替换成scrapy-redis的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 去重规则,使用scrapy-redis写的类
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 爬取的起始地址的key
# REDIS_START_URLS_KEY = 'cnblogs:start_urls'
# 不写就是连本地的6379
# REDIS_HOST = 'localhost'
# REDIS_PORT = 6379
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300,
}
3 修改爬虫
from scrapy_redis.spiders import RedisSpider
class CnblogsSpider(RedisSpider):
name = 'cnblogs_redis' # 爬虫名字(不能重复)
allowed_domains = ['www.cnblogs.com'] # 允许的域(只爬取当前域下的地址)
redis_key = 'myspider:start_urls'
4 部署在不同的机器上
连接到redis上,设置起始地址
lpush myspider:start_urls http://www.cnblogs.com
2 js逆向(破解知乎)
1 登陆把用户名密码完全加密,使用post提交到后台,后台解密,得到用户名密码,再去校验
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&
grant_type=password&
timestamp=1611894781045&
source=com.zhihu.web&
signature=bbcfda13b3f583657e830ec2643f15b4d7ff396e&
username=%2B8618611453110&
password=xinyuan%40378533872&
captcha=&lang=cn&utm_source=&
ref_source=other_https%3A%2F%2Fwww.zhihu.com%2Fsignin%3Fnext%3D%252F"
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password×tamp=1611894925688&source=com.zhihu.web&signature=d5741e625bc30d49055645ed9f589f760581eea0&username=%2B8618953675221&password=lqz12345&captcha=&lang=cn&utm_source=&ref_source=other_https%3A%2F%2Fwww.zhihu.com%2Fsignin%3Fnext%3D%252F"
3 手机爬虫(appnium)
1 手机app数据(前端)----》http---》客户端类型,手机
2 安卓,ios,大前端(写了一套,运行在不同的平台)
3 有时候,你去爬网站不好爬,尝试爬一下手机
4 安卓,ios,解析出请求(抓包工具)
再写代码,完全一样(scrapy)--》返回来的基本上是json格式
5 第二种:appnium---》用代码操作操作手机--》跟selenium很像---》效率低,速度慢
6 逆向(用抓包工具抓包的数据是加密格式),
-移动端的安卓代码中写的---》java--》某个加密函数
-安卓app---》加壳---》
-普通:java---》xx.jar 包
-安卓:java---》xx.dex 包--编译以后的--》反编译工具
-安卓改之理
-反编译apk成本比较低,网上有现成的软件,傻瓜式操作(java写的加密函数---》很容易被看到)
-c语言写加密函数---》xx.so文件---》在app里用java去调用---》传入参数---》得到加密结果
-动态调试---》看汇编
4 抓包工具
1 windows:fiddler
2 mac:charles
具体使用,搜一下,网上有教程