抓取网页内容抓不到,使用PhantomJS该如何正确的抓取JS加载后的网页内容?

一.使用传统的抓取方法:HtmlAgilityPack.HtmlDocument

超多经典学习娱乐可以到知新文学上面参考学习

Html Agility Pack 不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟jQuery操作DOM媲美:)
Html Agility Pack最常用的基础类其实不多,对解析DOM来说,就只有HtmlDocument和HtmlNode这两个常用的类,还有一个 HtmlNodeCollection集合类。其中HtmlWeb类帮助获取Web页面很方面。


二、添加引用很简单

Install-Package HtmlAgilityPack
1
HtmlDocument类
当然在解析DOM前需要加载html原始文件或者html的字符串,HtmlDocument类封装了支持此功能的方法,下面是加载html的方法介绍。

HtmlDocument类定义了多个重载的Load方法来实现以不同方式加载html,其实主要分为两种,一种是从Stream中加载html,另外一种是从物理路径加载html,分别见下面:

方法:public void Load(TextReader reader)
说明:从指定的 TextReader对象中加载Html
示例:

HtmlDcument doc  = new  HtmlDocument();
StreamReader sr  =  File.OpenText( " file path " );
doc.Load(sr);
1
2
3

基于上面方法,衍生出了几个不同重载方法。

以指定的Stream对象为主的有:

(1)public void Load(Stream stream)    ///从指定的Stream对象中加载html;

(2)public void Load(Stream stream, bool detectEncodingFromByteOrderMarks)    ///指定是否从顺序字节流中解析编码格式

(3)public void Load(Stream stream, Encoding encoding)    ///指定编码格式

(4)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)

(5)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

以指定的物理路径为主的有:

 (1)public void Load(string path)

(2)public void Load(string path, bool detectEncodingFromByteOrderMarks)    ///指定是否从顺序字节流中解析编码格式

(3)public void Load(string path, Encoding encoding)    ///指定编码格式

(4)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)

(5)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

这种方式只能抓取JS加载前的内容,有缺陷;


二,使用经典方案:PhantomJS,抓取JS加载后的网页内容;

超多经典学习娱乐可以到知新文学上面参考学习

hantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,这样访问网页就省去了浏览器的界面绘制所消耗的系统资源,比较适合用于网络测试等应用 。我只是调用了其中的一个截取网页的小功能,可以完美的解析网页的js和css 而且兼容html5,不过最新的1.5版本不支持flash,所以我采用了1.4的版本,能够得到完整的网页体验。

1.打开nuget安装相关包;

2.

 3.源码:引用

using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Chrome;
//using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;

        static ChromeDriver driver { get; set; }
        static ICookieJar cookie { get; set; }

#region 抓取数据的要求
        private static void GetHtml(string searchAA,string url)
        {

            PhantomJSDriverService driverService = PhantomJSDriverService.CreateDefaultService();
            driverService.IgnoreSslErrors = true;
            ChromeOptions options = new ChromeOptions();
            options.AddArgument("--headless");
            options.AddArgument("--nogpu");
            List<String> tagNmaeList = new List<string>();
            using (driver = new ChromeDriver(options))
            {
                try
                {
                    driver.Manage().Window.Maximize();
                    driver.Navigate().GoToUrl(url);
                    Thread.Sleep(5000);
                    var txtPath = driver.PageSource;

                    string wtxtTitle =driver.FindElementByTagName("h1").Text;//
                    string wtxtContent = wtxtTitle+ "\r\n" + driver.FindElementById("wenzhangziti").Text;//
                    string strUrl = driver.FindElementByClassName("prenext").FindElement(By.TagName("a")).GetAttribute("href").ToString();//获取到文章内容

                    string strccUrl = driver.FindElementByClassName("prenext").Text;
                    bool boolstr1 = strccUrl.Contains("下");
                    bool boolstr2 = strccUrl.Contains("上");
                }
                catch (NoSuchElementException)
                {
                    Console.WriteLine("找不到该元素"); ;
                }
            }

        }
        #endregion

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

解决方案专家

希望能够帮助,成就你的工匠精神

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值