jquery 獲取系統默認年份_你沒有看錯,爬網頁數據,C# 也可以像 Jquery 那樣

d9d56e744ce139efe1ec2da479fe90ad.gif

一:背景

1. 講故事

前段時間搞了一個地方性民生資訊號,資訊嘛,都是我抄你的,你抄官媒的,小市民都喜歡奇聞異事,所以就存在一個需求,如何去定向抓取奇聞異事的地方號上的新聞,其實做起來很簡單,用邏輯回歸即可,這篇主要討論如何去抓取,在 C# 中大家都知道抓取通用的庫是 HtmlAgilityPack,但是這個庫主流的做法是采用 xpath 提取網頁內容,這就讓我很不爽了,畢竟不熟悉莫名的抵抗哈,像我這個年紀的碼農,被 Jquery 教育了至少 5-6 年,所以必須用 類Jquery 的方式,在 python 中有 pyquery 做這件事情,那在C# 中有沒有類似的方式呢?嘿嘿,萬能的 github 上還真有。。。就是本篇介紹的 CSQuery。

二:CSQuery

1. 安裝

github的地址:https://github.com/zone117x/CsQuery ? 然后在vs中 nuget 一下即可:

22b3cff5ab8ceda39063d8f72bbf2d11.png

2. 舉幾個例子

一切都準備就緒了,那怎么用呢?不著急,我以博客園舉兩個例子。

1) 將首頁中的 友情連接 提取到

289e2cbcd1746250ff364e18adb098ca.png

如上圖,要想獲取這里的?友情鏈接幾個大字,直接用 text() 肯定是不行的,默認情況它會將所有的子節點的文本也會抓到,如下圖:

11e873d8423ad017088c739342c55bb3.png

那怎么處理呢?可以用 jquery 提供的 contents 方法,然后在獲取的所有子節點中判斷是否有 文本節點,最后獲取文本節點的內容即可,如下代碼:

64ca8efe56e0f0f8aaf3a8e9f00a918b.png

用js是搞定了,那用 CSQuery 代碼怎么搞定呢?模仿唄,如下代碼:


????????static?void?Main(string[]?args)
????????{
????????????var?jquery?=?CQ.CreateDocument(new?WebClient().DownloadString("http://cnblogs.com"));

????????????var?content?=?jquery["#friend_link"].Contents().Filter((dom)?=>
????????????{
????????????????return?dom.NodeType?==?NodeType.TEXT_NODE;
????????????}).Text();

????????????Console.WriteLine(content);
????????}

我不知道用 xpath 提取這樣的內容麻不麻煩,不過用 jquery 方式不簡單,但輕車熟路。

2) 如何將 html 中的某些元素標顏色

有時候為了業務需要將某些 html 標簽改一下顏色,比如說將首頁的 tabmenu 中?博問?和?專區?改成紅色,如下圖:

111c29bb92977f14fa46526311990de8.png

那用 CSQuery 怎么處理呢?如果玩過 jquery,一般來說步驟如下:

  • 使用 each 遍歷每一個子 li 標簽

  • 使用 CSS 方法給 li 中 a 標簽賦樣式

  • 使用 Render 渲染生成一個新的的html

有了步驟,C#代碼如下:


????????static?void?Main(string[]?args)
????????{
????????????Config.HtmlEncoder?=?HtmlEncoders.None;

????????????var?jquery?=?CQ.CreateDocument(new?WebClient().DownloadString("http://cnblogs.com"));

????????????var?html?=?jquery["#nav_left?li"].Each(dom?=>
???????????????{
???????????????????var?self?=?jquery[dom];

???????????????????var?text?=?self.Text();

???????????????????if?(text?==?"博問"?||?text?==?"專區")
???????????????????{
???????????????????????self.Find("a").CssSet(new?{?color?=?"red"?});
???????????????????}
???????????????}).Render();
????????}
????????
88807e5fc3458711202a4743cc309f30.png

3) 其他的操作方法

