Web scraping Power BI(Power Query)Web请求的结果为;CR后面必须跟LF“;错误

Web scraping Power BI(Power Query)Web请求的结果为;CR后面必须跟LF“;错误,web-scraping,newline,powerbi,powerquery,m,Web Scraping,Newline,Powerbi,Powerquery,M,当您使用Web.Page(Web.Contents('url'))函数从网页读取表格时,某些网站会由于换行不一致而导致错误 DataSource.Error:服务器违反了协议。章节=负责人详细信息=CR后面必须跟LF 似乎没有任何选项可以传递给Web函数以忽略这些错误 此方法暂时有效,但无法保存/刷新: let BufferedBinary = Binary.Buffer(Web.Contents("http://vote.sos.ca.gov/returns/president/part

当您使用Web.Page(Web.Contents('url'))函数从网页读取表格时,某些网站会由于换行不一致而导致错误

DataSource.Error:服务器违反了协议。章节=负责人详细信息=CR后面必须跟LF

似乎没有任何选项可以传递给Web函数以忽略这些错误

此方法暂时有效,但无法保存/刷新:

let
   BufferedBinary = Binary.Buffer(Web.Contents("http://vote.sos.ca.gov/returns/president/party/democratic/county/all")),
   CleanedUp = Text.Replace(Text.Replace(Text.FromBinary(BufferedBinary), "#(cr,lf)", "#(lf)"), "#(lf)", "#(cr,lf)"),
   Table = Web.Page(CleanedUp)
in
   Table

它可能看起来像其他代码示例,但这可能意味着它还没有运行


两个库函数
Web.Contents('url')
Web.Page(Web.Contents('url'))
使用不同的HTTP客户端

Web.Contents
使用非常基本的HTTP客户端,但是
Web.Page
通过未转换的
Web。Contents
将使用IE浏览器直接加载URL。IE非常宽容任何HTTP协议错误,但是基本HTTP客户端要严格得多,这会导致您看到的错误

通过调用“中间”中的
Binary.Buffer
Text.Replace
,将跳过
Web.Page
直接使用浏览器的优化,而使用
Web.Contents
发出Web请求,然后将这些字节加载到浏览器中

因此,在本例中,如果调用:

Web.Page(Web.Contents("http://vote.sos.ca.gov/returns/president/party/democratic/county/all"))
您将得到一个很好的结果表,但是“来自Web”将被破坏,因为
Web.Contents('url')
本身将出错


因为你共享了这个URL,所以我可以尝试解决同样的问题

根本问题是HTTP响应头中的第四个cookie在中间有一个无效的十六进制字符0x01:

也许这是可以在他们的服务器上修复的东西?我试着在他们的联系我们页面上提交一份“错误报告”,但我不确定这是正确的渠道



顺便说一句,我们的HTTP客户端库没有给出很好的错误消息,CR或LF字符没有问题。即使有,也没有响应体上的
Text.Replace
可以解决这种情况,因为问题出在HTTP响应头上。

非常感谢您深入研究,我非常感谢。是的,它似乎主要与CDN或API产品“Incapsula”有关,该产品在本网站和其他网站上使用。