博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net对html的抓取
阅读量:6776 次
发布时间:2019-06-26

本文共 2350 字,大约阅读时间需要 7 分钟。

最近在项目里需要用到一个小功能,很小很小的功能,就是抓取指定网站上的内容,但是这个网站刚好是用Ajax进行加载主要内容的,这时按平时用的webclient等去抓取是无法抓取到Ajax加载的内容的,用httpwatch等分析后再模拟Post,这个成本有点高了,因为这只是一个很小的功能而已。

在博客园上发问后得到了几个方法,有用nodejs的,有用Selenium的,有用phantomjs的,开始对nodejs进行研究,看了一些介绍,也都放弃了,,这个文档是其中文版说明。

下面说一下其他的两个方法:

Selenium,这个是资源包,3.5和4.0的框架两个都在里面了,这个要配合不同的Driver来进行页面的操作,比如IEDriverServer.exe,还可以是其他的,比如Firefox,Chrome等,可以到Selenium的官网进行了解下载。

其中Selenium需要的dll和Driver都引入到项目中,我就放于Bin中,主要代码如下:

 protected void Button1_Click(object sender, EventArgs e)

        {
            // Create a new instance of the Firefox driver.
            // Notice that the remainder of the code relies on the interface, 
            // not the implementation.
            // Further note that other drivers (InternetExplorerDriver,
            // ChromeDriver, etc.) will require further configuration 
            // before this example will work. See the wiki pages for the
            // individual drivers at http://code.google.com/p/selenium/wiki
            // for further information.
            IWebDriver driver = new InternetExplorerDriver();
            //HtmlUnitDriver driver = new HtmlUnitDriver(true);
            
            //Notice navigation is slightly different than the Java version
            //This is because 'get' is a keyword in C#
            driver.Navigate().GoToUrl("http://data.shishicai.cn/cqssc/haoma/");
            // Find the text input element by its name
            //IWebElement query = driver.FindElement(By.Name("q"));
            // Enter something to search for
            //query.SendKeys("Cheese");
            // Now submit the form. WebDriver will find the form for us from the element
            //query.Submit();
            // Google's search is rendered dynamically with JavaScript.
            // Wait for the page to load, timeout after 10 seconds
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            //wait.Until((d) => { return d.Title.ToLower().StartsWith("cheese"); });
            // Should see: "Cheese - Google Search"
            TextBox1.Text = "Page title is: " + driver.PageSource;
            //Close the browser
            driver.Quit();
        }

这样可以拿到网页内容,但是这期间会弹出dos窗口和Driver的界面,执行完后就会自动关闭,这是我不太满意的地方,不知道有没有什么方法可以解决。

 

phantomjs,这个可以直接到官网下载也可在这里下载,我下载到的是phantomjs-1.9.1-windows这个版本,解压后如下:

其中,第一个是例子,exe这个执行文件是一个运行js的平台,这个可以直接在cmd中进行调用,不记得在哪一个文章中提到在cmd中要定位到这个执行文件所在的目录后才可以执行相应的js的,不然不会成功,果真如此,打开cmd,然后直接cd phantomjs.exe所在的目录,然后执行 phantomjs hello.js可以看到结果。如果下我执行的是一个examples下的一个截图的脚本rasterize.js

其中http://www.hao123.com和hao123.png是这个脚本的参数,即对传入地址截图存为hao123.png,这样的话就可以像Selenium指导所需要的东西所入项目中,然后调cmd进行执行,这个的好处是快,而且没有弹出dos窗口和浏览器窗口。

转载于:https://www.cnblogs.com/YYLin/p/3293963.html

你可能感兴趣的文章
其他消息中间件及场景应用(下2)
查看>>
tomcat性能优化
查看>>
fail2ban调用iptables过滤试探postfix账号ip
查看>>
我的友情链接
查看>>
必看!决定蓝领薪酬高低的因素
查看>>
alias别名设置
查看>>
关于Ubuntu的root密码
查看>>
杨辉三角 学习笔记
查看>>
Linux基础命令---uname显示计算机名称
查看>>
回指路由
查看>>
EVE-NG桥接至VMWare主机
查看>>
我的友情链接
查看>>
配置percona XtraDB Cluster
查看>>
高价值低价格的企业经营哲学
查看>>
linux的软链接和硬链接
查看>>
我的友情链接
查看>>
VMware VSphere 虚拟化&云计算学习配置笔记(七)
查看>>
android ViewPager适配器
查看>>
Listview 标题
查看>>
hello world!!!
查看>>