赞
踩
如有不明白的地方欢迎加QQ群14670545 探讨
代码质量不行,后面采集起来卡,原因是正则我太菜了,没有开多线程采集。下面我举例:
目标页面是http://bbs.csdn.net/recommend_tech_topics,有图有真相:
看看采集后的效果:
下面是采集到的每个帖子楼主的内容以及一些简单的显示。图片之所以没有显示出来,因为csdn是用的一个专门的图片服务器,设置了防盗链,这个自己捣鼓下应该也可以绕过去。
下面我来分析下:
抓取的原理:先获取对应url页面的html内容,然后根据找出你要抓取的目标数据的的html结构,看看这个结构是否有某种规律,然后用正则去匹配这个规则,匹配到了以后就可以扣出来。
先看看http://bbs.csdn.net/recommend_tech_topics这个页面的源代码:
再通过谷歌浏览器我们再次确认了,目标数据是位于<div class="list_1">...</div>中间的
可是怎么匹配呢,我百度了下,就是找某两个字符中间的内容。考虑到结尾</div>很多,我这里就偷懒,把<div class="list_1">...</div>这一对div和近邻着的的后面的一个div【从源代码上我们可以看到是:<div class="page_nav">】<div class="page_nav">放到一起来,所以我的正则出来了:
Regex regex = new Regex("<div class=\"list_1\">([\\s\\S]*)</div>([\\s\\S]*)<div class=\"page_nav\">", RegexOptions.Compiled);
为了美化一下,我加了点css,具体代码如下;
页面:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="testcollection.aspx.cs" Inherits="testcollection" %>
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>测试获取网页信息</title>
- <script src="js/jquery-1.6.min.js" type="text/javascript"></script>
- <style type="text/css">
- a:link, a:visited {color: #335AA4;text-decoration: none;}
- a:hover, a:active {color: #CA0000;text-decoration: underline;}
- a.a_insertdb{ color:#f00; font-weight:bold;}
- a.a_insertdb:hover{
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。