除了上面兩個操作方法外,你還可以使用 after,before,replaceAll,IS 等等一百來個實用的方法,這篇肯定也無法一一介紹了,大家有興趣可以下載下來看一看,搗鼓搗鼓。

三:其他用途

除了抓取html中的元素,我覺得這玩意還可以用在發送郵件時操控郵件模板,畢竟在很久以前大家都是用jquery來繪制 html,所以用 CSQuery 也是可以的,相對使用 xslt 有利有弊吧,接下來做一個例子:

1. 生成一個html模板


html>

<html?lang="en"?xmlns="http://www.w3.org/1999/xhtml">
<head>
????<meta?charset="utf-8"?/>
????<title>title>
head>
<body>
????<ul?id="main">ul>
body>
html>

2. 使用 CSQuery 給 ul 追加 li

可以用 Append 將內容追加到??節點內。


????class?Program
????{
????????static?void?Main(string[]?args)
????????{
????????????Config.HtmlEncoder?=?HtmlEncoders.None;

????????????var?strlist?=?new?string[2]?{?"1",?"2"?};

????????????var?path?=?Environment.CurrentDirectory?+?"\\2.html";
????????????var?jquery?=?CQ.CreateFromFile(path);

????????????foreach?(var?str?in?strlist)
????????????{
????????????????jquery.Find("#main").Append($"{str}");
????????????}

????????????var?html?=?jquery.Render();
????????}
????}

a1ca5ef41f39373aef6519e310376d7e.png

3. 部分渲染 RenderSelection

Render方法是將整個Dom渲染成html,但有時候你只需要得到你修改的那部分內容,而不是整個html,這就涉及到了部分渲染,可以用?RenderSelection?方法即可,代碼如下:


????????static?void?Main(string[]?args)
????????{
????????????Config.HtmlEncoder?=?HtmlEncoders.None;

????????????var?strlist?=?new?string[2]?{?"1",?"2"?};

????????????var?path?=?Environment.CurrentDirectory?+?"\\2.html";
????????????var?jquery?=?CQ.CreateFromFile(path);

????????????var?current?=?jquery.Find("#main");

????????????foreach?(var?str?in?strlist)
????????????{
????????????????current.Append($"{str}");
????????????}

????????????var?html?=?current.RenderSelection();

????????????Console.WriteLine(html);
????????}

-------------?output?----------------

"main">12

四:總結

Jquery 這種操作模式對我個人來說還是比較舒服的,畢竟熟!不過在 html5 中也新增了 querySelector 和 querySelectorAll 支持 css3 選擇器,非常強大,可 jquery 不光在選擇器的靈活上,還在于對節點的靈活操作上,總的來說不是特別富交互的情況下可以懷舊一把。

38498256e1e7b601811983a40e3ae0d7.png

往期精彩回顧

【推薦】.NET Core開發實戰視頻課程?★★★

.NET Core實戰項目之CMS 第一章 入門篇-開篇及總體規劃

【.NET Core微服務實戰-統一身份認證】開篇及目錄索引

Redis基本使用及百億數據量中的使用技巧分享(附視頻地址及觀看指南)

.NET Core中的一個接口多種實現的依賴注入與動態選擇看這篇就夠了

10個小技巧助您寫出高性能的ASP.NET Core代碼

用abp vNext快速開發Quartz.NET定時任務管理界面

在ASP.NET Core中創建基于Quartz.NET托管服務輕松實現作業調度

現身說法:實際業務出發分析百億數據量下的多表查詢優化

關于C#異步編程你應該了解的幾點建議

C#異步編程看這篇就夠了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457368.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457368.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux下怎么編譯運行C語言程序?

linux下的C語言編譯器是gcc&#xff0c;C的編譯器是g。 linux下編程可以使用編輯器vi或vim&#xff0c;建議使用vim&#xff0c;因為它有語法高亮顯示。程序編寫好后&#xff0c;假設你的程序名為test.c&#xff0c;可以使用gcc -o test test.c。test就是編譯好的可執行程序./t…

