入门到精通:asp.net 抓取网页 网页爬虫

优采云 发布时间: 2022-10-22 22:50

  入门到精通:asp.net 抓取网页 网页爬虫

  实际的网络爬虫系统通常是通过结合几种爬虫技术来实现的。

  专业介绍:百度百科。

  爬虫步骤实例操作(采集博客园文章:指定链接采集)

  开发环境

  操作系统:windows7 x64;

  开发工具:Visual Studio 2017

  项目名称:ASP.NET Web 应用程序(.Net Framework)

  数据库:SqlServer2012

  案例分析

  1. 创建一个名为 Reptiles 的 ASP.NET Web 应用程序项目。

  项目创建成功后,我们先分析一下数据结构,可以根据请求返回的请求来分析,但是我这里的目标是html页面,所以我直接用F12分析。

  经过我们的分析,我们找到了文章标题和文章内容,分别如下:

  通过上面的分析,可以先写正则表达式:

  //文章标题

Regex regTitle = new Regex(@"]*?>(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//文章内容

Regex regContent = new Regex(@"]*?>(.*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

  完整代码放在最后,直接复制使用即可;

  查看运行结果:

  注意这里没有持久化存储,需要的同学可以根据自己的需要自行进入存储。

  实例操作(采集博客园文章:批处理采集)

  批处理 采集 类似于指定的 url采集。批处理采集需要先获取指定页面(这里以博客园首页为例),

  获取页面上方的url即可获取下方的内容。同样,我们先分析一下页面数据结构,如下:

  通过上面的分析,可以先写正则表达式:

  //标题div

Regex regBody = new Regex(@"([\s\S].*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//a标签 文章标题

Regex regTitle = new Regex("]*?>(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//文章标题URL

string regURL = @"(?is)]*?href=([&#39;""\s]?)(?[^&#39;""\s]*)\1[^>]*?>";

  代码在后面,我们来看看运行结果:

  代码展示

  注:建立对应的控制器和视图后,复制即可直接使用

  散装采集查看:关于

  指定链接采集查看:联系人

  控制器:HomeController

  【指定链接采集】前端代码

  

指定链接采集

采集数据

function GetHtml() {

$.ajax({

url: "/Home/GetHtml",

data: {

Url: $("#Url").val()

},

type: "POST",

dataType: "json",

success: function (data) {

var data = eval("(" + data + ")");

if (data.length > 0) {

$(".postTitle").html(data[0].ArticleTitle);

$(".postBody").html(data[0].ArticleContent);

}

}

});

}

  【批处理采集】前端代码

  

批量采集

点我进行【采集数据】

function GetHtml() {

$.ajax({

url: "/Home/GetHtml",

data: {

Url: $("#Url").val()

},

type: "POST",

<p>

dataType: "json",

success: function (data) {

var data = eval("(" + data + ")");

if (data.length > 0) {

var html_text = "";

for (var i = 0; i < data.length; i++) {

html_text += &#39;&#39; + data[i].ArticleTitle2+&#39;&#39;;

}

$("#post_list").html(html_text);

}

}

});

}

</p>

  控制器后端代码:

  复制代码

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net;

using System.Text;

using System.Text.RegularExpressions;

using System.Web;

using System.Web.Mvc;

namespace Reptiles.Controllers

{

public class HomeController : Controller

{

public ActionResult Index()

{

return View();

}

public ActionResult About()

{

ViewBag.Message = "Your application description page.";

return View();

}

public ActionResult Contact()

{

ViewBag.Message = "Your contact page.";

return View();

}

//数据采集

public JsonResult GetHtml(string Url)

{

CnblogsModel result = new CnblogsModel();

List HttpGetHtml = new List();

if (string.IsNullOrEmpty(Url))

HttpGetHtml = GetUrl();

else

HttpGetHtml = GetUrl(Url);

var strList=Newtonsoft.Json.JsonConvert.SerializeObject(HttpGetHtml);

return Json(strList, JsonRequestBehavior.AllowGet);

}

#region 爬虫

#region 批量采集

//得到首页的URL

public static List GetUrl()

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.cnblogs.com/");

request.Method = "GET";

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream stream = response.GetResponseStream();

StreamReader sr = new StreamReader(stream);

string articleContent = sr.ReadToEnd();

List list = new List();

#region 正则表达式

//标题div

Regex regBody = new Regex(@"([\s\S].*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//a标签 文章标题

Regex regTitle = new Regex("]*?>(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//文章标题URL

string regURL = @"(?is)]*?href=([&#39;""\s]?)(?[^&#39;""\s]*)\1[^>]*?>";

#endregion

MatchCollection mList = regBody.Matches(articleContent);

CnblogsModel model = null;

String strBody = String.Empty;

for (int i = 0; i < mList.Count; i++)

{

model = new CnblogsModel();

strBody = mList[i].Groups[1].ToString();

MatchCollection aList = regTitle.Matches(strBody);

int aCount = aList.Count;

//文章标题

model.ArticleTitle = aList[0].Groups[1].ToString();

model.ArticleTitle2 = aList[0].Groups[0].ToString();

//文章链接

var item = Regex.Match(aList[0].Groups[0].ToString(), regURL, RegexOptions.IgnoreCase);

model.ArticleUrl = item.Groups["href"].Value;

//根据文章链接获取文章内容

model.ArticleContent = GetConentByUrl(model.ArticleUrl);

list.Add(model);

}

return list;

}

<p>

//根据URL得到文章内容

public static string GetConentByUrl(string URL)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

request.Method = "GET";

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream stream = response.GetResponseStream();

StreamReader sr = new StreamReader(stream);

string articleContent = sr.ReadToEnd();

List list = new List();

#region 正则表达式

//文章内容

Regex regContent = new Regex(@"]*?>(.*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

#endregion

MatchCollection mList = regContent.Matches(articleContent);

var returncontent = "";

if (mList.Count > 0)

returncontent = mList[0].Groups[0].ToString();

return returncontent;

}

#endregion

#region 指定链接采集

//指定链接采集

public static List GetUrl(string URL)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

request.Method = "GET";

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream stream = response.GetResponseStream();

StreamReader sr = new StreamReader(stream);

string articleContent = sr.ReadToEnd();

List list = new List();

#region 正则表达式

//文章标题

Regex regTitle = new Regex(@"]*?>(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//文章内容

Regex regContent = new Regex(@"]*?>(.*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

#endregion

MatchCollection mList = regTitle.Matches(articleContent);

MatchCollection mList2 = regContent.Matches(articleContent);

CnblogsModel model = new CnblogsModel();

//文章标题

model.ArticleTitle = mList[0].Groups[0].ToString();

model.ArticleContent = mList2[0].Groups[0].ToString();

list.Add(model);

return list;

}

#endregion

//实体

public class CnblogsModel

{

///

/// 文章链接

///

public String ArticleUrl { get; set; }

///

/// 文章标题(带链接)

///

public String ArticleTitle { get; set; }

///

/// 文章标题(不带链接)

///

public String ArticleTitle2 { get; set; }

///

/// 文章内容摘要

///

public String ArticleContent { get; set; }

///

/// 文章作者

///

public String ArticleAutor { get; set; }

///

/// 文章发布时间

///

public String ArticleTime { get; set; }

///

/// 文章评论量

///

public Int32 ArticleComment { get; set; }

///

/// 文章浏览量

///

public Int32 ArticleView { get; set; }

}

#endregion

}

}

</p>

  源代码下载

  关联:

  提取码:xion

  写在背面

  朋友看到这里,有没有发现除了分析数据结构和写正则表达式比较费力,其他都是一些常规操作?

  没错,只要你会分析数据结构和数据分析,那么任何数据都触手可及;

  参考:百度百科:%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711?fr=aladdin。

  欢迎关注和订阅我的微信公众平台【熊泽有话要说】,更多好玩易学的知识等你来领取

  教程:网页翻译-网页翻译工具-大家都在用的网页采集翻译工具

  网页翻译软件,今天给大家分享一款免费的批量翻译软件。为什么选择这款好用的翻译软件,因为它汇集了全球最好的翻译平台(百度/谷歌/有道),第一点翻译质量高,选择多。第二点支持各种语言的互译,第三点可以用来翻译各种批文档,第四点保留翻译前的格式和排版。第五点支持采集翻译。详情请参考以下图片!!!

  一、免费网页翻译软件介绍

  1.支持多优质多语言平台翻译(批量百度翻译/谷歌翻译/有道翻译,让内容质量更上一层楼)。

  2.只需要批量导入文件即可实现自动翻译,翻译后保留原版面格式

  3、同时支持文章互译:从中文翻译成英文再翻译回中文。

  4.支持采集翻译(可以直接翻译采集英文网站)

  英文优化和中文优化有一个共同点,就是强调内容建设。我们必须注意网页翻译软件中关键词相关内容的构建,使网站能够保持经常更新的状态。网站发布新的文章后,将这些文章发布到一些可以自由发布的重点平台文章,让搜索引擎更快的抓取到新鲜的内容网站,每天来你的网站,赚取更多新页面。

  从现在开始,你的网站的权重会越来越高。当你在做一个新的 关键词 时,它会更容易获得排名。另一个成功点是你的网站结构也很重要。必须为键 关键词 赋予特定的 网站 结构以增加其权重。这样,通过大量的页面构建,key 关键词 可以得到不错的效果。公司的排名效应也在竞争力上超越对手。

  

  2.网站SEO优化

  1、SEO),用于搜索引擎优化的中文翻译,是一种比较流行的网络营销方式。

  2、网站 SEO的主要目的是增加特定关键词的曝光率,增加网站的知名度,从而增加销售机会。

  3、SEO优化分为站外SEO和站内SEO两种。网页翻译软件SEO的主要工作是通过了解各种搜索引擎如何抓取互联网页面、如何对它们进行索引以及如何确定它们对特定关键词的搜索结果的排名等来优化网页。提高搜索引擎排名。

  4、如果是国内市场,可以选择百度进行SEO优化。如果你在国际市场,你可以选择GOOGLE进行SEO优化。

  3.谷歌网站搜索引擎优化

  谷歌网站的建设要符合推广地区的人文风俗文化,网页翻译软件可以提高外贸企业的专业性,获得当地采购商的青睐。网站SEO优化即使你不知道怎么做,你仍然需要知道一两件事关于操作过程。

  1、网站关键词的选择,一般来说,核心关键词、主要关键词和扩展词等,一般都是从研究竞争对手来的,不能盲目选择;

  

  2、网站结构优化符合蜘蛛爬取习惯,保证蜘蛛能抓取到你想要的页面,收录的概率会更高;

  3、url优化要求短,伪静态处理,层次不要太深。一般需要三层左右才能方便谷歌抓取;

  4. 网站 域名

  早期,从域名后缀来看,对SEO没有影响。然而,随着越来越多的企业用户使用站群在百度上快速排名,他们试图操纵搜索结果的排名,改变搜索结果的排名。

  由于站群需要大量的域名,当时很多企业的SEO人员和网页翻译软件都使用了.pw、.top、.pro等相对便宜的域名。

  因此,搜索引擎对 收录 和此类域名的呈现方式不是很友好。

  2.新注册的域名

  对于.cn、.net、.com等新注册的域名,2018年大部分网页翻译软件站长反映百度收录难度较大,网站沙盒周期较长。.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线