爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)

这是我的第一个爬虫代码。。。算是一份测试版的代码。大牛大神别喷。。。

通过给定一个初始的地址startPiont然后对网页进行捕捉,然后通过正则表达式对网址进行匹配。

List<string> todo :进行抓取的网址的集合

List<string> visited :已经访问过的网址的集合

下面实现的是,给定一个初始地址,然后进行爬虫,输出正在访问的网址和已经访问的网页的个数。

需要注意的是,下面代码实现的链接匹配页面的内容如图一、图二所示:

  • 图一:

  • 图二:

简单代码示范如下:(测试版)


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web.Security;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Web;

namespace Demo1
{

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Test1 a = new Test1();
a.getCurrentURL();
}

public class Test1
{
List<string> todo = new List<string>();
List<string> visited = new List<string>();
string startPoint = "http://www.cnblogs.com/lmei/";

public void getCurrentURL()
{
RequestSite(startPoint);

while (todo.Count > 0)
{
string currentURL = todo[0];

RequestSite(currentURL);

if (visited.Contains(currentURL)) //注释1
{
Console.WriteLine("已经访问过了" + currentURL);
todo.Remove((currentURL));
}
else
{
Console.WriteLine("现在正在访问:===> " + currentURL);
visited.Add(currentURL);

Console.WriteLine("目前已经访问了:===> " + visited.Count + "个网页" );
todo.Remove((currentURL));
}
}
}

public void RequestSite(string url)
{
WebRequest req = WebRequest.Create(url);
HttpWebResponse res;
try{
res = (HttpWebResponse)(req.GetResponse());
}
catch (WebException ex) { res = (HttpWebResponse)ex.Response; }

Stream st = res.GetResponseStream();
StreamReader rdr = new StreamReader(st);
string s = rdr.ReadToEnd();
todo.AddRange(GetLink(s));
}

List<string> GetLink(string htmlPage)
{

Regex regx =
new Regex("http://www\\.cnblogs\\.com\\/lmei\\/p\\/[0-9a-zA-Z]+\\.html*" ,RegexOptions.IgnoreCase);
MatchCollection matches = regx.Matches(htmlPage);

List<string> results = new List<string>();
foreach (Match match in matches)
{
if (!visited.Contains(match.Value)) //注释2
{
results.Add(match.Value);
}
}
return results;
}
}

}
}

注释1 :是将已经访问过的网址排除。

注释2
:是将已经访问过的网址排除,但是可能由于同个网页中包含的两个(或两个以上)相同的链接,而且都没被访问过的,这样使得todo队列中会有相同的网址,所以需要注释1那部分进行再次过滤排除。其实也可以将注释2那部分删去,直接让注释1过滤就行。

接下来会进一步补充爬虫抓取的内容。。。

爬虫技术(四)-- 简单爬虫抓取示例(附c#代码),布布扣,bubuko.com

时间: 2024-10-06 00:41:44

爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)的相关文章

iOS—网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

iOS开发——网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

爬虫_快速构建实时抓取集群

定义: 首先,我们定义一下定向抓取,定向抓取是一种特定的抓取需求,目标站点是已知的,站点的页面是已知的.本文的介绍里面,主要是侧重于如何快速构建一个实时的抓取系统,并不包含通用意义上的比如链接分析,站点发现等等特性. 在本文提到的实例系统里面,主要用到linux+mysql+redis+django+scrapy+webkit,其中scrapy+webkit作为抓取端,redis作为链接库存储,mysql作为网页信息存储,django作为爬虫管理界面,快速实现分布式抓取系统的原型. 名词解析:

网络爬虫(网络蜘蛛)之网页抓取

现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎.资讯采集.舆情监测等等,诸如此类.网络爬虫涉及到的技术(算法/策略)广而复杂,如网页获取.网页跟踪.网页分析.网页搜索.网页评级和结构/非结构化数据抽取以及后期更细粒度的数据挖掘等方方面面,对于新手来说,不是一朝一夕便能完全掌握且熟练应用的,对于作者来说,更无法在一篇文章内就将其说清楚.因此在本篇文章中,我们仅将视线聚焦在网络爬虫的最基础技术--网页抓取方面. 说到网页抓取,往往有两个点是不得不说的,首

入门须知之网络爬虫的基本流程及抓取策略

大数据时代下,数据采集推动着数据分析,数据分析推动发展.但是在这个过程中会出现很多问题.拿最简单最基础的爬虫采集数据为例,过程中就会面临,IP被封,爬取受限.违法操作等多种问题,所以在爬去数据之前,一定要了解好预爬网站是否涉及违法操作,找到合适的代理IP访问网站等一系列问题. 掌握爬虫技术也成为现在技术流的营销推广人员必须掌握的.爬虫入门,这些知识你必须了解. 一.网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL:2.将这些URL放入待抓取URL队列:3.从待抓取URL队列中

【Heritrix源代码分析4】开始一个爬虫抓取的全流程代码分析

在创建一个job后,就要开始job的运行,运行的全流程如下: 1.在界面上启动job 2.index.jsp 查看上述页面对应的源代码 <a href='"+request.getContextPath()+"/console/action.jsp?action=start'>Start</a> 3.action.jsp String sAction = request.getParameter("action"); if(sAction !

Python爬虫成长之路:抓取证券之星的股票数据

获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据.程序主要分为三个部分:网页源码的获取.所需内容的提取.所得结果的整理. 一.网页源码的获取 很多人喜欢用python爬虫的原因之一就是它容易上手.只需以下几行代码既可抓取大部分网页的源码. import urllib.request url='http://quote.stockstar

Python爬虫--2019大学排名数据抓取

Python爬虫--2019大学排名数据抓取 准备工作 输入:大学排名URL连接 输出:大学排名信息屏幕输出 所需要用到的库:requests,bs4 思路 获取网页信息 提取网页中的内容并放到数据结构中 利用数据结构展示并输出结果 程序设计 定义函数getHTMLText()获取网页信息 定义函数UnivList()放入数据结构 定义函数printUnivList()输出到屏幕 总体而言: 写出需要自定义的函数,制作出总体的框架 写出主函数框架,实现功能 最后调用函数 步骤 查看url源代码

arpspoof+driftnet+ ARP欺骗简单图片抓取

arpspoof+driftnet+ ARP欺骗简单图片抓取 driftnet是一款简单而使用的图片捕获工具,可以很方便的在网络数据包中抓取图片.该工具可以实时和离线捕获指定数据包中是图片 环境 受害ip:192.168.228.130 攻击ip:192.168.228.129 网关:192.168.228.2 条件 1,开启或关闭IP转发 2,向被攻击机器发送arp欺骗数据包,冒充网关 3,向网关发送arp数据欺骗网关,冒充被攻击机器 4,运行driftnet截取图片 开启IP转发功能 cat