• 浅谈抓取网页数据(奉上Demo)


    Demo源码

    背景

      曾经在公司做过一个比价系统,就是抓取其它网站上商品的价格并和自己公司的商品进行对应,然后展示出来,给pm提供一个定价的参考。后来,有同事的朋友在找工作的时候,猎头让其做一个抓取去哪网最低价机票的程序,然后,我就帮忙整了一下。本文的目的在于提供这个程序的源码,然后和大家探讨一下网页信息抓取的相关点。Demo使用c#并在vs2012环境下运行。

    项目结构一览

      下面是Demo的项目结构图:

    运行结果

      下面是Demo的运行结果图:

    思路&问题分析

    • 个人以为,网页信息的获取分为两个阶段:1 知道目标网页和相关参数,并获取网页的源码 2 将获取到的源码抽取出我们需要的信息,并转换成c#对象
    • 在Demo中的HttpHelper.cs文件下的类的职责就是设定目标网页地址和相关参数,该类是在网上找到的,据说可以无视cookie、证书等验证,很牛,推荐小伙伴们使用,所以,第一个目标是比较容易能够完成的
    • 难点在于第二个目标,我们如何抓取html源码(json数据)中的有效信息并转换成我们需要的c#对象呢?Demo中获取的是json数据,然后用正则抓出了其中的一部分,再转换成一个实体类的列表。Demo中的AsyncRegexHelper是异步的正则匹配帮助类,在使用正则匹配的过程中,经常遇到无限回溯的问题,使用这个帮助类可以异步地执行匹配并且有一个超时时间。现在碰到的问题是正则匹配比较不靠谱,难度较大且不易扩展,目前打算想用Html Agility Pack来进行数据的匹配,希望伙伴们能指点下,谢谢大家。

    总结

      本人文笔拙劣,感谢大家的支持。提供源码,大家分享一下,希望能做一个通用点的系统,只需要输入网址和一些简单的规则,就能够获取我们所需要的信息。

    Demo源码

  • 相关阅读:
    在windows安装部署ShardingSphere-Proxy 分库分表中间件
    报错:fatal: unable to access 'https://github.com/xxx/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
    一台Windows配置多个mysql服务
    解决.net core 部署IIS报错:HTTP Error 500.30
    vs code 不格式化注释
    .net工具类——URL请求数据
    .net工具类——URL处理
    .net工具类——读取写入cookie
    js没有权限
    ueditor图片上传
  • 原文地址:https://www.cnblogs.com/SmallZL/p/3653699.html
Copyright © 2020-2023  润新知