C#使用CSS选择器抓取页面内容

最近在查wpf绘图资料时,偶然看到python使用CSS器抓取网页的功能。觉得很强,这里用C#也实现一下。

先介绍一下CSS选择器

在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。


选择器


例子


例子描述


.class


.intro


选择 class="intro" 的所有元素。


#id


#firstname


选择 id="firstname" 的所有元素。


*


*


选择所有元素。


element


p


选择所有 <p> 元素。


element,element


div,p


选择所有 <div> 元素和所有 <p> 元素。


element element


div p


选择 <div> 元素内部的所有 <p> 元素。


element>element


div>p


选择父元素为 <div> 元素的所有 <p> 元素。


element+element


div+p


选择紧接在 <div> 元素之后的所有 <p> 元素。


[attribute]


[target]


选择带有 target 属性所有元素。


[attribute=value]


[target=_blank]


选择 target="_blank" 的所有元素。


[attribute~=value]


[title~=flower]


选择 title 属性包含单词 "flower" 的所有元素。


[attribute|=value]


[lang|=en]


选择 lang 属性值以 "en" 开头的所有元素。


:link


a:link


选择所有未被访问的链接。


:visited


a:visited


选择所有已被访问的链接。


:active


a:active


选择活动链接。


:hover


a:hover


选择鼠标指针位于其上的链接。


:focus


input:focus


选择获得焦点的 input 元素。


:first-letter


p:first-letter


选择每个 <p> 元素的首字母。


:first-line


p:first-line


选择每个 <p> 元素的首行。


:first-child


p:first-child


选择属于父元素的第一个子元素的每个 <p> 元素。


:before


p:before


在每个 <p> 元素的内容之前插入内容。


:after


p:after


在每个 <p> 元素的内容之后插入内容。


:lang(language)


p:lang(it)


选择带有以 "it" 开头的 lang 属性值的每个 <p> 元素。


element1~element2


p~ul


选择前面有 <p> 元素的每个 <ul> 元素。


[attribute^=value]


a[src^="https"]


选择其 src 属性值以 "https" 开头的每个 <a> 元素。


[attribute$=value]


a[src$=".pdf"]


选择其 src 属性以 ".pdf" 结尾的所有 <a> 元素。


[attribute*=value]


a[src*="abc"]


选择其 src 属性中包含 "abc" 子串的每个 <a> 元素。


:first-of-type


p:first-of-type


选择属于其父元素的首个 <p> 元素的每个 <p> 元素。


:last-of-type


p:last-of-type


选择属于其父元素的最后 <p> 元素的每个 <p> 元素。


:only-of-type


p:only-of-type


选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。


:only-child


p:only-child


选择属于其父元素的唯一子元素的每个 <p> 元素。


:nth-child(n)


p:nth-child(2)


选择属于其父元素的第二个子元素的每个 <p> 元素。


:nth-last-child(n)


p:nth-last-child(2)


同上,从最后一个子元素开始计数。


:nth-of-type(n)


p:nth-of-type(2)


选择属于其父元素第二个 <p> 元素的每个 <p> 元素。


:nth-last-of-type(n)


p:nth-last-of-type(2)


同上,但是从最后一个子元素开始计数。


:last-child


p:last-child


选择属于其父元素最后一个子元素每个 <p> 元素。


:root


:root


选择文档的根元素。


:empty


p:empty


选择没有子元素的每个 <p> 元素(包括文本节点)。


:target


#news:target


选择当前活动的 #news 元素。


:enabled


input:enabled


选择每个启用的 <input> 元素。


:disabled


input:disabled


选择每个禁用的 <input> 元素


:checked


input:checked


选择每个被选中的 <input> 元素。


:not(selector)


:not(p)


选择非 <p> 元素的每个元素。


::selection


::selection


选择被用户选取的元素部分。

使用Nuget搜索这个包就可以C#自带的类库的里不支持这个操作,所以需要用到三方库。这里用的是HtmlAgilityPack

这里以抓取https://technet-info.com/Main.aspx为例

未完

原文地址:https://www.cnblogs.com/zhaotianff/p/11994402.html

时间: 2024-11-02 02:34:56

C#使用CSS选择器抓取页面内容的相关文章

PHP cURL库函数抓取页面内容

目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) 9.1 WordPress 链接检查器 10 另一些有用的cURL 选项 10.1 HTTP 认证 10.2 FTP 上传 10.3 代理/FQ请求 10.4 回调函数 11 小结 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP.FTP.TELNET等,能

记录一个简单的HttpClient抓取页面内容

现如今的网络时代,HTTP协议如此重要,随着java的发展,也越来越多的人采用java直接通过HTTP协议访问网络资源,虽然java.net提供了基本的访问HTTP协议的基本功能,但是对于大部分应用程序来说,仍旧还有许多功能不能够灵活使用:HttpClient是Apache Jakarta Common 下的子项目,一个提供访问HTTP协议的java工具包,提供了更多.更快捷.丰富的方法,HttpClient主要常用的功能有:实现了所有 HTTP 的方法(GET,POST,PUT,HEAD,DE

nodejs抓取页面内容,并分析有无某些内容的js文件

nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作! 举个例子,比如要在页面中找有没有www.baidu.com,不多说了,直接放代码: //引入模块 var http = require("http"), fs = require('fs'), url = require('url'); //写入文件,把结果写入不同的文件 var writeRes = function(p, r)

爬虫-抓取页面内容

# -*- coding: UTF-8 -*- from HTMLParser import HTMLParser import sys,urllib2,string,re,json reload(sys) sys.setdefaultencoding('utf-8') class hp(HTMLParser): def __init__(self): self.readingdata_a = False self.title = [] self.usite = [] HTMLParser.__

curl只能抓取页面的部分内容的原因

核心提示:先列出 HessianPHP 的错误提示: CURL transport error: transfer closed with outstanding read data remaining 基础知识背景: 1)"Expect: 100-continue"的来龙去脉: HTTP/1.1 协议里设计100 (Continue) HTTP 状态码的的目的是,在客 ... 先列出 HessianPHP 的错误提示: CURL transport error: transfer c

PHP如何抓取https内容?记录一下。

PHP里做一般的获取内容时,用自带的file_get_contents()函数基本就足够了.当然,这个函数只能抓一些简单的数据,如果是遇到需要登录的页面,就不行了,而且效率及稳定性也不是很强.所以要是有特殊需求的话,还是用curl吧.不仅仅速度快,而且非常稳定,基本上用curl抓取失败的几率很小. 而且今天在抓优酷视频API接口中的信息时,发现了一个问题,由于优酷API的url请求是https安全协议,用file_get_contents()函数竟然无法获取到数据,然后用curl写了个代替函数,

好用的 curl 抓取 页面的封装函数

由于经常使用php curl 抓取页面的内容,在此mark 平时自己封装的 curl函数,(其实 现在也开始用 Python 来爬了~ ^-^) /** * 封装curl方法 * @author FredGui * @param string $url 必选 接口地址 * @param string $post 可选 如果是post访问填写post参数数组 * @param int $timeout 可选 超时时间 * @param string $cookie * @param int $de

php抓取页面的几种方式

在做一些天气预报或者RSS订阅的程序时,往往 需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来. 下面简单说一下php抓取页面的几种方法及原理: 一. PHP抓取页面的主要方法: 1. file()函数 2. file_get_contents()函数 3. fopen()->fread()->fclose()模式 4

[实战演练]python3使用requests模块爬取页面内容

本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取响应状态码 5.案例演示 后记 1.安装pip 我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip. $ sudo apt install python-pip 安装成功,查看PIP版本: $ pip -V 2.