.net 爬取网页数据

15 篇文章 0 订阅
6 篇文章 1 订阅

需求:爬取https://www.u88.com/网站上所有餐饮和茶饮品牌公司数据;需要数据:公司、品牌、门店数,营业状态,所属地区,注册资金等等

步骤:

1、根据门店汇总页面地址获取所有加盟品牌详细页面地址

图一:

static void Main(string[] args)
        {
            for (int i = 1; i <= 7095; i++)
            {
                string url = string.Format("https://www.u88.com/canyin/p" + "{0}",i);
                getHtmlData(url);
            }
            Console.ReadKey();
        }

 图二:

public static void getHtmlData(string urls)
        {
            var webGet = new HtmlWeb();
            var document = webGet.Load(urls);
            var div = document.DocumentNode.SelectNodes("//div[@class='item_pic']");
            foreach (HtmlNode node in div)
            {
                var linkParser = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                //var rawString = "house home go www.monstermmorpg.com nice hospital http://www.monstermmorpg.com this is incorrect url http://www.monstermmorpg.commerged continue";
                foreach (Match m in linkParser.Matches(node.InnerHtml))
                {
                    getHtmlDetailData(m.Value);
                }
            }
        }

图一中i代表当前为第几页,这个根据实际情况可修改。比如我茶饮数据只有八百多页,就只需要循环八百多次就可以。每页十条数据,通过筛选整个页面的控件之后,匹配出你需要的地址。

2、 通过获取到的品牌加盟地址获取到品牌的详细信息,并存入数据库

public static void getHtmlDetailData(string urls)
        {
            try
            {
                var webGet = new HtmlWeb();
                var document = webGet.Load(urls);
                var div = document.DocumentNode.SelectNodes("//div[@class='tit_pice']//li//span");
                var brandname = document.DocumentNode.SelectNodes("//div[@class='pic_info']//h1")[0].InnerText;

                var state = document.DocumentNode.SelectNodes("//div[@class='pic_com']//ul//li//em")[1].InnerText;
                var companyname = document.DocumentNode.SelectNodes("//div[@class='pic_com']//div")[0].InnerText;
                string area = div[0].InnerText;
                string shopcount = div[1].InnerText;
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat(@"INSERT INTO dbo.branddata (   brandname , companyname ,shopcount ,area ,state,type)VALUES ('{0}','{1}','{2}','{3}','{4}','{5}')
                                ", brandname, companyname, shopcount, area, state, "餐饮");
                WebCrawler.DataBaseSqlServer.ExcuteSql(sb.ToString());
                Console.WriteLine(urls + "插入数据成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

最后获取到的结果:

这样七万多条餐饮类品牌加盟数据就获取到了。

重点:1、获取页面html  2、你要取得数据的控件部分 3、根据正则表达式获取控件部分的url地址 4、获取详细页面你需要的控件的值【选择对应class节点控件】   详细看代码
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值