ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 已解决:Power query抓取动态网页出现的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-3 22:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 arno61361 于 2019-1-4 10:15 编辑

网页地址:http://59.57.63.76:28098/axjsj_w ... =fdcxxfb&title=ysfy

方案一:
let Getdata = (pg)=>
let
    源 = Web.Page(Web.Contents("http://59.57.63.76:28098/axjsj_web/xygs.do?method=fdcxxfb&title=ysfy&id"&pg&"&type=")),
    Data1 = 源{1}[Data],
    更改的类型 = Table.TransformColumnTypes(Data1,{{"坐落", type text}, {"房屋户型", type text}, {"街道", type text}, {"预测总面积(㎡)", type number}, {"预测单价(元)", type number}, {"用途", type text}})
in
    更改的类型
in
    Getdata

问题提示:
在“page”查询中出错。Expression.Error: 无法将运算符 & 应用于类型 Text 和 Number。
详细信息:
    Operator=&
    Left=http://59.57.63.76:28098/axjsj_web/xygs.do?method=fdcxxfb&title=ysfy&id
    Right=1

方案二:
let Getdata = (pg)=>
let
    源 = Web.Page(Web.Contents("http://59.57.63.76:28098/axjsj_web/xygs.do?method=fdcxxfb&title=ysfy&id="& Number.ToText(page) &"")),
    Data1 = 源{1}[Data],
    更改的类型 = Table.TransformColumnTypes(Data1,{{"坐落", type text}, {"房屋户型", type text}, {"街道", type text}, {"预测总面积(㎡)", type number}, {"预测单价(元)", type number}, {"用途", type text}})
in
    更改的类型
in
    Getdata


问题提示:
在“page”查询中出错。Expression.Error: 无法将类型 Function 的值转换为类型 Number。
详细信息:
    Value=Function
    Type=Type


求指点,谢谢!

TA的精华主题

TA的得分主题

发表于 2019-1-3 23:15 | 显示全部楼层
  1. import requests

  2. url = 'http://59.57.63.76:28098/axjsj_web/xygs.do?method=fdcxxfb&title=ysfy'
  3. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
  4. def crawl_html(postdata):
  5.     r = requests.post(url=url, data=postdata, headers=headers)
  6.     pars_html(r.text)


  7. def pars_html(html):
  8.     print(html)


  9. if __name__ == '__main__':
  10.         for i in range(1,11):
  11.             postdata = {'location':None,'hx':None,'prePrice1':None,'prePrice2':None,'preBuildArea1':None,'preBuildArea2':None,'buildname':None,'projectname':None,
  12.                         'usestr': 'סլ',
  13.                         'currentPage': i,
  14.                         'skipNum': i}
  15.             crawl_html(postdata)
  16.             break
复制代码

TA的精华主题

TA的得分主题

发表于 2019-1-4 07:47 | 显示全部楼层
你这网页是post参数的。你这需要推倒重来。不然翻不了页面。。

TA的精华主题

TA的得分主题

