ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何使用PQ抓取贝壳上的房产信息(可以抓包,但是不好解析)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-10 11:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位老师好:像从贝壳上抓取二手房的信息,抓包可以正常的抓取到,就是解析的时候,不是标准的table格式,请问该如何使用PQ进行解析出房产表格?
使用Python是比较容易抓取的,抓到之后用正则或者其他方法都可以很容易解析出来,但是用PQ不知道该如何解析了?
请问各位老师,有没有好的解析方法,具体网址和网抓信息如下:
网址:郑州三室7日新上二手房_郑州三室7日新上二手房出售买卖信息网【郑州贝壳找房】 (ke.com)

  1. let
  2.     url="https://zz.ke.com/ershoufang/tt2l3/",                             //必填项:网页真实的网址链接
  3.     headers=[Referer=""],   //选填项:Referer防盗链接有些网站需要填这个,否则数据加载不出来,建议填上更稳妥些
  4.     query=[],                       //选填项:网址的一些查询参数,一般Requset URL中?后面的部分,既可以写在URl里面,也可以写在这里面
  5.     web=Text.FromBinary(Web.Contents(url,[Headers=headers,Query=query]))
  6. in
  7.     web
复制代码


微信截图_20231110114946.png 22.png

TA的精华主题

TA的得分主题

发表于 2023-11-10 15:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
试试把抓到的内容放在Html.Table()里(貌似PBI的PQ支持这个函数,我的Excel PQ没有)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-10 16:44 | 显示全部楼层
ThxAlot 发表于 2023-11-10 15:38
试试把抓到的内容放在Html.Table()里(貌似PBI的PQ支持这个函数,我的Excel PQ没有)

PBI中是支持这个的,但是Excel中没有,所以不知道如何在excel中进行操作。
  1. let
  2.     源 = Web.BrowserContents("https://zz.ke.com/ershoufang/tt2l3/"),
  3.     #"从 Html 中提取的表" = Html.Table(源, {{"Column1", ".info .VIEWDATA"}, {"Column2", ".positionIcon + *"}, {"Column3", ".houseInfo"}, {"Column4", ".followInfo"}, {"Column5", ".totalPrice SPAN"}, {"Column6", ".unitPrice *"}, {"Column7", ".info .VIEWDATA + *"}, {"Column8", ".isVrFutureHome"}, {"Column9", ".isVrFutureHome + *"}, {"Column10", ".follow-text"}, {"Column11", "I:nth-child(3)"}, {"Column12", ".is_key"}, {"Column13", ".subway"}, {"Column14", ".taxfree"}, {"Column15", ".two"}}, [RowSelector=".info .VIEWDATA"]),
  4.     更改的类型 = Table.TransformColumnTypes(#"从 Html 中提取的表",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", Int64.Type}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type text}, {"Column15", type text}})
  5. in
  6.     更改的类型
复制代码

TA的精华主题

TA的得分主题

发表于 2023-11-10 21:23 来自手机 | 显示全部楼层
本帖最后由 一江春水1688 于 2023-11-10 21:26 编辑
  2023-11-10 16:44
PBIExcelУexcelнв
气死了,回复又转手机页面,汉字全部乱码!

Excel更新速度远不及PBI,很多函数都没有
可考虑使用Splitter类函数定位,比较麻烦

TA的精华主题

TA的得分主题

发表于 2023-11-10 21:38 | 显示全部楼层
星梦月缘 发表于 2023-11-10 16:44
PBI中是支持这个的,但是Excel中没有,所以不知道如何在excel中进行操作。

用Text.FromBinary(Web.Contents(url))获取网页代码
用拆分函数定位

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-10 22:06 | 显示全部楼层
各位老师好,我尝试了好几种方法,找到了一个比较笨的解决方法,整体思路就是:
1、对网页进行文本解析,然后进行按文本字符拆分
2、先把这一条记录的大的模块找到的开头的内容,然后进行拆分,之后转换成列表,筛选包含的关键字,最终实现,一条记录,一个大的模块代码。
3、分别用增加列的方法,从整条记录的模块中,提取下面小模块的关键字内容,层层提取,最终得到自己想要的每一个标题,位置,价格等信息。

    拆分文本 = Text.Split(web, "<li class=""clear"">"),
    转换为表 = Table.FromList(拆分文本, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    筛选的行 = Table.SelectRows(转换为表, each Text.Contains([Column1], "VIEWDATA CLICKDATA")),
    已插入分隔符之间的文本 = Table.AddColumn(筛选的行, "分隔符之间的文本", each Text.BetweenDelimiters([Column1], "VIEWDATA CLICKDATA maidian-detail", "</a>"), type text),
    已提取分隔符之间的文本 = Table.TransformColumns(已插入分隔符之间的文本, {{"分隔符之间的文本", each Text.BetweenDelimiters(_, "title=""", """"), type text}}),
    已插入分隔符之间的文本1 = Table.AddColumn(已提取分隔符之间的文本, "分隔符之间的文本.1", each Text.BetweenDelimiters([Column1], "positionInfo", "</div>"), type text),
    已提取分隔符之间的文本1 = Table.TransformColumns(已插入分隔符之间的文本1, {{"分隔符之间的文本.1", each Text.BetweenDelimiters(_, "/"">", "</a>"), type text}}),
    已插入分隔符之间的文本2 = Table.AddColumn(已提取分隔符之间的文本1, "分隔符之间的文本.2", each Text.BetweenDelimiters([Column1], "unitPrice", "</div>"), type text),
    已提取分隔符之间的文本2 = Table.TransformColumns(已插入分隔符之间的文本2, {{"分隔符之间的文本.2", each Text.BetweenDelimiters(_, "<span>", "</span>"), type text}}),
    筛选的行1 = Table.SelectRows(已提取分隔符之间的文本2, each ([分隔符之间的文本] <> "")),
    替换的值 = Table.ReplaceValue(筛选的行1,"/平","",Replacer.ReplaceText,{"分隔符之间的文本.2"}),
    删除的列 = Table.RemoveColumns(替换的值,{"Column1"}),
    替换的值1 = Table.ReplaceValue(删除的列,"元","",Replacer.ReplaceText,{"分隔符之间的文本.2"}),
    重命名的列 = Table.RenameColumns(替换的值1,{{"分隔符之间的文本", "标题"}, {"分隔符之间的文本.1", "所属小区"}, {"分隔符之间的文本.2", "单价"}})
in
    重命名的列

TA的精华主题

TA的得分主题

发表于 2023-11-10 22:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-11-11 12:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ThxAlot 发表于 2023-11-10 15:38
试试把抓到的内容放在Html.Table()里(貌似PBI的PQ支持这个函数,我的Excel PQ没有)

EXCEL 365可以

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-13 09:08 | 显示全部楼层

365版本没有吧,我昨天还专门尝试了下  还没有html。table的函数功能。

TA的精华主题

TA的得分主题

发表于 2023-11-13 09:27 | 显示全部楼层
星梦月缘 发表于 2023-11-13 09:08
365版本没有吧,我昨天还专门尝试了下  还没有html。table的函数功能。

有的  我的就是365版本的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 08:05 , Processed in 0.047168 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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