本帖最后由 Eric0236 于 2022-7-30 11:58 编辑
经常看到坛友遇到PQ网抓时,问这样的问题,为什么页面上看到的是这个样子,怎么没有内容啊?为什么和PowerBI不一样?
其实并不是没有内容,只是他们藏的比较深,需要一点点手动挖掘,以前我是一层一层瞎点点,也需要花很长时间才能找到需要的内容。昨天在解决Saint_Zuo童鞋疑问的时候,找到了一个比较精准的定位方法,分享给大家。
我们以当当网2021年的畅销书榜单举例,http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-year-2021-0-1-1
PQ输入网址后,我们依然看到这样的内容
我们首先选择Web视图,看看显示的内容里面有没有我们需要的
和浏览器上显示的一致,里面也有榜单内容,每页20本书。
接下来我们就进行下一步。PQ先放一放,来到浏览器中的页面,在第一本书的名称上右键,检查,打开开发者工具(我这里是Firefox浏览器,其他浏览器的进入名称可能会不同)。
我们在查看器中可以看到这个书名,同时,鼠标放在这条标签内容上时,网页相应内容也会高亮。
接着,我们在这条标签上右键,复制,XPath,我们就复制了书名的XPath路径
贴到记事本上就是这个样子的,/html/body/div[3]/div[3]/div[2]/ul/li[1]/div[3]/a
我们把需要提取的内容的路径都找出来
发现前面一大段路径都是一样的,那这些东西有什么用,我说,这就是路标,是地图,我们可以按照他的提示一层一层往下挖,让我们回到刚才的PQ中,点击确定后进去看看。
进去后发现,也只有Children下的Table可以点
然后是BODY的这个Table,进去之后是这样的,而此时,我们走到了地图的这里
接下来的div[3],代表着第3个div,也就是他
继续照着地图走,第3个div,第2个div,ul,到这里,我们看到了整整齐齐的20行,而页面中也就是20本书,每本书的内容都在这个Table里面
我们停下来看看地图,这个时候走到了这里,而后面的LI代表了每一本书,这里的LI[1]就是第一本,第20本就是LI[20],也可以通过复制其他书的XPath路径来验证一下 由于需要提取的内容处在不同的层级,如果继续向下深化,可能需要花很多时间来规整格式。既然有了地图,就可以通过添加列的方式,一项一项提取。比如第1个序号,添加一个自定义列,双击右侧Children,把[Children]列拿进来,确定
点击序号下面Table单元格空白处(不是Table文字),可以在下方看到里面的内容
根据序号的地图,我们需要的是第一个div,也就是第一个Children,所以这里只需要在公式中直接深化出第一个Children的Table,变成= Table.AddColumn(Children6, "序号", each [Children]{0}[Children]),这里需要注意的是,向下深化的时候,PQ计数是从0开始的,地图显示已经到达终点了,而我们也确实在Table中看到了序号
然后只需要把他深化出来就行了,在最后的[Children]后面加上{0}[Text],当然也可以再套一个Text.Remove,顺手把数字后面的点去掉
后面,我们就是继续按照地图,把每一列依次添加出来
二楼继续
|