strever 发表于 2021-12-13 分类: 工具 来源: 原创

爬取pornhub

概述

已实现功能

  • 随机User-Agent请求头
  • 随机代理
  • 多来源爬取最新免费代理,数据redis落地
  • 代理清洗
  • 以分类维度爬取pornhub
  • 爬虫日志/data/logs
  • 数据mysql落地

todo

  • 突破cookie令牌请求机制
  • 突破scrapy无法读取<noscript>反爬机制
  • 添加代理ip表建立优选机制
  • 使用scrapy-redis实现分布式爬取

contact

:smile:

部署(Deploy)

requirement

  • Python 2.7+
  • scrapy 1.3.3+

安装scrapy


$ pip install scrapy
$ pip install pymysql
$ pip install redis

拉取项目代码


$ git clone git@git.mysoft.com.cn:mic/gaia-poi-spider.git

配置

在根目录新建文件.env添加mysql,redis配置信息


$ mv .env.example .env

爬虫

爬虫当前设置

  • 请求同时并发数:32
  • 请求间隔:0.5秒
  • 下载超时:30秒
  • 重试2次
  • user-agents池在/data/useragents.txt
  • 重定向follow3次

爬虫命令


$ scrapy startproject crawl_pornhub

$ scrapy genspider pornhub pornhub.com

//抓取最新代理
$ scrapy crawl pull_proxy

//清理无用代理
$ scrapy crawl clean_proxy

//爬取pornhub
$ scrapy crawl pornhub -s JOBDIR=data/crawls/poi-1

//根据单个分类抓取
$ scrapy crawl pornhub -a cmd_arg=ht

tor

如果部署在国外节点即可开启tor代理,稳定性高于免费代理或付费代理

数据落地


