爬虫抓取网页数据(get请求返回静态附代码如下最后看看获取的文章写)

优采云 发布时间: 2022-04-01 10:02

  爬虫抓取网页数据(get请求返回静态附代码如下最后看看获取的文章写)

  如果使用了对方网站的数据,但是没有响应式界面,或者界面不够灵活,则适合使用爬虫。爬虫有几种类型,其他的网站展示形式都是基于分析的。每个 网站 显示都有相同点和不同点。大部分都可以使用httpRequest来完成,不管是加了密码、随机码、请求参数、提交方式get还是post、地址来源、多重响应等。但是有些网站如果返回json或者固定格式使用ajax,如果很复杂可以用webbrower控件抓取,最后定期解析得到需要的数据。那么我们来抓取网站列表文章标题、文章摘要、文章发布时间、文章作者、文章评论次数、文章查看次数。看*敏*感*词*。

  

  get请求返回静态html,代码如下

  public class HttpCnblogs

{

public static List HttpGetHtml()

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://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 post_item_body列表

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

//a标签 文章标题 作者名字 评论 阅读

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

//p标签 文章内容

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

//提取评论 阅读次数如:评论(10)-》10

Regex regNumbernew = new Regex(@"\d+", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

//提取时间

Regex regTime = new Regex(@"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

#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 = regA.Matches(strBody);

int aCount = aList.Count;

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

model.ArticleAutor = aCount == 5 ? aList[2].Groups[1].ToString() : aList[1].Groups[1].ToString();

model.ArticleComment = Convert.ToInt32(regNumbernew.Match(aList[aCount-2].Groups[1].ToString()).Value);

model.ArticleTime = regTime.Match(strBody).Value;

model.ArticleView = Convert.ToInt32(regNumbernew.Match(aList[aCount-1].Groups[1].ToString()).Value);

model.ArticleContent = regP.Matches(strBody)[0].Groups[1].ToString();

list.Add(model);

}

return list;

}

}

public class CnblogsModel

{

///

/// 文章标题

///

public String ArticleTitle { 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; }

}

</p>

  最后看一下获取的文章model

  

  我很抱歉写得不好,但我已经为下一次采访做好了准备。 .

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线