发表于 2019-1-4 07:50 | 显示全部楼层
  1. let
  2.     page={1..2},//抓取第1页到第2页
  3.    
  4.     getdata=(P as number) as table =>
  5.    
  6.     let
  7.         url = "http://59.57.63.76:28098/axjsj_web/xygs.do",
  8.         headers=[#"Content-Type"="application/x-www-form-urlencoded"],
  9.         query=[method="fdcxxfb",title="ysfy"],
  10.         content="currentPage=" & Text.From(P),
  11.         source=Web.Page(Text.FromBinary(Web.Contents(url,[Headers=headers,Query=query,Content=Text.ToBinary(content)]),936))[Data]{1}
  12.     in
  13.         source,
  14.     tb=Table.FromList(page,Splitter.SplitByNothing(),{"page"}),
  15.     res = Table.Combine(Table.AddColumn(tb, "web", each getdata())[web])
  16. in
  17.     res
复制代码

2019-01-04_074847.jpg

TA的精华主题

TA的得分主题

发表于 2019-1-4 09:20 | 显示全部楼层
看附件吧。发现上面的函数里面的page参数放在中括号里就丢失了,我编辑内容的时候却看得到.
PQ网抓.rar (15.64 KB, 下载次数: 59)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-4 09:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢您!不过您的代码存在错误:错误提示:“应为令牌 Eof”,好像是起始代码:requests

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-4 09:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢您的帮助,您的代码还是有个问题,目前所能抓取的最大数据为行数200行,不是网页的页面数。请问改如何突破这个限制?

TA的精华主题

TA的得分主题

发表于 2019-1-4 09:30 | 显示全部楼层
arno61361 发表于 2019-1-4 09:24
谢谢您的帮助,您的代码还是有个问题,目前所能抓取的最大数据为行数200行,不是网页的页面数。请问改如 ...

你网络不行。我翻了18页就是360条记录了。 TIM截图20190104092935.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-4 09:48 | 显示全部楼层
fxl447098457 发表于 2019-1-4 09:30
你网络不行。我翻了18页就是360条记录了。

呀还真是我的网页问题,连论坛的表情都不能显示。真是不好意思了!!!

TA的精华主题

TA的得分主题

发表于 2019-1-4 12:10 | 显示全部楼层
arno61361 发表于 2019-1-4 09:22
谢谢您!不过您的代码存在错误:错误提示:“应为令牌 Eof”,好像是起始代码:requests

抓取428页,共计8559条信息,秒秒钟的事情》》》》》》》》》》》》》》》》》》》》》》
  1. # -*- coding: utf-8 -*-
  2. import asyncio, aiohttp, time
  3. from lxml import etree
  4. import pandas as pd

  5. sema = asyncio.Semaphore(100)
  6. url = 'http://59.57.63.76:28098/axjsj_web/xygs.do?method=fdcxxfb&title=ysfy'
  7. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}

  8. async def crawl_html(post_data, sess):
  9.     try:
  10.         async with sess.post(url=url, data=post_data, headers=headers) as res:
  11.             return await res.read()
  12.     except Exception:
  13.         pass

  14. async def crawl_spider(post_data):
  15.     async with aiohttp.ClientSession() as sess:
  16.         async with sema:
  17.             pars_html(await crawl_html(post_data, sess))

  18. def pars_html(html):
  19.     etr = etree.HTML(html)
  20.     title_list = etr.xpath('//form[@id="XygsForm"]/table//table[1]/tr[@class="eg_mainlist"]')
  21.     for tr in title_list:
  22.         tr_list = [tr.xpath('./@title')[0].strip(),
  23.                     tr.xpath('./td[2]/text()')[0].strip(),
  24.                     tr.xpath('./td[3]/text()')[0].strip(),
  25.                     tr.xpath('./td[4]/text()')[0].strip(),
  26.                     tr.xpath('./td[5]/text()')[0].strip(),
  27.                     tr.xpath('./td[6]/text()')[0].strip()]
  28.         my_list.append(tr_list)

  29. def crawl():
  30.     tasks = []
  31.     for i in range(1, 439):#抓取页码设置,共抓取428页,共计8559条
  32.         post_data = {'usestr': 'סլ', 'currentPage': i, 'skipNum': i}
  33.         tasks.append(crawl_spider(post_data))
  34.     loop = asyncio.get_event_loop()
  35.     loop.run_until_complete(asyncio.wait(tasks))
  36.     loop.close()

  37. if __name__ == '__main__':
  38.     t = time.time()
  39.     my_list = []
  40.     crawl()
  41.     df = pd.DataFrame(my_list)
  42.     df.columns = ['坐落', '房屋户型', '街道', '预测总面积(㎡)', '预测单价(元)', '用途']
  43.     with pd.ExcelWriter(r'output.xlsx') as writer:#写入Excel文件
  44.         df.to_excel(writer, 'Sheet1', index=False, header=True)
  45.     print(time.time() - t)
复制代码

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

本版积分规则

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

GMT+8, 2024-11-17 21:26 , Processed in 0.045648 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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