如何抓取网页数据(一下抓取别人网站数据的方式有什么作用?如何抓取)

优采云 发布时间: 2021-09-19 09:09

  如何抓取网页数据(一下抓取别人网站数据的方式有什么作用?如何抓取)

  我相信每个网站网站管理员都有捕获他人数据的经验。目前,获取他人网站数据的方式只有两种:

  一、使用第三方工具,其中最著名的是优采云采集器,这里不介绍

  二、编写您自己的程序并获取它。这种方式要求站长编写自己的程序,这可能需要站长的开发能力

  起初,我试图使用第三方工具来捕获我需要的数据。因为互联网上流行的第三方工具要么不符合我的要求,要么太复杂,我一时不知道如何使用它们。后来,我决定自己写。现在我基本上可以处理一个网站(仅程序开发时间,不包括数据捕获时间)

  经过一段时间的数据采集工作,我遇到了很多困难。最常见的问题之一是获取分页数据的问题。原因是有多种形式的数据分页。接下来,我将以三种形式介绍获取分页数据的方法。虽然我在网上看到了很多这样的文章,但是每次我拿别人的代码时,总有各种各样的问题。以下代码可以正确执行,我目前也在使用它们。本文的代码实现是用c语言实现的。我认为其他语言的原则大致相同

  让我们开门见山:

  第一种方式:URL地址收录分页信息。这种形式是最简单的。使用第三方工具捕获此表单也非常简单。基本上,不需要编写代码。对于像我这样宁愿花半天时间编写代码而不愿学习第三方工具的人,我仍然自己编写代码

  此方法通过循环生成数据页的URL地址。例如,通过Httpwebrequest访问相应的URL地址,并返回相应页面的HTML文本。下一个任务是解析字符串并将所需内容保存到本地数据库;有关捕获的代码,请参阅以下内容:

  公共字符串GetResponseString(字符串url){

  字符串_StrResponse=“”

  HttpWebRequest WebRequest=(HttpWebRequest)WebRequest.Create(url)

  _WebRequest.UserAgent=“MOZILLA/4.0(兼容;MSIE7.0;窗户NT5.2;.NET CLR1.1.4322.NET CLR2.0.50727.NET CLR3.0.0450 6.648;.NETCLR@k305.21022.NET CLR3.0.450 6.2152.NET CLR@k305.30729)",

  _WebRequest.Method=“GET”

  WebResponse _WebResponse=_WebRequest.GetResponse()

  StreamReader_ResponseStream=新的StreamReader(_WebResponse.GetResponseStream(),System.Text.Encoding.GetEncoding(“gb2312”)

  _StrResponse=_ResponseStream.ReadToEnd()

  _WebResponse.Close()

  _ResponseStream.Close()

  返回响应

  }

  上面的代码可以返回与页面的HTML内容相对应的字符串。其余的是从该字符串中获取您关心的信息

  第二种方式:可能是开发中经常遇到的,它的分页控件通过post将分页信息提交给后台代码,比如.Net下的GridView的分页功能,当你点击分页页码时,你会发现URL地址没有改变,但是页码变了而且页面内容也发生了变化。如果你仔细观察,你会发现当你将鼠标移动到每个页码上时,状态栏会显示javascript:_dopostback(“GridView”,“page1”)和其他代码。事实上,这种形式并不很难,因为毕竟,有一个地方可以找到页码的规律

  我们知道提交HTTP请求有两种方式,一种是get,另一种是post。第一种是get,第二种是post。具体的提交原则不需要详细解释,这不是本文的重点

  要获取此类页面,您需要注意页面的几个重要元素

  一、_viewstate应该是.Net独有的,也是.Net开发人员喜欢和讨厌的东西。当你打开一个网站页面时,如果你发现这个东西后面有很多乱七八糟的字符,那么这个网站一定是用英语写的

  二、__dopostback方法。这是从页面自动生成的JavaScript方法,其中收录两个参数_eventtarget和_eventargument。这两个参数可以引用与页码对应的内容,因为当您单击翻页时,页码信息将传输到这两个参数

  三、__EVENTVALIDATION这也应该是独一无二的

  你不必太在意这三件事是做什么的,你只需要在编写代码获取页面时注意提交这三个元素

  与第一种方法一样,_doPostBack的两个参数必须以循环方式拼合在一起。只有收录页码信息的参数才需要拼合在一起。这里需要注意的一点是,每次通过post提交下一页的请求时,您应该首先获得_viewstateinformation和_eVENTVALIDATA当前页面的信息,所以页面数据的页码第一种方法可以用来获取页面内容,然后取出相应的页面_______________________________

  参考代码如下:

<p>对于(int i=0;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线