抓取网页数据违法吗(第一次用C#写数据抓取,遇到各种问题怎么办?)

优采云 发布时间: 2022-01-07 06:04

  抓取网页数据违法吗(第一次用C#写数据抓取,遇到各种问题怎么办?)

  第一次用C#写数据捕获,遇到各种问题。开始写模拟登录的时候,发现里面有验证码。我不得不突破验证码才能得到它。好的,那我去找验证码破解的密码。过了很长时间,我无法触摸门。我尝试了很多代码,发现它们并不通用。后来明白了原理。我先把噪点、干扰线等去掉,然后把彩色验证码转成黑白,剪下字体。, 如果字体卡住了,对于我们这些初学者(外行)来说,先放弃吧,切完之后再对每一个像素进行编码,白0,黑1,好像是这样的,不太懂,再读一遍 比较字体库模型中的单词。如果百分比高于百分比,他们会识别验证码是什么,一一比较,最终形成完整的验证码。工作了一天,发现自己既不能做字体库也不用代码切字,无法完成验证码破解,于是放弃破解,另寻方法。

  网上说可能是验证码存储在cookie中。好的,试试看。我模拟浏览器发送数据,请求验证码,FF调试。我发现cookie中有验证码。就是这样,验证码就是这个。就是这样,让我们​​重新登录。

  要登录,首先要跟踪目标网页的逻辑,看它是如何传递参数登录成功的。我的目的是先发送一个请求对用户名和密码进行加密,然后将加密后的用户名和密码发送到后台进行登录,这个没什么好说的。这期间遇到的问题是发送请求。过了很久,还是没有成功。原因是当时发送的ajax请求要设置调用哪个方法。网站 一般直接请求后台而不是发送。ajax 请求,所以我又在这里搞砸了。

  关键代码:

  request.Headers.Add("X-AjaxPro-Method", "方法名");

  登录成功后,就到了爬取页面的时候了。首先获取爬取页面的html,然后分析它如何提交数据,如何返回,传递了哪些参数等等。抓取页面没有错,然后模拟查询数据,然后写网站,隐藏域控件很多,所以发送请求的时候参数很多,不知道为什么。,无论如何,我认为唯一有用的是跟踪号。长时间发送模拟后,报500错误。这是模拟参数有问题,服务器无法读取。我已经做了所有的设置,一个一个。我发现它没有任何问题。我在这里卡了 2 天。我忍不住了。之后,发现提交的数据和页面隐藏字段中的数据有点不同。特殊字符全部输入。转码后,再想之前写的传递参数的代码,发现在传递数据的时候,需要通过UrlEncode进行转码,然后传输。虽然隐藏域的值是控件自动生成的,但是传输应该还是需要转码的,想到这里,二话不说,开始转码参数

  HttpUtility.UrlEncode(string);

  这是成功的。太烧脑细胞了。虽然对于一些老手来说,可能不知道这些东西,但是第一次接触还是比较麻烦的。

  顺便说一下,我也遇到了一个问题,就是读取html后获取字符串html中的参数的问题。当然,在页面上很容易得到它。现在都是一堆字符串,真的很难处理,于是找了个dll。使用方便,支持xpath,用法与xmlDocument相同,

  部分代码:

  HtmlDocument htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(html.Replace("\r", "").Replace("\n", ""));

HtmlNodeCollection collection = htmlDocument.DocumentNode.SelectSingleNode("/html/body/div").ChildNodes;

foreach (HtmlNode htmlNode in collection)

{

var tempId = htmlNode.Attributes["id"].Value;

}

  红色部分是xpath规则,

  也可以根据属性获取对应的节点:

  htmlDocument.DocumentNode.SelectSingleNode("/html/body/div[2]/input[@id='__EVENTVALIDATION']");

  这是:HtmlAgilityPack 下载链接:点击打开链接

  最好阅读更多此 网站 评论。里面有很多人的问题,也许可以帮到你。

  写了这么多,整理代码贴上来,然后开始循环抓取数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线