CREATE TABLE `pornhub_videos` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题',
  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
  `duration` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时长',
  `video_link` varchar(255) NOT NULL DEFAULT '' COMMENT '视频浏览地址',
  `video_link_480p` varchar(255) NOT NULL DEFAULT '' COMMENT '视频下载链接',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_uniq_title` (`title`)
) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 COMMENT='Pornhub视频资源表';

代理池

redis-key: 'crawl:proxies'


host:port> zrange 'crawl:proxies' 0 -1 WITHSCORES

licence

MIT


strever 发表于 2020-05-13 分类: frontend 来源: 原创

利用flutter开发应用cn.strever.realme

flutter 跨平台

一款使用flutter打造的跨平台应用

Flutter打造跨平台应用

  • Cupertino
  • Material

Requirements

  • flutter sdk >= 1.5.0
  • android sdk >= api 28
  • xcode
  • cocoapods[ios toochain]
  • [android toolchain]

数据表

CREATE TABLE IF NOT EXISTS realme_note (
        id INTEGER PRIMARY KEY,
        title TEXT,
        note TEXT,
        synced INTEGER,
        deleted INTEGER,
        synced_at TEXT,
        created_at TEXT,
        updated_at TEXT
      );

INSERT INTO realme_note (title, note, synced, deleted, synced_at, created_at, updated_at) VALUES("markdown笔记","这里是笔记内容", 0, 0, "", "2019-05-29 12:12:12", "2019-05-29 12:12:12")'

flutter是什么

  • 为移动应用、浏览器应用、嵌入式应用及桌面应用打造的的便捷响应式UI框架。 Flutter is Google’s portable UI toolkit for building beautiful, natively-compiled applications for mobile, web, and desktop from a single codebase.
  • 由谷歌打造
  • 跨平台-一套代码,多平台部署 Fuchsia、android、ios、web、embedded

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

flutter项目结构

ios为iOS部分代码,使用CocoaPods管理依赖,android为Android部分代码,使用Gradle管理依赖,lib为dart代码,使用pub管理依赖。类似iOS中Cocoapods的Podfile和Podfile.lock,pub下对应的是pubspec.yaml和pubspec.lock。

拓展

  • 混合开发
    • flutter_boost

Markdown widget

This is an example of how to create your own Markdown widget:

new Markdown(data: 'Hello _world_!');

Code blocks

Formatted Dart code looks really pretty too:

void main() {
  runApp(new MaterialApp(
    home: new Scaffold(
      body: new Markdown(data: markdownData)
    )
  ));
}

Enjoy!


strever 发表于 2020-04-28 分类: others 来源: 原创

简单安装elasticsearch

elastic search full-text

vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

//由于官网提供的下载地址国内太慢,可替换成清华源
name=Elasticsearch repository for 7.x packages
baseurl=https://mirror.tuna.tsinghua.edu.cn/elasticstack/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


yum install --enablerepo=elasticsearch elasticsearch
systemctl status elasticsearch
systemctl start elasticsearch

//jvm.options
-Xms256m -Xmx256m

安装国际化分词

/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
/usr/share/elasticsearch/bin/elasticsearch-plugin list

strever 发表于 2020-04-28 分类: others 来源: 原创

一些上下结构合成的叠加字

网名昵称 叠加字 上下合成字

巭孬嫑夯昆孬嫑莪
嫑嫑
巭孬嫑悲忐忑
巭孬嫑烎
嫑怹
嫑恏
朤嫑囧巭嘦
巭孬嫑夯昆夯芘
嘦巭嫑
嫑怹
鵞甭袅巭孬嫑夯昆勥茓
巭孬嫑魏夯茓嘦勥烎昆菿奣


嘦巭兲嫑
巭孬嫑夯昆
嫑怣
歪孬嫑奀甭
嫑氼
巭孬嫑夯勥茓
嫑忘
巭孬嫑夯昆 嘦肏歪鸷臰奣炛
巭孬嫑夯昆勥茓肏歪奣炛


嫑烎
嫑烎
嫑嘦巭
嘦嫑
巭孬嫑夯莗
嫑忈
憇嫑烎
巭孬嫑昆巭孬嫑莪
鵞奀嘦肏鵞奀嘦荫
嫑憅
巭孬嫑莪
巭孬嫑
嫑嘦

strever 发表于 2020-04-12 分类: frontend 来源: 转载

XSS 攻击的分类

通过上述几个例子,我们已经对 XSS 有了一些认识。 什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。 为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。 XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。 而由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。 在部分情况下,由于输入的限制,注入的恶意脚本比较短。但可以通过引入外部的脚本,并由浏览器执行,来完成比较复杂的攻击策略。 这里有一个问题:用户是通过哪种方法“注入”恶意脚本的呢? 不仅仅是业务上的“用户的 UGC 内容”可以进行注入,包括 URL 上的参数等都可以是攻击的来源。在处理输入时,以下内容都不可信:

  • 来自用户的 UGC 信息
  • 来自第三方的链接
  • URL 参数
  • POST 参数
  • Referer (可能来自不可信的来源)
  • Cookie (可能来自其他子域注入)

XSS 分类

根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。 |类型|存储区|插入点| |-|-| |存储型 XSS|后端数据库|HTML| |反射型 XSS|URL|HTML| |DOM 型 XSS|后端数据库/前端存储/URL|前端 JavaScript|

  • 存储区:恶意代码存放的位置。
  • 插入点:由谁取得恶意代码,并插入到网页上。

存储型 XSS

存储型 XSS 的攻击步骤:

  1. 攻击者将恶意代码提交到目标网站的数据库中。
  2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。

反射型 XSS

反射型 XSS 的攻击步骤:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。 反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。 由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。 POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。

DOM 型 XSS

DOM 型 XSS 的攻击步骤:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的 URL。
  3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

strever 发表于 2020-04-23 分类: php 来源: 原创

小于1G内存安装php7的fileinfo扩展问题

方式一,禁用此扩展

--disable-fileinfo

方式二 建一个swap分区做虚拟内存

dd if=/dev/zero of=/swapfile bs=64M count=16
mkswap /swapfile 
swapon /swapfile
// 编译好php后可选择[关闭交换分区 ][删除交换分区]
[swapoff /swapfile] [rm /swapfile]


分享这个页面


github repos

social links

我的微博