文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于抓取百度搜索内容

关于抓取百度搜索内容

时间:2010-09-13  来源:-Enchant

 

在一次模拟抓取百度搜索内容的实战中,记录了该文章。。。。以记录几个问题

(嘿嘿,没什么技术含量,只是记录遇到的麻烦和思路)

 

在C#中,为了实现网页内容的抓取,我们一般使用 System.Net 下的一些常用类,如

HttpWebRequest、HttpWebResponse等等。。。。。

 

为了抓取网页内容,首先我们要根据我们的目录来分析这个网站。。。

目的:根据关键字来抓取百度搜索的前50条记录(排除推广)

抓取内容:标题、连接、显示内容

分析结果:

    搜索连接 : http://www.baidu.com/s?wd=关键字&rn=pagesize

    显示结果 :采用每条记录一个table来显示内容,table的 id从1开始递增。。

 

根据我们的目的和分析结果,我们就知道这次抓取任务很简单啦,由于我们只有抓取50条记录,那么就可以把连接

修改成 http://www.baidu.com/s?wd=关键字&rn=50 ,然后直接带上关键字访问这个连接就可以了。。

 

此时第一个问题出现:

中文编码:

刚开始我以为使用 UrlEncode把中文编码一下就可以了,结果发现返回的结果出现乱码,又用firebug看了下返回的编码是utf8的,于是修改我使用的编码,采用utf8,结果发现除了我的关键字其他都是正确的,晕啦,还有这种事情哇?

终于在一次无意中查看到原来正常请求都是按照gb2312来传的,所以我们的把 “关键字”改成gb2312的格式再去请求就可以了

方法一:

string keyWord = System.Web.HttpUtility.UrlEncode(_keyWord, System.Text.UnicodeEncoding.GetEncoding("GB2312")).ToUpper();

 

方法二:(一个朋友的方法)

 public string ConvertText(string _str, string enconding)
        {
            byte[] buffer = Encoding.GetEncoding(enconding).GetBytes(_str);
            string tmpCity = "";
            foreach (byte b in buffer) tmpCity += string.Format("%{0:X}", b);

            return tmpCity;
        }

 

 

当我们正确请求拿到html字符串的时候就可以去分析处理了,原先我采用的Httpwebrequest来请求并返回html的字符串方式,发现取里面的内容挺麻烦,尤其正则表达式写的还挺烦的呢。

此时出现第二个问题:(也不算问题啦,只能算思路)

改用WebBrowser代替Httpwebrequest来请求

由于我们知道我们要根据结果table的 id来取得里面的内容,所以我放弃了原先的请求方式,采用了webbrowser,原因很简单,webbrowser里可以直接根据id来获取对象来直接操作,嘿嘿,岂不是比我们手写正则来匹配方便?而且正则还不太好些,还真有点麻烦。。。

 

 

到此为止 这次实战存在的2个问题全部得以解决,顺利抓取到想要的数据。。。

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载