ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 519|回复: 0

[求助] 使用PQ网抓多页数据时,如何设置网抓的延时?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-5-26 15:51 | 显示全部楼层 |阅读模式
各位老师好,我最近写了一个多页数据的网抓,可是发现抓取的数据不稳定,有时候刷新有些数据能刷出来,有些数据刷新不出来,我刚怀疑是刷新太频繁,被网站限制了,于是想着增加一些网抓的延时,来保证抓取数据的稳定性。

现在我有一个疑问,增加延时使用Function.InvokeAfter时,我应该是
方案一:先网抓---设置延时----网抓结果出来后的数据清洗      
方案二:网抓---数据清洗----然后再设置延时。
其实就是我再自定义参数fx的时候,是指定义网抓部分,还是把网抓部分还数据清洗部分都直接给定义进去。


还有就是想请老师看下 我这样写的延时对不对  是不是最优的 延迟30秒网抓,设置30秒的延时会不会好网抓多个数据时稳定很多。


已调用自定义函数 = Table.AddColumn(替换的值, "fx", each Function.InvokeAfter(()=>fx([#"Booking#"]),Duration.FromText("00:00:30"))),




网抓多页数据的fx函数如下:
  1. (page)=>let
  2.     url="https://www.cma-cgm.com.cn/LaraToolkit/BookingInquery/BookingInqueryData",//必填项:网页真实的网址链接
  3.     headers=[#"Content-Type"="application/x-www-form-urlencoded; charset=UTF-8",Referer="https://www.cma-cgm.com.cn/LaraToolkit/BookingInquery"],             //必填项:Content-Type必填,Referer防盗链接最好填写上
  4.     query=[],//选填项:网址的一些查询参数,一般Requset URL中?后面的部分,既可以写在URl里面,也可以写在这里面
  5.     content="BookingNo="&page,  //必填项
  6.     web=Text.FromBinary(Web.Contents(url,[Headers=headers,Query=query,Content=Text.ToBinary(content)])),
  7.     #"解析的 JSON" = Json.Document(web),
  8.     data = #"解析的 JSON"[data],
  9.     拆分文本 = Text.Split(data, "<br/>"),
  10.     转换为表 = Table.FromList(拆分文本, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
  11.     筛选的行 = Table.SelectRows(转换为表, each Text.Contains([Column1], ": ")),
  12.     筛选的行1 = Table.SelectRows(筛选的行, each not Text.Contains([Column1], "<p")),
  13.     按分隔符拆分列 = Table.SplitColumn(筛选的行1, "Column1", Splitter.SplitTextByEachDelimiter({": "}, QuoteStyle.Csv, false), {"Column1.1", "Column1.2"}),
  14.     更改的类型 = Table.TransformColumnTypes(按分隔符拆分列,{{"Column1.1", type text}, {"Column1.2", type text}}),
  15.     转置表 = Table.Transpose(更改的类型),
  16.     提升的标题 = Table.PromoteHeaders(转置表, [PromoteAllScalars=true]),
  17.     更改的类型1 = Table.TransformColumnTypes(提升的标题,{{"提单号", type text}, {"目的港名称", type text}, {"目的地名称", type text}, {"船名", type text}, {"航次", type text}, {"航线", type text}, {"开船日期", type datetime}, {"尺寸", type text}}),
  18.     替换的值 = Table.ReplaceValue(更改的类型1,"                ","",Replacer.ReplaceText,{"尺寸"}),
  19.     已添加自定义 = Table.AddColumn(替换的值, "箱子信息", each "尺寸:"&[尺寸]),
  20.     删除的列 = Table.RemoveColumns(已添加自定义,{"尺寸"}),
  21.     按分隔符拆分列1 = Table.SplitColumn(删除的列, "箱子信息", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"箱子信息.1", "箱子信息.2", "箱子信息.3"}),
  22.     更改的类型2 = Table.TransformColumnTypes(按分隔符拆分列1,{{"箱子信息.1", type text}, {"箱子信息.2", type text}, {"箱子信息.3", type text}}),
  23.     重命名的列 = Table.RenameColumns(更改的类型2,{{"箱子信息.1", "尺寸"}, {"箱子信息.2", "类型"}, {"箱子信息.3", "箱量"}}),
  24.     替换的值1 = Table.ReplaceValue(重命名的列,"尺寸:","",Replacer.ReplaceText,{"尺寸"}),
  25.     替换的值2 = Table.ReplaceValue(替换的值1,"类型: ","",Replacer.ReplaceText,{"类型"}),
  26.     替换的值3 = Table.ReplaceValue(替换的值2,"箱量: ","",Replacer.ReplaceText,{"箱量"}),
  27.     合并的列 = Table.CombineColumns(替换的值3,{"尺寸", "类型"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"尺寸类型")
  28. in
  29.     合并的列
复制代码


然后调取多个page的代码
  1. let
  2.     源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
  3.     更改的类型 = Table.TransformColumnTypes(源,{{"Booking#", type text}, {"Carrier name", type text}}),
  4.     筛选的行 = Table.SelectRows(更改的类型, each ([#"Booking#"] <> null)),
  5.     替换的值 = Table.ReplaceValue(筛选的行," ","",Replacer.ReplaceText,{"Booking#"}),
  6.     已调用自定义函数 = Table.AddColumn(替换的值, "fx", each Function.InvokeAfter(()=>fx([#"Booking#"]),Duration.FromText("00:00:30"))),
  7.     删除的错误 = Table.RemoveRowsWithErrors(已调用自定义函数, {"fx"}),
  8.     #"展开的“fx”" = Table.ExpandTableColumn(删除的错误, "fx", {"提单号", "目的港名称", "目的地名称", "船名", "航次", "航线", "开船日期", "尺寸类型", "箱量"}, {"提单号", "目的港名称", "目的地名称", "船名", "航次", "航线", "开船日期", "尺寸类型", "箱量"})
  9. in
  10.     #"展开的“fx”"
复制代码




您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 09:52 , Processed in 0.025201 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表