undertow 怎么創建線程_為什么很多SpringBoot開發者放棄了Tomcat,選擇了Undertow

點擊上方“后端技術精選”&#xff0c;選擇“置頂公眾號”技術文章第一時間送達&#xff01;作者&#xff1a;阿邁達toutiao.com/a6775476659416990212/前言在SpringBoot框架中&#xff0c;我們使用最多的是Tomcat&#xff0c;這是SpringBoot默認的容器技術&#xff0c;而且是內…

一起玩轉CoordinatorLayout

作為Material Design風格的重要組件,CoordinatorLayout協調多種組件的聯動&#xff0c;實現各種復雜的效果&#xff0c;在實際項目中扮演著越來越重要的角色。本篇博客將由淺到深&#xff0c;帶你一起玩轉CoordinatorLayout。 官方文檔對CoordinatorLayout是這樣描述的&#xf…

離散數學圖論旅行規劃問題_2020年MathorCup高校數學建模挑戰賽——C 題 倉內揀貨優化問題...

下面的鏈接是精華版思路&#xff0c;亮點是對第六問的探討。高度概括一下&#xff1a;第一問曼哈頓&#xff0c;第二問用免疫&#xff0c;三問增加任務單&#xff0c;四問增加揀貨員&#xff0c;五問改變復核臺&#xff0c;六問亮點來探討~ 有點皮MathorCup C題 倉內揀貨優化問…

Asp.NetWebForm的控件屬性

一&#xff1a;GridView&#xff1a; 1.綁定ID 的值&#xff1a;DataKeyNames"Id", 2.自動產生列的意思:AutoGenerateColumns 3.如何注冊腳本&#xff1a;ClientScript.RegisterStartupScript(this.GetType(),"text","alert(刪除成功)"&#xf…

【VBA編程】10.自定義集合

自定義集合類型&#xff0c;類似于變量聲明&#xff0c;只是要將Dim關鍵字和New collection關鍵字搭配起來使用&#xff0c;其語法描述如下&#xff1a;其中集合名的命名方式同于標準變量的命名 Dim 集合名 As New collection 對于已經定義的集合對象&#xff0c;可以使用集合的…

git fork clone 區別_Working with Git | Git 與 GitHub

關于各位好&#xff0c;這里是 Chinas Prices Project 項目的知乎專欄。關于 CPP 項目&#xff0c;您可以在這篇文章里了解到更多的信息。若您對這個項目感興趣&#xff0c;我們非常歡迎您與我們交流您的想法與見解。在一個團隊的成員同時為一個項目進行開發工作時&#xff0c;…

舒適的路線(codevs 1001)

題目描述 DescriptionZ小鎮是一個景色宜人的地方&#xff0c;吸引來自各地的觀光客來此旅游觀光。Z小鎮附近共有N(1<N≤500)個景點&#xff08;編號為1,2,3,…,N&#xff09;&#xff0c;這些景點被M&#xff08;0<M≤5000&#xff09;條道路連接著&#xff0c;所有道路都…

PHP_Smarty

模板 數據與表現層的標簽分離 smarty是PHP 與 HTML代碼的分離 小型模板類 $smarty 的工作流程&#xff1a; 把需要顯示的全局變量&#xff0c;賦值塞到對象內部的屬性上&#xff0c;一個數組中.編譯模板&#xff0c;把{$標簽},解析成相應的<?php echo 代碼引入編譯后的PHP文…

讀中文_挑戰來了!康輝喊你讀中文十級繞口令!

文章來源&#xff1a;央視頻漢語橋木甬讀桶不讀涌&#xff0c;月農讀膿不讀朧。米更讀粳不讀梗&#xff0c;日青讀晴不讀睛。米宗讀粽不讀綜&#xff0c;言丁讀訂不讀釘。土竟讀境不是鏡&#xff0c;土平讀坪不是評。耳令讀聆不讀嶺&#xff0c;火登讀燈不讀澄。言甬讀誦不讀蛹…

ios 自定義鍵盤

