最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决定试一试~

于是到https://www.nuget.org/packages/ScrapySharp去看看,

看到这句下载提示:To install ScrapySharp, run the following command in the Package Manager Console

PM> Install-Package ScrapySharp

接下去我就去找package manager console,(http://docs.nuget.org/docs/start-here/using-the-package-manager-console)

操作说明:From the Tools menu, select Library Package Manager and then click Package Manager Console.

发现还没装~@_@!!

那么就去装一下插件吧!阅读了这篇博文http://www.cnblogs.com/baiyu/archive/2011/09/07/2170028.html

一、 安装Nuget

  1. Visual studio 2012-> Tool-> Extension Manager。

  2. 选择Online Gallery,在右上角的搜索中输入Nuget,之后按提示安装即可。

  3. 安装之后菜单View-> Other windows中会出现Package Manager Console, 这是一个集成到VS中的控制台工具。

注意:在选择ScrapySharp的版本的时候也要考虑htmlAgilityPack的版本 

附:scrapySharp官网链接:https://www.nuget.org/packages/ScrapySharp

于是,继续操作Tools->Library Package Manager->Package Manager Console

PM> Install-Package HtmlAgilityPack
正在安装“HtmlAgilityPack1.4.6”。
已成功安装“HtmlAgilityPack1.4.6”。
正在将“HtmlAgilityPack1.4.6”添加到 WindowsFormsDemo0320。
已成功将“HtmlAgilityPack1.4.6”添加到 WindowsFormsDemo0320。

PM> Install-Package ScrapySharp
正在尝试解析依赖项“HtmlAgilityPack (≥1.4.6)”。
正在安装“ScrapySharp2.2.63”。
已成功安装“ScrapySharp2.2.63”。
正在将“ScrapySharp2.2.63”添加到 WindowsFormsDemo0320。
已成功将“ScrapySharp2.2.63”添加到 WindowsFormsDemo0320。

接下来开始进行抓取,

原始网页是网易一新闻网页:http://news.163.com/14/0413/18/9PNVIBV000014JB6.html

下面实现的效果是,抓取title标签的内容和正文内容(也就是<div id="endText">…(捕捉<p></p>中间的内容)…</div>)

捕捉title的时候需要注意,有时候一个网页不只一对title标签!!

但是,其实网易新闻页面显示的标题存储的标签<h1 id="hltitle">……</h1>

所以提取标题的核心代码为

String title = doc.DocumentNode.SelectSingleNode("//h1[@id='h1title']").InnerText;

捕捉正文内容的核心代码:

html.CssSelect("p").CssSelectAncestors("div#endText");

下面看下该新闻页面正文部分的html代码:

<divid="endText"></p><p>人民网兰州4月13日电 兰州市今天下午召开新闻发布会,初步查明了导致自流沟内水体苯超标的原因。根据环保专家现场初步分析判断,周边地下含油污水是引起自流沟内水体苯超标的直接原因。</p><p>根据目前的调查情况初步判定,自流沟周边地下含油污水形成的原因有三点:一是原兰化公司原料动力厂原油蒸馏车间R205A#渣油罐曾于1987年12月28日8时50分发生物理爆破事故,罐体破裂造成90立方渣油泻出,其中有34吨渣油跑料未能回收,渗入地下;二是原兰化公司原料动力厂原油蒸馏车间泵B-113出口总管曾于2002年4月3日发生开裂着火,泄漏的渣油及救火过程中产生的大量消防污水渗入地下。</p><p>另据中新网兰州4月13日电&nbsp; 兰州市“4·11”局部自来水苯指标超标事故应急处置领导小组副组长郑志强13日说,调查组从11日下午3时开始展开调查工作,采取开挖深坑的方法,查找到了导致水体苯超标的方位。根据环保专家现场初步分析判断,周边地下含油污水是引起自流沟内水体苯超标的直接原因。</p><p>兰州官方通报称,根据目前的调查情况初步判定,自流沟周边地下含油污水的形成原因有两个:</p><p>一是原兰化公司原料动力厂原油蒸馏车间R205A#渣油罐(该址原为兰化公司原料动力厂250万吨/年炼油装置,该装置建于1982年,2003年停用,2006年拆除。拆除后,在原址建成现有的40万吨/年芳烃抽提装置,罐区设计分别储存馏份油、轻油、渣油),曾于1987年12月28日8时50分发生物理爆破事故,罐体破裂造成90立方渣油泄出,其中有34吨渣油跑料未能回收,渗入地下。</p><p><!--AD200x300_2-->
<divclass="gg200x300">
<iframesrc="http://g.163.com/r?site=netease&affiliate=news&cat=article&type=logo300x250&location=13"width="300"height="250"frameborder="no"border="0"marginwidth="0"marginheight="0"scrolling="no"> </iframe>
</div><p>二是原兰化公司原料动力厂原油蒸馏车间泵B—113出口总管曾于2002年4月3日发生开裂着火,泄漏的渣油(具体数量当时未统计)及救火过程中产生的大量消防污水渗入地下。</p><p>郑志强说,目前兰州石化现有生产装置及罐区运行正常,未发现物料及产品泄漏现象。生产区域内雨排井、化污系统水封井未发现物料泄漏现象,消防井内发现有少量飘油。</p><p>事故调查组下一步调查工作的重点是,对从开挖深坑中提取的含油废水组份进行化验,进一步从技术层面核实地下含油污水与自流沟内苯超标水体的关联性。同时,对4号、3号自流沟内的具体泄漏点位进行实地勘查核实,并对造成局部自来水苯超标事件的相关责任单位和责任人进行进一步的调查取证。(完)</p> <divclass="ep-source cDGray"><spanclass="left"><ahref="http://news.163.com/"><imgsrc="http://img1.cache.netease.com/cnews/css13/img/end_news.png"alt="netease"width="13"height="12"class="icon"></a> 本文来源:人民网  作者:高翔、银燕、苗亮军</span><spanclass="ep-editor">责任编辑:NN102</span>              </div></div>

下面贴一下实现的核心代码(但是编码处理部分代码没有贴出)

添加 :using ScrapySharp.Extensions;

namespaceHtmlAgilityDemo
{classProgram {static void Main(string[] args) {var uri = new Uri("http://news.163.com/14/0413/18/9PNVIBV000014JB6.html");var browser1 = newScrapingBrowser();var html1 =browser1.DownloadString(uri);var doc = newHtmlDocument(); doc.LoadHtml(html1);var html =doc.DocumentNode;var title = html.CssSelect("title");foreach (var htmlNode intitle) { Console.WriteLine(htmlNode.InnerText); }var ps = html.CssSelect("p").CssSelectAncestors("div#endText");foreach (var htmlNode inps) { Console.WriteLine(htmlNode.InnerHtml); } } }
}

运行后输出:

兰州官方公布自流沟周边地下含油污水形成原因_网易新闻中心人民网兰州4月13日电 兰州市今天下午召开新闻发布会,初步查明了导致自流沟内水体苯超标的原因。根据环保专家现场初步分析判断,周边地下含油污水是引起自流沟内水体苯超标的直接原因。根据目前的调查情况初步判定,自流沟周边地下含油污水形成的原因有三点:一是原兰化公司原料动力厂原油蒸馏车间R205A#渣油罐曾于1987年12月28日8时50分发生物理爆破事故,罐体破裂造成90立方渣油泻出,其中有34吨渣油跑料未能回收,渗入地下;二是原兰化公司原料动力厂原油蒸馏车间泵B-113出口总管曾于2002年4月3日发生开裂着火,泄漏的渣油及救火过程中产生的大量消防污水渗入地下。另据中新网兰州4月13日电&nbsp; 兰州市“4·11”局部自来水苯指标超标事故应急处置领导小组副组长郑志强13日说,调查组从11日下午3时开始展开调查工作,采取开挖深坑的方法,查找到了导致水体苯超标的方位。根据环保专家现场初步分析判断,周边地下含油污水是引起自流沟内水体苯超标的直接原因。兰州官方通报称,根据目前的调查情况初步判定,自流沟周边地下含油污水的形成原因有两个:一是原兰化公司原料动力厂原油蒸馏车间R205A#渣油罐(该址原为兰化公司原料动力厂250万吨/年炼油装置,该装置建于1982年,2003年停用,2006年拆除。拆除后,在原址建成现有的40万吨/年芳烃抽提装置,罐区设计分别储存馏份油、轻油、渣油),曾于1987年12月28日8时50分发生物理爆破事故,罐体破裂造成90立方渣油泄出,其中有34吨渣油跑料未能回收,渗入地下。<!-- AD200x300_2 --> 二是原兰化公司原料动力厂原油蒸馏车间泵B—113出口总管曾于2002年4月3日发生开裂着火,泄漏的渣油(具体数量当时未统计)及救火过程中产生的大量消防污水渗入地下。郑志强说,目前兰州石化现有生产装置及罐区运行正常,未发现物料及产品泄漏现象。生产区域内雨排井、化污系统水封井未发现物料泄漏现象,消防井内发现有少量飘油。事故调查组下一步调查工作的重点是,对从开挖深坑中提取的含油废水组份进行化验,进一步从技术层面核实地下含油污水与自流沟内苯超标水体的关联性。同时,对4号、3号自流沟内的具体泄漏点位进行实地勘查核实,并对造成局部自来水苯超标事件的相关责任单位和责任人进行进一步的调查取证。(完)                                                                                                     本文来源:人民网  作者:高翔、银燕、苗亮军     责任编辑:NN102

然后看下输出,发现出现残留【<!-- AD200x300_2 -->

部分注释代码未被清除,那么处理一下,

foreach (HtmlNode nodeScripte in node.Descendants("script").ToList()){nodeScripte.Remove();
}foreach (HtmlNode nodeStyle in node.Descendants("style").ToList())
{nodeStyle.Remove();
}foreach (HtmlNode nodeComment in node.Descendants("//comment()").ToList())
{nodeComment.Remove();
}

发现嵌套在其中的注释标签用上面的方法无法清除干净。

那么采用下面方法,

foreach(var script in doc.DocumentNode.Descendants("script").ToArray()){script.Remove();}foreach(var style in doc.DocumentNode.Descendants("style").ToArray()){style.Remove();}foreach(var comment in doc.DocumentNode.SelectNodes("//comment()").ToArray()){comment.Remove();}

运行后发现,已经清除干净。

把所有的script、style标签从dom树中去掉(为了解决迭代器在工作时不能从集合中Remove元素的问题,使用ToArray()转换为数组再遍历)。

HtmlAgilityPack是使用XPath语法,"//comment()"在XPath中表示“所有注释节点”。

【补充】获取html中meta标签中的content的内容

一些相关的语句:

1、获取网页title:doc.DocumentNode.SelectSingleNode("//title").InnerText;

  解释:XPath中“//title”表示所有title节点。SelectSingleNode用于获取满足条件的唯一的节点。

2、获取所有的超链接:doc.DocumentNode.Descendants("a")

3、获取name为kw的input,也就是相当于getElementsByName():

var kwBox = doc.DocumentNode.SelectSingleNode("//input[@name='kw']");

  解释:"//input[@name='kw']"也是XPath的语法,表示:name属性等于kw的input标签。

4、其他:

var divs = html.CssSelect("div");  //all div elements

var nodes = html.CssSelect("div.content"); //all div elements with css class ‘content’

var nodes = html.CssSelect("div.widget.monthlist"); //all div elements with the both css class

var nodes = html.CssSelect("#postPaging"); //all HTML elements with the id postPaging

var nodes = html.CssSelect("div#postPaging.testClass"); // all HTML elements with the id postPaging and css class testClass

var nodes = html.CssSelect("div.content > p.para"); //p elements who are direct children of div elements with css class ‘content’

var nodes = html.CssSelect("input[type=text].login"); // textbox with css class login

We can also select ancestors of elements:

var nodes = html.CssSelect("p.para").CssSelectAncestors("div.content > div.widget");

参考链接:

http://www.cnblogs.com/rupeng/archive/2012/02/07/2342012.html

http://www.cnblogs.com/cappuccino/p/3403495.html

http://www.cnblogs.com/dc-lancer/archive/2013/03/27/2985163.html

http://www.cnblogs.com/sswwsw/archive/2012/12/06/2805097.html

http://www.cnblogs.com/linfei721/archive/2013/05/08/3066697.html

http://www.cnblogs.com/cxlings/archive/2013/05/31/3110858.html

转载于:https://www.cnblogs.com/lmei/p/3662374.html

爬虫技术 -- 进阶学习(十)网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)...相关推荐

  1. 网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp

    网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp 最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决定试一 ...

  2. 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)

    转自原文 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp) 最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决 ...

  3. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...

    JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...

  4. php 获取字符串首歌,PHP爬虫 网易云音乐歌手和热门歌曲信息抓取

    序章 PM最近问我要网易云的歌手的热门歌曲的信息,作为数据分析.说起网络爬虫我们都不陌生,我们分析网站的HTML的格式和URL的通用格式来写相应的算法.然后请求对应的URL来获取HTML字符串,因此总 ...

  5. IOS开发简易的网易新闻页面

    IOS开发简易的网易新闻页面 这是简易的网易新闻,使用swift语法去写的 git 仓库地址: https://e.coding.net/lujun1/wangyijianyixinwenswiftb ...

  6. python动态爬取知乎_python爬虫从小白到高手 Day2 动态页面的爬取

    今天我们说说动态页面的抓取,动态页面的概念不是说网页上的内容是活动的,而是刷新的内容由Ajax加载,页面的URL没有变化,具体概念问度娘. 就以男人都喜欢的美女街拍为例,对象为今日头条. chrome ...

  7. Python爬虫小偏方:如何用robots.txt快速抓取网站?

    作者 | 王平,一个IT老码农,写Python十年有余,喜欢分享通过爬虫技术挣钱和Python开发经验. 来源 | 猿人学Python 在我抓取网站遇到瓶颈,想剑走偏锋去解决时,常常会先去看下该网站的 ...

  8. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下

    原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下 作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程 ...

  9. python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例

    转载请注明出处:python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例 我们在前面的文章中已经学习了如果使用python进行数据抓取. 但我们常常会遇到一种场景,就是想要获取的页面内容或者接 ...

