频道脚本使用场景及配置关键词搜索

  今天,小编给大家带来的教程为:前嗅ForeSpider脚本教程中频道脚本的应用场景以及脚本配置关键词搜索的实战教程。具体内容如下:
  
  一.频道脚本使用场景
  
  当需要手动创建采集源列表,或者完全使用脚本采集数据时,在“频道脚本”处,你可能用到的类为extractor 、result。
  
  你可以定义类的对象来使用其成员方法,也可以使用EXTRACT、RESULT两个全局对象。
  
  关于这两个类的详细说明以及该场景的更多示例,可以点击“教程->脚本教程->脚本示例->频道脚本”来查看相关内容。
  
  二.脚本配置关键词搜索
  
  1.关键词不含验证码
  
  场景:当一类链接中只需要替换一部分字符串,即可得到目标链接。则可以将这部分字符串作为关键词,添加频道脚本,达到链接抽取的目的。 示例:暂无。
  
  2.关键词含验证码
  
  场景:当通过可视化方式不能获取验证码刷新事件时,需要手动寻找验证码刷新请求并填写至相应输入框,与此同时,添加验证码参数至参数列表。 示例:采集京东店铺工商信息。
  
  使用开发者工具(以搜狗浏览器为例,在浏览器中按F12打开)抓包,在目标网页右键点击“审查元素”,选择“NetWork”,先清空所有缓存信息,点击验证码图片,查找验证码刷新请求:
  
  “https://mall.jd.com/sys/vc/createVerifyCode.html?random=0.10473700880101844 ”。
  
  可以发现每次刷新验证码,请求链接中random参数的值都不同,则需要查找random生成的js事件。在网页源码中找到以下代码。
  
  填写js刷新事件于文本框内,值得注意的是,只需修改this.src的值即可。 脚本实例:
  
  var key = EXTRACT.GetSearch(this);
  
  var form = key.Search();
  
  url u;
  
  var postData;
  
  while(form){
  
  var ocrCode = form.verifyCode;
  
  u.urlname = "https://mall.jd.com/"+"showLicence-"+form.text+".html";
  
  u.title = ocrCode;
  
  u.entryid = this.id;
  
  u.tmplid = 1;
  
  postData = "verifyCode="+ocrCode;
  
  var d = EXTRACT.OpenDoc(this,u.urlname,postData,0);
  
  if(d){
  
  pt-table-checksum - Verify MySQL replication integrity.
  
  pt-table-checksum performs an online replication consistency check by executing checksum queries on the master, which produces different results on replicas that are inconsistent with the master.
  
  --[no]check-binlog-format
  
  默认值:yes
  
  指定检查所有服务器上的binlog_format系统参数是否相同。
  
  --check-interval
  
  默认值:1s
  
  指定因为选项'--max-lag'检查之间休眠时间。
  
  --[no]check-replication-filters
  
  默认值:yes
  
  指定检测主从复制是否有设置复制过滤器。默认如果有设置复制过滤器,则工具不进行检查校验操作。
  
  --check-slave-lag
  
  指定主从复制延迟大于选项'--max-lag'指定的值之后暂停检查校验操作。默认情况下,工具会检查所有的从库,但该选项只作用于指定的从库(通过DSN连接方式)。
  
  --chunk-index
  
  指定使用哪个索引对表进行chunk分块操作。默认情况下会选择最优的索引,工具会在SQL语句中添加FORCE INDEX子句。
  
  --chunk-index-columns
  
  指定使用选项'--chunk-index'的索引使用最左前缀几个索引字段,只适用于复合索引。
  
  --chunk-size
  
  默认值:1000
  
  指定表分块的chunk大小,每个chunk需要校验的表行数,允许的后缀单位为k、M、G。
  
  当指定了这个选项会覆盖工具默认动态调整chunk块大小以便在选项'--chunk-time'指定时间内完成行的校验。所以在大多数情况下不建议使用该选项,应该使用选项'--chunk-time'来调整。
  
  --chunk-size-limit
  
  默认值:2.0
  
  指定chunk的行数最多可以超过选项'--chunk-size'指定的行数的多少倍。最小值是1,表示chunk的行数不能超过选项'--chunk-size'指定的值。由于行数是通过explain估算的,所以不建议指定为1。当参数值为0时,则不会检查是否超过指定的行数。
  
  --chunk-time
  
  using FluentMigrator;

namespace test
{
[Migration(20180430121800)]
public class AddLogTable : Migration
{
public override void Up()
{
Create.Table(www.gcyl152.com"Log"www.sanxinyulevip.com )
.WithColumn(www.tiaotiaoylzc.com"Id").AsInt64().PrimaryKey().Identity()
.WithColumn("Text"www.honglanggjpt.cn).AsString();
}

public override void Down(www.gouyiflb.cn/)
{
Delete.Table("Log");
}
}
}
运行迁移类
编写完迁移类之后,我们就可以开始运行迁移类了。

Fluent Migrator有两种运行迁移脚本的方式。

使用进程内执行器(推荐)
使用进程外执行器
使用进程内执行器
所谓的进行内执行器,其实就是借助FluentMigrator.Runner库,在程序内部手动调用IMigrationRunner接口对象的MigrateUp方法执行数据库迁移。

这里我们可以修改Program.cs文件如下。

class Program
{
static void Main(string[www.yongshi123.cn] args)
{
var serviceProvider = CreateServices();

using (var scope = serviceProvider.CreateScope())
{
UpdateDatabase(scope.ServiceProvider);
}
}

private static IServiceProvider CreateServices()
{
return new ServiceCollection()
//添加FluentMigrator基础服务
.AddFluentMigratorCore()
.ConfigureRunner(rb => rb
//添加MySql 5.0支持
.AddMySql5()
//配置连接字符串
.WithGlobalConnectionString("server=localhost;port=3307;Database=abc;UID=root;PWD=123456")
//检索迁移配置
.ScanIn(typeof(AddLogTable).Assembly).For.Migrations())
//启用控制台日志
.AddLogging(lb => lb.AddFluentMigratorConsole())
//构建服务提供器
.BuildServiceProvider(false);
}

private static void UpdateDatabase(IServiceProvider serviceProvider)
{
//初始化进程内迁移构建器
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();

//执行迁移脚本
runner.MigrateUp();
  
  动态调整每个chunk的大小使相应的表行数都在指定的时间内完成校验操作。
  
  如果该选项值设置为0,则不会动态调整chunk的大小,就有可能造成每次校验操作的时间不同,但每个chunk大小还是一致的。
  
  --columns,-c
  
  指定只需要校验的字段,如有多个则用','(逗号)隔开。该选项一般只针对检验一张表时有效,除非有多张表具有相同的字段。
  
  --[no]create-replicate-table
  
  默认值:yes
  
  创建选项'--replicate'指定的数据库和表。表结构与选项'--replicate'指定的结构相同。
  
  --replicate
  
  默认值:percona.checksums
  
  指定保存校验结果的表。创建表的结构如下:
  
  '
  
  CREATE TABLE checksums (
  
  db CHAR(64) NOT NULL,
  
  tbl CHAR(64) NOT NULL,
  
  chunk INT NOT NULL,
  
  chunk_time FLOAT NULL,
  
  chunk_index VARCHAR(200) NULL,
  
  lower_boundary TEXT NULL,
  
  upper_boundary TEXT NULL,
  
  this_crc CHAR(40) NOT NULL,
  
  this_cnt INT NOT NULL,
  
  master_crc CHAR(40) NULL,
  
  master_cnt INT NULL,
  
  ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  
  PRIMARY KEY (db, tbl, chunk),
  
  INDEX ts_db_tbl (ts, db, tbl)
  
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  '
  
  因为选项'--[no]create-replicate-table'默认值为true,所以默认情况下如果数据库和表之前不存在则会自动创建percona库和checksums表。除非另有选项指定。选项'--replicate'指定的表不会进行校验操作,指定的表默认加入选项'--ignore-tables'。
  
  --[no]replicate-check
  
  默认值:yes
  
  指定在校验完每张表后检查主从当前表是否出现不一致。工具通过连接到从库执行简单的SELECT语句查询校验结果与主库的校验结果进行差异对比,结果显示在输出中的DIFF字段中。
  
  --replicate-check-only
  
  指定仅仅执行检查主从数据是否一致而不进执行真正的校验操作(主要通过查询之前保留的校验结果)。该选项只适用于同时指定选项'--no-replicate-check'。
  
  --replicate-check-retries
  
  默认值:1
  
  指定当校验出主从数据不一致重试校验的次数。
  
  --replicate-database
  
  指定工具在执行校验操作时在哪个数据库下进行,相当于执行了语句USE [DB_NAME]。
  
  --resume
  
  指定从最后完成校验的chunk开始恢复校验。适用于还未完成所有表的校验就工具就中断的情况。
  
  --retries
  
  默认值:2
  
  指定当出现非严重性错误时重复校验一个块的次数。非严重性错误指的是如锁等待超时或长查询被kill的情况。
  
  --run-time
  
  指定校验操作运行的时间。默认情况需要校验完所有的表数据后停止,可以指定时间单位为:s(秒)、m(分钟)、h(小时)、d(天)。
  
  --skip-check-slave-lag
  
  DSN类型,可重复使用
  
  指定DSN连接从库时跳过主从延迟检查,可以指定多个从库检查。
  
  --set-vars
  
  默认:
  
  wait_timeout=10000
  
  innodb_lock_wait_timeout=1
  
  lock_wait_timeout=60
  
  运行检查时指定参数值,如有多个用','(逗号)分隔。如'--set-vars=wait_timeout=5000'。
  
  --[no]empty-replicate-table
  
  默认值:yes
  
  指定进行当前校验之前删除之前每张表的校验记录。该选项并不是对保存校验结果的表进行truncate,而是在校验每张表之前删除当前表之前的校验结果,因此当校验操作过早停止,则有可能还有表没有校验数据,如果是从之前校验操作恢复,也不会清空保存校验结果的表。如果想清空保存校验结果的表,则在校验操作进行之前手动对表执行truncate操作。
  
  --databases,-d
  
  指定只需要校验的数据库,如有多个则用','(逗号)隔开。
  
  --engines,-e
  
  指定只需要校验的指定存储引擎类型的表。
  
  --explain
  
  指定显示校验查询语句,但不执行真正的校验操作。该选项会禁用选项'--[no]empty-replicate-table',如果指定两次,则工具实际使用的是迭代的chunk算法,打印出每个块的上边界和下边界值,但不执行真正的校验。
  
  --fail-on-stopped-replication
  
  指定当主从复制停止时,校验中止操作并提示错误而不是等待主从复制恢复之后再进行。
  
  --function
  
  默认值:CRC32
  
  指定校验操作使用的哈希函数。可选函数有SHA1、MD5等。
  
  --ignore-columns
  
  指定需要忽略校验的字段,如有多个则用','(逗号)隔开。
  
  --ignore-databases
  
  指定需要忽略校验的数据库,如有多个则用','(逗号)隔开。
  
  --ignore-databases-regex
  
  指定采用正则表达式匹配忽略校验的数据库。
  
  --ignore-engines
  
  默认值:FEDERATED,MRG_MyISAM
  
  指定需要忽略校验的存储引擎类型的表,如有多个则用','(逗号)隔开。
  
  --ignore-tables
  
  指定需要忽略校验的表,如有多个则用','(逗号)隔开。表名称可以使用数据库名加以限定。
  
  --ignore-tables-regex
  
  指定采用正则表达式匹配忽略校验的表。
  
  --max-lag
  
  默认值:1s
  
  指定允许主从复制延迟时长的最大值,单位秒。如果在每次校验查询之后主从延迟超过指定的值,则校验操作将暂停执行,暂停休眠时间为选项'--check-interval'指定的值。待休眠时间结束之后再次检查主从延迟时长,检查方法是通过从库查询的'Seconds_Behind_Master'值来确定。如果主从复制延迟一直大于该参数指定值或者从库停止复制,则操作将一直等待直到从库重新启动并且延迟小于该参数指定值。
  
  --max-load
  
  数组类型,默认值:Threads_running = 25
  
  在校验要询完每个chunk数据之后,运行SHOW GLOBAL STATUS检查所指定变量值高于该参数指定变量的阈值时将暂停校验操作。如果有多个变量阈值,可以用','(逗号)进行分隔,参数指定形式可以为变量名=MAX_VALUE或变量名:MAX_VALUE。
  
  如果只是指定变量名,没有为其指定阈值,则检查当前值并增加20%作为阈值。如:
  
  --max-load=Threads_running:没有指定具体值,以当前查询值增加20%作为阈值,如当前为100,阈值为120;
  
  --max-load=Threads_running:10:以当前指定值为阈值。
  
  --host,-h
  
  指定连接的数据库IP地址。
  
  --port,-P
  
  指定连接的数据库Port端口。
  
  --user,-u
  
  指定连接的数据库用户。
  
  --password,-p
  
  指定连接的数据库用户密码。
  
  --database,-d
  
  指定连接的数据库。
  
  --socket,-S
  
  指定使用SOCKET文件连接。
  
  --progress
  
  打印工具执行过程的进度提示到STDERR。选项值有两部分组成,用逗号进行分隔,第一部分为百分比,时间和迭代。第二部分为根据第一部分数据更新频率,也分为百分比,时间和迭代。
  
  --quiet,-q
  
  不打印工具执行过程的信息到STDOUT(禁用'--progress')。但错误和警告还是打印到STDERR。
  
  --recurse
  
  指定搜寻从库的层级,默认无限级。
  
  --recursion-method
  
  默认值:processlist,hosts
  
  指定获取从库的方式。pt-table-checksum在执行校验操作时会执行多次REPLICA CHECKS操作。
  
  METHOD USES
  
  =========== =============================================
  
  processlist SHOW PROCESSLIST
  
  hosts SHOW SLAVE HOSTS
  
  cluster SHOW STATUS LIKE 'wsrep\_incoming\_addresses'
  
  dsn=DSN DSNs from a table
  
  none Do not find slaves
  
  ==========================================================
  
  processlist:通过SHOW PROCESSLIST方式找到slave,为默认方式,当SHOW SLAVE HOSTS不可用时。一旦实例运行在非3306端口上时,hosts方式就会变为默认方式;
  
  hosts:通过SHOW SLAVE HOSTS方式找到slave,hosts方式要求从库配置'--report_host'和'--report_port'这两个参数;
  
  cluster:基于集群版本Galera 23.7.3及更新版本;
  
  dsn:通过读取表中从库的DSN信息进行连接。
  
  --tables,-t
  
  指定只需要校验的表,如有多个则用','(逗号)隔开。表名称可以使用数据库名加以限定。
  
  --tables-regex
  
  指定采用正则表达式匹配校验的表。
  
  --where
  
  指定通过where条件确定表中需要校验的数据。
  
  --truncate-replicate-table
  
  指定在执行校验操作之前对保存校验结果的表执行truncate操作。注意与选项'--[no]empty-replicate-table'的区分。
  
  --version
  
  显示工具的版本并退出。
  
  --[no]version-check
  
  默认值:yes
  
  检查Percona Toolkit、MySQL和其他程序的最新版本。

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/10653651.html