由于項目需要&#xff0c;需要自定義鍵盤。ios系統鍵盤會緩存鍵盤輸入&#xff0c;并保存在系統目錄下的文件里&#xff0c;并且是明文存儲&#xff0c;存在帳號密碼泄漏風險。在別人代碼基礎上修改了下&#xff0c;美化了下界面&#xff0c;去掉了字符輸入&#xff0c;加了點擊…

對象入參指定泛型類型_為什么要使用泛型,而不是直接將類型作為參數傳遞?

其實很多類型系統都是用類型參數的的形式來實現Universal Type的&#xff0c;Parametric Polymorphism 和System F可以了解一下&#xff0c;如果只局限于一兩個熱門語言的話&#xff0c;可能會有此疑問&#xff0c;但是從type theory的角度來說&#xff0c;高階類型本身就是typ…

【GOF23設計模式】迭代器模式

【GOF23設計模式】迭代器模式 來源&#xff1a;http://www.bjsxt.com/ 一、【GOF23設計模式】_迭代器模式、JDK內置迭代器、內部類迭代器 1 package com.test.iterator;2 /**3 * 自定義的迭代器接口4 */5 public interface MyIterator {6 void first(); //將游標指向第…

SQLServer 維護腳本分享(08)臨時數據庫(tempdb)

dbcc sqlperf(logspace) --各數據庫日志大小及使用百分比dbcc loginfo --查看當前數據庫的虛擬日志文件--臨時表Tempdb最近使用情況 SELECT t1.session_id ,t1.internal_objects_alloc_page_count*8.0/1024 as internal_objects_alloc_MB ,t1.internal_objects_dealloc_p…

51單片機50個實例代碼_【附代碼】51單片機電子密碼鎖教程

簡介大家好&#xff0c;這篇文章的內容是關于如何用51單片機來制作一個電子密碼鎖的教程&#xff0c;通過這篇教程可以讓剛入門的朋友了解矩陣鍵盤、LCD1602的使用方法&#xff0c;以及密碼輸入和修改的程序介紹&#xff0c;我會對每個部分進行詳細的介紹。首先我們來看一下這個…

旋轉的正方體

<!DOCTYPE html><html lang"zh-cmn-Hans"><head><meta charset"utf-8" /><title>backface-visibility_CSS參考手冊_web前端開發參考手冊系列</title><meta name"author" content"Joy Du(飄零霧雨),…

8數據提供什么掩膜產品_博碩能為你提供什么產品?

自動噴漆設備應用于線條、木門、櫥柜、樓梯、套房家具、辦公家具、木飾面板、外墻保溫裝飾一體板板等產品領域&#xff0c;針對NC、PU、UV、水性漆和氟碳漆等不同種類的油漆&#xff0c;進行自動化噴涂和干燥作業。自動噴漆設備有多種規格型號&#xff0c;分為不同的噴涂方式。…

python3 實現對比conf 文件差異

用法&#xff1a; ./conf.py nginx1.conf nginx2.conf > diff.htmlconf.py#!/usr/bin/python import difflib import sys #### Usage: compare_nginx.conf.py filename1 filename2 >diff.html try:textfile1 sys.argv[1]textfile2 sys.argv[2] except Exception as…

mysql----innodb統計信息

對innodb 統計信息的控制可以通過如下幾個常用的variables 來實現 1、innodb_stats_persistent&#xff1a; 這個參數控制著innodb的統計信息是否持久化到磁盤&#xff0c;先說明一下持久化到磁盤是什么意思&#xff1b;通常來說統計信息只保存在內存中&#xff0c;也就是說如果…

linux pid t 頭文件_linux系統調用相關頭文件

Linux C 一些函數 所屬的頭文件 2011-03-07 10:25:07分類&#xff1a; LINUX在編寫程序時&#xff0c;有時總是不記得所使用的函數在哪個庫函數中。現在先把自己以前經常用到的函數頭文件總結一下。 有不對的地方還請指教。1&#xff0c;系統調用 文件的操作函數#inlclude &…