c#使用正则表达式获取TR中的多个TD_C#编写一个简单的爬虫

首先本文并不是针对某网站来的。

我是怀有深深的xx来写的。以方便日后。

大哥大姐如果看到小弟的文章不屑一顾的话,到此就可以走了,要不我送送你。

计算机环境使用的vs2015社区版,数据库使用的MSSQL 2012(偷偷的说:使用的是网上的密钥哈。)

说一下简单的原理:

首先模拟浏览获取网页。

其次分析网页的内容。

最后根据自己的需要把数据储存在数据库中。(超级简单吧)

备注一句:如果是分布式爬虫的话,我考虑考虑哈,毕竟我还是很菜的哈。

在我使用的HTTP请求不带COOKIE。

带Cookie的代码

//------------2016-12-12编辑------------

HTTP请求携带的POST数据

using 

下面代码请求HTTP。

HttpWebRequest 

该HtmlString即获取的网页源代码。

其实网页源代码是真正爬虫难以处理的问题。

各个网站都有不同的网页结构。网页复杂,不规范。导致解析网页成为巨大的问题。

当然爬虫毕竟不是浏览器,但是复杂的爬虫会有浏览器的部分功能。

比如现在流行的动态网页加载。Jquery库来实现动态网页的添加。

那你的爬虫就必须能够解析简单的JS。当然认为解析js过于复杂,那我就不解析了撒(自欺欺人,技术达不到也没有办法)。

下面开始解析HTML网页:

首先我们要知道这个网页对我们哪些内容是有用的,哪些是没有用的。

这里开始我们将使用正则表达式。

用正则表达式来剔除不需要的Html。

//删除r

Htmlstring 

//删除n

Htmlstring 

删除rn是我在发现不规范的网页源代码中无法正确的匹配正则表达式。

所以以我的判断首先删除他们两个。(这是我认为的重点。)

//删除script

Htmlstring 

//删除title

Htmlstring 

//删除head

Htmlstring 

//删除img

Htmlstring 

//删除video

Htmlstring 

我致力于提取网页中的文本。所以图片,视频,标题我一一删除。

脚本,样式。我都删除了。

重点提取网页中的超链接的地址:

string 

该代码重点提取网页的中的超链接。

至于提取的超链接的地址,是直接储存至数据库的。

这儿有一个我自己体会:

如果在一个网页中提取几百上千个地址。这个地址数量是庞大的。我们需要把这些储存数据库中。所以我要一次插入上千条数据,但是数据库开销是昂贵的。所以数据库只能打开一次。

这里有个问题。如果数据库有庞大的地址库。这时我们我就需要一条一条在数据库查找是否有重复的地址。这儿注释一个数据库去重的。

using 

数据库查询的时候为什么Select Top 1 。因为我们只需要在数据库确认是否有改地址。如果没有Top 1, 查询语句会把整个表遍历一次。这个根本没有必要的。如果有该地址迅速返回。这样有利于提高Select。

我们用正则表达式提取的地址。也未大不一样哈。有绝地地址的。有相对地址的(相对地址不规范的。)还有js代码的。会看的你眼花缭乱。还有地址链接中被Html解析了的。

match 

地址含有&明显就含有Html元素。故此,需要替换正常的参数连接符。

地址含有javascript:void(0);明显就是就js代码过滤掉。

地址中不规范的那就多了哈:

比如当前访问的域名的鬼脸(我的网站,嘿嘿)

里面的相对地址以“/”开头,但是我们的访问的域名鬼脸却是这个。这样的话我们就要不能把当前域名和相对地址直接连接起来。而是需要把相对地址的“/”删除掉才能连接起来。

还有绝对地址的判断我们也需要采用正则表达式来:

string 

至此我认为简单的对网页源代码的提取超链接地址差不多了。

对网页重要的文本内容的提取哈:

对网页图片的提取,对网页视频的提取。都类似,也可以同时提取。

下面对于当前网页的获取:

在数据库中提取当前网页的网页来检索。我想有深度算法和广度算法。

深度爬取网页

广度爬取网页

偶认为应该两则结合才更好。

不展开了。因为展不开了哈。哈哈哈哈哈哈哈哈。。。。。。

——2016.12.31——

其实该代码属于单线程。

更新多线程代码还木有写。

但原理经典的生产者与消费者关系。

一个线程不停的下载。把下载的数据推入一个先入先出的队列。

另一个线程不停从队列中取出数据进行分析。

当然下载线程也可以多个。这时,下载线程对队列进行写的时候保持不被其他写线程使用。保持线程互斥。

好了暂时写到这里,好像还没有说的东西还多哦。不知道有没有用,反正我用它正在爬取网页。

我失业了,有没有人介绍一个工作呢??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值