discuz论坛的抓取

discuz论坛通用URL地址:

URL+?mod=my&q=关键字(关键字的编码gb2312)

例如: 'http://bbs.anzhi.com/search.php?mod=my&q=htc+%CA%D6%BB%FA';

而真实的sId的值是存储在head里面的location中的。

例如:location=http://search.bbs.hiapk.com/f/search?q=%E6%89%8B%E6%9C%BA&sId=8520930&ts=1355197250&mySign=5785b7cb&searchLevel=3&menu=1&rfh=1&qs=txt.tsort.a&orderField=posted&orderType=desc

           string url = string.Format("http://bbs.hiapk.com/search.php?mod=my&q={0}", crawlerModel.Keyword);
          HTMLContent= GetHteml(url);

private string GetHteml(string url)
       {
           HttpWebRequest request = null;
           HttpWebResponse response = null;
           string gethost = string.Empty;
           CookieContainer cc = new CookieContainer();
           string Cookiesstr = string.Empty;
           try
           {
               request = (HttpWebRequest)WebRequest.Create(url);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               //StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312"));
               //string ss = sr.ReadToEnd();
               gethost =response.Headers["location"];
               request.Abort();
               response.Close();              
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
           try
           {
               request = (HttpWebRequest)WebRequest.Create(gethost);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
               string ss = sr.ReadToEnd();
               string pattern = @"<a.+?>按时间排序</a>";
               if (!Regex.IsMatch(ss, pattern)) return "";
               gethost = "http://search.bbs.anzhi.com"+GetURL(Regex.Match(ss, pattern).Value.Replace("&","&"));
               request.Abort();
               sr.Close();
               response.Close();
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
           try
           {
               request = (HttpWebRequest)WebRequest.Create(gethost);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
               string ss = sr.ReadToEnd();
               request.Abort();
               sr.Close();
               response.Close();
               return ss;
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
       }

       private string GetURL(string urlHtml)
       {
           MatchCollection matchList;
           Regex regex = new Regex(@"f="".*?""");
           matchList = regex.Matches(urlHtml);
           if (matchList.Count > 0)
           {
               return matchList[0].Value.Substring(3, matchList[0].Value.Length - 4);
           }
           return "";
       }

小例子:

using System;
using System.Collections.Generic;
using IWOMWebCrawlerDbLayer.DAL;
using IWOMWebCrawlerDbLayer.Model;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Threading;
using IWOMWebCrawlerDbLayer.Common;
using HtmlAgilityPack;
using System.Net;
using System.IO;

namespace IWOMWebCrawlerApp.Crawler
{
    public class tousue_teizi : AbstractSearchEngine
    {
        public tousue_teizi()
       {
           this.SearchID = 1600;
           this.SearchName = "投诉易--帖子";
            
       }
       private int pageId=0;
       /// <summary>
       /// 根据任务生成抓取要素
       /// </summary>
       protected override void initCrawlerModel(IwomTask taskItem)
       {
           crawlerModel = new CrawlerModel();
           crawlerModel.Keyword = CommonFunction.AssembledKeyword(taskItem.KeyWord, IWOMWebCrawlerDbLayer.Common.KeyWordUrlEncode.Normal, false);//关键词
           crawlerModel.PageSize = crawlerModel.PageSize > 10 ? 10 : taskItem.GetItems;//每页大小
           crawlerModel.Postion = taskItem.Task_Postion;
       }
       /// <summary>
       /// 根据任务要素构造抓取的url
       /// </summary>
       protected override string createUrl(int pageIndex)
       {
           if (pageIndex != 0) return "";
           string url = string.Format("http://www.tousue.com/search.php?mod=my&q={0}", crawlerModel.Keyword);
           return url;
       }
       /// <summary>
       /// 每抓取一页都间隔的时间
       /// </summary>
       protected override void PageSleep()
       {
           Thread.Sleep(500);
       }
       /// <summary>
       /// 页面的编码
       /// </summary>
       protected override Encoding getPageEncoding()
       {
           return Encoding.GetEncoding("utf-8");
       }
       /// <summary>
       /// 根据内容判断是否被封禁了
       /// </summary>
       protected override bool checkContentIsForbat(string HTMLContent)
       {
           return true;
       }
       /// <summary>
       /// 根据内容判断是否是最后一页了
       /// </summary>
       protected override bool checkContentIsLastPage(string HTMLContent)
       {
           return false;
       }

       /// <summary>
       /// 根据网页信息得到文章集合
       /// </summary>
       protected override List<CrawlerResult> GetArticleByHtml(string HTMLContent, int task_ID)
       {
           string url = string.Format("http://www.tousue.com/search.php?mod=my&q={0}", crawlerModel.Keyword);
           HTMLContent = GetHteml(url,pageId);
           string mainId = "result-items";
           XPathModel model = new XPathModel();
           model.listXPath = "./ul/li";
           model.titleXPath = "./h3/a";
           model.urlXPath = "./h3/a";
           model.timeXPath = "./p[3]";
           List<CrawlerResult> arrayList = CommonFunction.GetListByXPath(HTMLContent, task_ID, mainId, model, TitleMethod, CommonFunction.UrlMethod, TimeMethod);
           return arrayList;
       }
       /// <summary>
       /// 获得解析的URL
       /// </summary>
       private string GetURL(string urlHtml)
       {
           MatchCollection matchList;
           Regex regex = new Regex(@"f="".*?""");
           matchList = regex.Matches(urlHtml);
           if (matchList.Count > 0)
           {
               return matchList[0].Value.Substring(3, matchList[0].Value.Length - 4);
           }
           return "";
       }
       private string GetHteml(string url,int pageId)
       {
           HttpWebRequest request = null;
           HttpWebResponse response = null;
           string gethost = string.Empty;
           CookieContainer cc = new CookieContainer();
           string Cookiesstr = string.Empty;
           try
           {
               request = (HttpWebRequest)WebRequest.Create(url);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               //StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312"));
               //string ss = sr.ReadToEnd();
               gethost = response.Headers["location"];
               request.Abort();
               response.Close();
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
           try
           {
               request = (HttpWebRequest)WebRequest.Create(gethost);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
               string ss = sr.ReadToEnd();
               string pattern = @"<a.+?>按时间排序</a>";
               if (!Regex.IsMatch(ss, pattern)) return "";
               gethost = "http://search.discuz.qq.com" + GetURL(Regex.Match(ss, pattern).Value.Replace("&", "&")) + "&page=" + pageId.ToString();
               request.Abort();
               sr.Close();
               response.Close();
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
           try
           {
               request = (HttpWebRequest)WebRequest.Create(gethost);
               request.Method = "GET";
               request.KeepAlive = true;
               request.Headers.Add("Cookie:" + Cookiesstr);
               request.CookieContainer = cc;
               request.AllowAutoRedirect = false;
               response = (HttpWebResponse)request.GetResponse();
               //设置cookie
               Cookiesstr = request.CookieContainer.GetCookieHeader(request.RequestUri);
               //取再次跳转链接
               StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
               string ss = sr.ReadToEnd();
               request.Abort();
               sr.Close();
               response.Close();
               return ss;
           }
           catch (Exception)
           {
               //第一次GET出错
               return "";
           }
       }
       private string TitleMethod(string content)
       {
           string pattern = @"(?<=[\d]回答).+";
           if (Regex.IsMatch(content, pattern))
               return Regex.Match(content, pattern).Value;
           return content;
       }
       private DateTime TimeMethod(string content)
       {
           string pattern = @"[\d]{4}-[\d]{1,2}-[\d]{1,2}";
           string temp = "";
           DateTime time = new DateTime();
           time = CommonFunction.GetTimeByChinese(content);
           if (time != DateTime.MinValue)
               return time;
           if (Regex.IsMatch(content, pattern))
               temp = Regex.Match(content, pattern).Value;
           DateTime.TryParse(temp, out time);
           return time;
       }
       /// <summary>
       /// 生成测试任务的方法
       /// </summary>
       protected override string initTestUrl()
       {
           this.HaseCreateTime = true;
           this.HasePageSize = 10;
           this.HaseSiteName = true;
           this.HaseSummary = true;
           pageId = 2;
           HaseAuthor = true;
           crawlerModel.Keyword = CommonFunction.AssembledKeyword("海尔", IWOMWebCrawlerDbLayer.Common.KeyWordUrlEncode.Normal, false);
           string url = string.Format("http://www.tousue.com/search.php?mod=my&q={0}", crawlerModel.Keyword);
           return url;
       }
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Discuz论坛是国内知名的论坛系统之一,拥有广泛的用户群体和丰富的功能。随着网络发展的进步,许多论坛网站都逐渐开始重视网站的整体设计和用户体验。在Discuz论坛中,图标是一个重要的元素,它能够增加网站的美观度和交互性。 Discuz论坛图标大全是指收集和整理所有Discuz论坛所使用的图标资源,包括导航图标、功能图标、社交媒体图标等。这些图标能够帮助用户迅速了解和识别论坛中的各个功能和模块,提供更好的用户体验。 Discuz论坛图标大全一般会提供以下几种类型的图标: 1. 导航图标:用于论坛的顶部或侧边栏导航,包括首页、论坛、帖子、会员、消息等。 2. 功能图标:用于各个功能模块,如发帖、回复、点赞、分享、收藏等,方便用户快速操作论坛。 3. 社交媒体图标:用于显示论坛与其他社交媒体平台的链接,如微博、微信、QQ等,方便用户进行跨平台的分享和交流。 Discuz论坛图标大全的好处是为网站管理员和设计师提供了丰富的资源选择,可以根据论坛需求进行自由组合和调整。同时,用户在使用论坛时,能够更加便利地找到所需功能,提高浏览和操作的效率。 总之,Discuz论坛图标大全是一项重要的设计资源,能够提升论坛的外观和用户体验,为网站的发展打下良好的基础。 ### 回答2: Discuz论坛是一个非常流行的论坛平台,拥有庞大的用户群体和丰富的功能。在Discuz论坛中,图标大全是指论坛中各种各样的图标集合。 Discuz论坛图标大全包括了论坛中常用的各种图标,比如帖子图标、表情图标、板块图标等等。这些图标的作用是丰富论坛的界面,使其更加直观、美观。帖子图标是用于标识不同类型的帖子,比如置顶帖、精华帖等等。表情图标是用于丰富用户在帖子中的表达方式,让用户能够更好地表达自己的情感和态度。板块图标用于标识不同的板块分类,让用户能够方便地找到感兴趣的话题。 Discuz论坛图标大全的使用非常简便。管理员只需在后台设置中进行相应的配置,即可选择适合自己论坛风格的图标集合。用户在浏览论坛时,会看到各种图标的应用,提高了论坛的可视化和易用性。 总之,Discuz论坛图标大全对于论坛来说是非常重要的一部分。它丰富了论坛的界面效果,提升了用户的体验和参与度。无论是管理员还是用户,都可以通过使用图标大全来使论坛更加美观、活跃。 ### 回答3: Discuz论坛图标大全是一个包含各种类型图标的资源库。在Discuz论坛中,图标起到了很重要的作用,可以用于标识不同的功能模块、提示用户等。因此,拥有一个图标齐全、多样化的资源库对于论坛的运营和用户体验来说非常重要。 Discuz论坛图标大全覆盖了各种常见的图标类型,例如站点导航图标、主题分类图标、用户头像等。可以根据自己的需要,选择合适的图标来为自己的论坛添加更多个性化的元素和特色。 通过Discuz论坛图标大全,管理员可以轻松地对论坛进行美化和功能定位。比如,可以为各个板块设置不同的图标,使用户在浏览时更易于辨识和理解;还可以通过不同的图标样式和颜色来区分不同的主题分类,从而让用户更方便地找到自己感兴趣的内容。 另外,Discuz论坛图标大全也为用户提供了更多的个性化选择。用户可以根据自己的喜好和需求选择不同风格、颜色和大小的头像来展示自己的个性。这不仅能够增加用户的参与度和归属感,还能够促进用户之间的交流和互动。 综上所述,Discuz论坛图标大全是一个方便用户进行个性化设置、美化论坛界面和提升用户体验的重要资源库。通过合理运用这些图标,可以使论坛更加吸引人、易于使用,并提升用户的满意度和粘性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值