栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C#抓取58同城的房源数据

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#抓取58同城的房源数据

  本篇文章是使用C#抓取数据的,使用WebClient+HtmlAgilityPack的方法对页面进行抓取和数据分析。通过使用WebClient库对58同城二手房列表页进行抓取,通过HtmlAgilityPack对页面进行解析,并从中获取房源价格,面积,户型和价格等数据。

首先获取网站的html文本
58同城 地址
http://sh.58.com/ershoufang/pn1/?utm_source=market&spm=b-31580022738699-me-f-824.bdpz_biaoti&PGTID=0d30000c-0000-2fe5-d01a-f5d4e12dfa56&ClickID=4
这里可以看出
url中sh代表城市
ershoufang表示栏目
pn后面的数字就是当前的列表的页码
循环获取列表页的html只需要将pn后的数字加1即可
我们把网址传入下面函数

 /// 
 /// 获取html
 /// 
 /// 
 public static void gethtmlli(string url)
 {
     WebClient mywebclient = new WebClient();
     //获取或设置用于向Internet资源的请求进行身份验证的网络凭据
     mywebclient.Credentials = CredentialCache.DefaultCredentials;
     Byte[] PageData = null;
     //设置编码类型Gbk
     string pagehtml = "";
  for (int i = 1; i <= sum; i++)
  {
      PageData = mywebclient.DownloadData(string.Format(url, i));
      pagehtml = Encoding.UTF8.GetString(PageData);
      Reger(pagehtml);
  }
 }

循环返回列表页的html,得到html之后将其解析,这里我使用的是HtmlAgilityPack,当然你也可以用正则表达式
58同城的列表信息放在一个table标签里

获取hrml之后可以通过Htmldocument的Load()或LoadHtml()来加载静态内容

Htmldocument doc = new Htmldocument();
doc.LoadHtml(pagehtml);//把刚刚获取到的html给doc
doc.documentNode.SelectNodes("//table[@class='tbimg']/tr");//获取所有tr的集合
   HtmlAgilityPack对应的属性

Attributes              获取节点的属性集合
ChildNodes            获取子节点集合(包括文本节点)
Closed               该节点是否已关闭()
ClosingAttributes         在关闭标签的属性集合
FirstChild            获取第一个子节点
HasAttributes           判断该节点是否含有属性
HasChildNodes           判断该节点是否含有子节点
HasClosingAttributes       判断该节点的关闭标签是否含有属性()
Id                 获取该节点的Id属性
InnerHtml             获取该节点的Html代码
InnerText             获取该节点的内容,与InnerHtml不同的地方在于它会过滤掉Html代码,而InnerHtml是连Html代码一起输出
LastChild             获取最后一个子节点
Line                获取该节点的开始标签或开始代码位于整个HTML源代码的第几行(行号)
LinePosition            获取该节点位于第几列
Name               Html元素名
NextSibling            获取下一个兄弟节点
NodeType             获取该节点的节点类型
OriginalName            获取原始的未经更改的元素名
OuterHtml             整个节点的代码
Ownerdocument          节点所在的Htmldocument文档
ParentNode             获取该节点的父节点
PreviousSibling           获取前一个兄弟节点
StreamPosition           该节点位于整个Html文档的字符位置
XPath               根据节点返回该节点的XPath

我们获取到了列表中所有房源的信息
 
  
      
 10
        
   
      
      
  
  
      

惊爆价,经典双南户型,婚房装修,楼层适中,特别适

长风公园 - 长风二村二手房 双南户型装修全送地铁房拎包入住 土巴兔礼包 :王龙剑 我爱我家 金沙江店3组  今天 310 万   57760元/㎡
2室1厅1卫 (53.67㎡)

接下来我们需要对每条房源解析
SelectSingleNode设置获取规则,比如说属性class='t'的tb标签下面属性class='bthead'的p标签的文本就是房源的标题,我们就通过如下方法获取

string Title =nodes[i].SelectSingleNode("td[@class='t']/p[@class='bthead']/a").InnerText;

InnerText获取当前标签的文本

nodes[i].SelectSingleNode("td[@class='t']/p[@class='bthead']/a").Attributes["href"].Value;

Value获取当前标签的属性,Attributes["href"]设置属性名称

其他数据以此类推

—【所有文章及图片版权归 追梦的懒熊 所有,转载请注明出处】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/231987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号