为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
前端工具 C#
  本篇文章是使用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即可
我们把网址传入下面函数

        /// <summary>
        /// 获取html
        /// </summary>
        /// <param name="url"></param>
        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               该节点是否已关闭(</xxx>)
ClosingAttributes         在关闭标签的属性集合
FirstChild            获取第一个子节点
HasAttributes           判断该节点是否含有属性
HasChildNodes           判断该节点是否含有子节点
HasClosingAttributes       判断该节点的关闭标签是否含有属性(</xxx class="xxx">)
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

我们获取到了列表中所有房源的信息
 <tr logr="d_2_37815579919119_28653741792844_15_2_sortid:1483857357739@ses:pc12defrank^0"  _pos="2 sortid="1483857357739">
                <td class="img">
                    <div class="img_list">
                                    <span class="img_picCount"><span class="img_picCountOpacity"></span><span>10</span></span>
                <span class="mianshuiTip"></span>                    <a href="http://sh.58.com/ershoufang/28653741792844x.shtml?utm_source=market&spm=b-31580022738699-me-f-824.bdpz_biaoti?psid=117141666194581055298773342&entinfo=28653741792844_0"  target="_blank">
                        <img lazy_src='http://pic2.58cdn.com.cn/anjuke_58/26fd5a005a6b852a76b3d68de9e2f0dd?w=132&h=99' class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://pic2.58.com/n/images/list/noimg.gif" alt="惊爆价,经典双南户型,婚房装修,楼层适中,特别适合居家过日子" />
                    </a>
                    </div>
                </td>
                <td class="t">
                    <p class="bthead">
                        <a href="http://sh.58.com/ershoufang/28653741792844x.shtml?utm_source=market&spm=b-31580022738699-me-f-824.bdpz_biaoti?psid=117141666194581055298773342&entinfo=28653741792844_0"  target="_blank" class="t"  infoid="1483857357739">
                            惊爆价,经典双南户型,婚房装修,楼层适中,特别适</a>
                                                            <span class="wlt-ico wlt1" title="58同城认证商家"></span>
                                <span title="免税房源" class="ico dun"></span>                            <span name="zaixian_37815579919119" onClick="clickLog('from=fc_pc_list_bangbang&psid=117141666194581055298773342&entityId=28653741792844&entityType=0')"></span>
                                                        <i class="clear"></i>
                    </p>
                    <div class="qj-listleft">
                                                <a href="/changfenggongyuan/ershoufang/" class="a_xq1">长风公园</a>
                                                - <a href="/xiaoqu/zhangfengercun/ershoufang/" target="_blank" class="a_xq1">
                        长风二村二手房</a>
                                                <i class="clear"></i>
                        <!-- 房源特色 -->
                        <span class="label_fang g_tagSon1">双南户型</span><span class="label_fang g_tagSon2">装修全送</span><span class="label_fang g_tagSon3">地铁房</span><span class="label_fang g_tagSon4">拎包入住</span>                        <span class="label_fang tubaAdd" style="background:#f5b95f;">
                            <a href="http://www.to8to.com/huodong/58dalibao/?to8to_from=11_1_3"  target="_blank" rel="nofollow" style="text-decoration: none;">土巴兔礼包</a>
                        </span>
                        <i class="clear"></i>
                        <!-- 房源特色 end -->
                        <span class="qj-listjjr"><span class="geren"></span><label>经纪人</label>                                <a class="qj-lijjrname" target="_blank" onclick="javascript:clickLog('from=fc_list_pxjjr&psid=117141666194581055298773342&entityId=28653741792844&entityType=0');">
                                    :王龙剑                                </a>
                                                                                        <a   target="_blank" onclick="javascript:clickLog('from=fc_list_pxgs&psid=117141666194581055298773342&entityId=28653741792844&entityType=0');">
                                    我爱我家                                </a>
                                                            <label>-</label>
                                <a  target="_blank" onclick="javascript:clickLog('from=fc_list_pxjjr&psid=117141666194581055298773342&entityId=28653741792844&entityType=0');">
                                    金沙江店3组                                </a>
                            &nbsp;今天</span>                    </div>
                    <div class="qj-listright btall">
                            <b class='pri'>310</b> 万                            &nbsp;&nbsp;
                            57760元/㎡                            <br/>
                            <span class="showroom">
                                2室1厅1卫                            </span>
                            (53.67㎡)
                            <br/>
                    </div>
                                                         </td>
            </tr>

接下来我们需要对每条房源解析
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"]设置属性名称

其他数据以此类推

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

点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消