c#抓取网页数据(PowerQuery与GET方法有什么区别呢?(一))
优采云 发布时间: 2022-01-16 06:11c#抓取网页数据(PowerQuery与GET方法有什么区别呢?(一))
我之前写过很多关于 Power Query 网络爬取的教程。根据网络数据传输的方式,文章中的那些爬取方式都是通过GET方式获取的,那么POST和GET方式有什么区别呢?
这是W3C官网的内容,请参考:
GET 和 POST 方法都可用于向服务器发起请求。至于服务器支持哪种方式,我们需要通过谷歌浏览器查看:
GET方法用于在浏览器地址提交查询条件,如下所示:
GET方法下面通常是查询条件字符串Query String Parameters:
这样的 URL 非常标准,没有各种问号、等号和连字符,通常是 POST 方法:
POST 方法下面是表单数据:
很多时候网站同时支持两种查询方式:
上面的 网站 是两种方法都支持的 网站。
最后,GET和POST这两种方式在传输数据时最大的不同就是编码方式:
让我们回到 Power Query 爬行。之前不明白如何实现POST提交数据爬取。看了几篇文章的文章,基本上就是用一个函数实现GET和POST爬取。,唯一的区别在于HEADER头文件的写法和查询条件的编码。
GET方法查询:
让
url="", //网址
headers=[Cookie=""], //标题
query=[], //查询字符串参数
web=Text.FromBinary(Web.Contents(url,[Headers=headers,Query=query]))
在
网络
上面的代码可以应用于大多数 GET 方法站点,其中:
Web.Contents(url,[Headers=headers,Query=query])
当然,很多时候,我们匿名抓取数据的时候,不需要登录或者cookie,也不需要写头文件。我们直接将页码等查询条件添加到一长串url中,省略Web.Contents函数。第二个参数,这就是为什么我说上一句查询都是GET查询。
POST 查询:
我们主要讲的是这个POST方法的获取。与GET方式最大的不同就是头文件headers不能省略,所以必须使用Web.Contents函数的第二个参数。我们将通过一个示例来说明如何编写代码来执行 POST 请求:
第一步:还是做网站分析
首先,我们确保这个 网站 可以使用 POST 方法来抓取数据:
然后查看头文件中的关键字:
其实我并没有用用户名和密码网站登录,所以这个cookie可以用,但是这个:
内容类型:application/x-www-form-urlencoded;字符集=UTF-8
它必须在 POST 方法中使用,并标有钥匙符号。
然后我们看一下表单的内容:
在返回查询结果之前,我们需要将上述查询条件提交给服务器。以上格式是为了方便查看。您可以将其理解为一种记录格式。您按 View Source 以显示源代码:
我画的部分是“离婚登记号”,这是一个普通的URI编码格式,带有很多百分号。
通过这些分析,我们可以继续下一步。
第 2 步:尝试捕获
先放代码,然后一行一行的说:
让