[已解决] pq如何网抓多页数据?

  [复制链接]
查看141033 | 回复136 | 2021-2-18 19:44:44 | 显示全部楼层 |阅读模式
刚接触PQ的网抓,遇到这样一个网页,目前只能对单页抓包,无法遍历多页。请大佬们请点,在此感谢了!
http://data.eastmoney.com/xg/xg/default.html
回复

使用道具 举报

Rigo | 2021-2-18 19:53:45 | 显示全部楼层
PowerQuery参考解法
10870111524501.png
10870111524503.zip (919.09 KB, 下载次数: 0)
回复

使用道具 举报

bjgame | 2021-2-18 19:58:45 | 显示全部楼层
PowerQuery参考解法


感谢大神帮助,还有两点需请教:
1、我想把Url的……p=#{0}……,直接改成:……p=_……,这样可以直接省略:Text.Format(Url,{_}),这样可以吗?
2、Web.Contents的第二可选参数,本例好像可以省之。请问哪些地方必须有,哪些地方无必要?
再次感谢!!!
回复

使用道具 举报

KLX | 2021-2-18 20:01:45 | 显示全部楼层
感谢大神帮助,还有两点需请教:
1、我想把Url的……p=#{0}……,直接改成:……p=_……,这样可以直接 ...


试试就知道
回复

使用道具 举报

goodtime | 2021-2-18 20:05:45 | 显示全部楼层
感谢大神帮助,还有两点需请教:
1、我想把Url的……p=#{0}……,直接改成:……p=_……,这样可以直接 ...


原来没有老老实实写过PQ的网抓的操作步,这次就和你一起复习一下。我把参数逐个试了个遍,最后精简成这样:
  1. let

  2.   Scrape = (pg as number) =>

  3.   let

  4.   url = "http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get",

  5.   qry = [type="XGSG_LB", token="70f12f2f4f091e459a279469fe49eca5", st="purchasedate,securitycode", sr="-1", p=Text.From(pg), ps="50"],

  6.   web = Table.FromRecords(Json.Document(Text.FromBinary(Web.Contents(url, [Query=qry]))))

  7.   in

  8.   web,

  9.   

  10.   Source = Table.Combine(List.Transform({1..50}, each Scrape(_)))

  11. in

  12.   Source
复制代码


先说第2点,从浏览器的抓包来看,每个页面都是GET请求,所以这两种写法等效:
  1. Web.Contents("http://xxx.xx.xxx/get?kw1=aa&kw2=bb&kw3=cc")

  2. Web.Contexts("http://xxxx.xx.xxx/get", [Query=[kw1="aa", kw2="bb", kw3="cc"]]
复制代码
我耐着性子把Query和Headers里的参数试了个遍,貌似st是用来排序的,sr不详但还是得要,p是当前页数,ps是每页显示数量;其他的参数都省略了,好像没什么影响。


你提到的第1点行不通,因为那样没办法把“第x页”作为参数传递进去;这里要对@deadzlq老师表达一下敬佩之情,原来从没留意过Text.Format(Url,{_})的语法,今天总算看到实际的用法了!


10870111524504.rar (1 MB, 下载次数: 0)
回复

使用道具 举报

wpq88 | 2021-2-18 20:13:46 | 显示全部楼层
试试就知道


非常感谢!
回复

使用道具 举报

彬彬 | 2021-2-18 20:14:46 | 显示全部楼层
原来没有老老实实写过PQ的网抓的操作步,这次就和你一起复习一下。我把参数逐个试了个遍,最后精简成这样 ...


非常感谢大神耐心细致地讲解,把每一步都分解出来了,让初学者非常有益。但是,有2点需再讲教:
1、老师的附件,刷新后有点小Bag(详见图片),不知是哪里出错了?
2、我在3楼提问中的第1点试过,好像可以呢(详见附件)?
PS,现在没有小花了,下午再及时送上,见谅! 10870111524502.png
10870111524505.rar (921.87 KB, 下载次数: 0)
回复

使用道具 举报

gwq1001 | 2021-2-18 20:23:46 | 显示全部楼层
非常感谢大神耐心细致地讲解,把每一步都分解出来了,让初学者非常有益。但是,有2点需再讲教:
1、老师 ...


过誉了,我不是大神,只是一个普通的学习者,可能只是稍微早一点开始学习相关知识。

1. 我用PQ for EXCEL和POWER BI都试了一下,都重现不了这个错误;google了一下,也没能找到关于这个报错的有用信息。会不会和电脑内存容量或操作系统的缓存页面大小有关?你把页面数量减少至{1..30}试一下看看?

2. 我看了你的附件,如果不用Text.Format(),那么“第X页”的参数就没法传入到每个query里,所以抓的始终是第一页(最后结果的每50行都是重复的)。
回复

使用道具 举报

sarses | 2021-2-18 20:28:46 | 显示全部楼层
过誉了,我不是大神,只是一个普通的学习者,可能只是稍微早一点开始学习相关知识。

1. 我用PQ for EX ...


再次感谢,老师说的两点都对!
1、改成10页就没问题了;2、不可省Text.Fromat(),否则无法遍历。
回复

使用道具 举报

蕉爸爸 | 2021-6-11 07:25:26 | 显示全部楼层
啥玩应呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则