最新文章

  1. 全球都面临网络安全“人才荒” 院士建议我国高校开“少年班”
  2. 互联网项目中MySQL应该选什么事务隔离级别
  3. Struts2零配置介绍(约定访问)
  4. pythonandroid自动化测试仪器_使用Python进行Android自动化测试
  5. Mysql闪回工具之binlog2sql的原理及其使用
  6. Java并发编程框架Disruptor
  7. c语言创建通讯录不用指针,用C语言做通讯录,只能用数组,不能用指针,急用啊,谢谢了...
  8. python: excel单元格读取写入
  9. Java面试笔试题大全
  10. 通信算法之二:信道编码译码 BCH码、RS码、卷积码、Turbo码、LDPC码
  11. haneWIN NFS服务器端 V1.1.69 汉化版
  12. 微型计算机步进电机控制,使用微机对步进电机进行控制方式主要有两种
  13. 12306 验证码识别源码
  14. Linux命令之ps命令
  15. python足球联赛赛程_足球联赛赛程表工作表
  16. Linux网络——DNS域名解析服务
  17. 网络变压器匝间电容(CWW)及网络变压器线圈分布电容(CD)
  18. SAP BDC数据批量导入功能
  19. 10、HTML基础——列表元素
  20. [bx]和loop指令编程

热门文章

  1. UVA 1626括号序列DP
  2. 计科练习13题解(最短路径)
  3. 华为P50用鸿蒙系统吗,华为P50Pro+采用鸿蒙系统么-搭载鸿蒙OS么
  4. scrapy简单爬取内容
  5. python定时器每隔几秒执行一次
  6. Google's BBR拥塞控制算法如何对抗丢包
  7. OSChina 周一乱弹 ——用电脑搞了个烹饪料理机 !
  8. 计算机基础教师期中工作小结,教师个人小结
  9. 第一期:利用旧手机搭建网盘(家庭nas)
  10. 天载配资点评指数放量下跌