精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用IronPython做更靈活的網頁爬蟲

開發 后端
對于哪些經常要在網站上采集信息的人來說,有一個靈活的網頁爬蟲是非常必要的,本篇文章將介紹如何用IronPython在.NET中做一個更靈活的網頁爬蟲。

  我們經常需要去別的網站采集一些信息,.NET下所有相關的技術都已經非常成熟,用Webrequest抓取頁面,雖然支持自定義Reference頭,又支持cookie,解析頁面一般都是用正則,但是對方網站結構一變,還得重新改代碼,重新編譯,發布。有了IronPython,可以把抓取和分析的邏輯做成Python腳本,如果對方頁面結構變了,只需修改腳本就行了,不需重新編譯軟件,這樣可以用c#做交互和界面部分,用Python封裝預期經常變化的部分。

如何利用IronPython把抓取和分析的邏輯做成Python腳本
  安裝好IronPython和vs.net 2010后,還需要下載一個SGMLReader(見參考鏈接),這個組件可以把格式不是很嚴格的HTML轉換成格式良好的XML文件,甚至還能增加DTD的驗證  
  我們以抓取百度貼吧頁面為例,新建一個Console項目,引用IronPython,Microsoft.Dynamic,Microsoft.Scripting,SgmlReaderDll這些組件,把SGMLReader里的Html.dtd復制到項目目錄下,如果沒有這個,它會根據doctype去網絡上找dtd,然后新建baidu.py的文件,最后在項目屬性的生成事件里寫上如下代碼,把這兩個文件拷貝到目標目錄里。

  1. copy $(ProjectDir)\*.py $(TargetDir)  
  2. copy $(ProjectDir)\*.dtd $(TargetDir) 

  在baidu.py里首先引用必要的.net程序集。
  1. import clr, sys  
  2. clr.AddReference("SgmlReaderDll")  
  3. clr.AddReference("System.Xml")  

  完了導入我們需要的類
  1. from Sgml import *  
  2. from System.Net import *  
  3. from System.IO import TextReader,StreamReader  
  4. from System.Xml import *  
  5. from System.Text.UnicodeEncoding import UTF8  

  利用SgmlReader寫一個把html轉換成xml的函數,注意SystemLiteral屬性必須設置,否則就會去網上找dtd了,浪費時間
  1. def fromHtml(textReader):      
  2. sgmlReader = SgmlReader()      
  3. sgmlReader.SystemLiteral = "html.dtd"    sgmlReader.WhitespaceHandling =WhitespaceHandling.All      
  4. sgmlReader.CaseFolding = CaseFolding.ToLower    sgmlReader.InputStream = textReader          
  5.  
  6.  
  7. doc = XmlDocument()      
  8. doc.PreserveWhitespace = True      
  9. doc.XmlResolver = None      
  10. doc.Load(sgmlReader)      
  11. eturn doc  

  利用webrequest寫一個支持cookie和網頁編碼的抓網頁方法
  1. def getWebData(url, method, data = None, cookie = None, encoding = "UTF-8"):      
  2.    req = WebRequest.Create(url)      
  3.    req.Method = method          
  4.    if cookie != None:          
  5.       req.CookieContainer = cookie          
  6.    if data != None:          
  7.       stream = req.GetRequestStream()          
  8.       stream.Write(data, 0, data.Length)              
  9.    rsp = req.GetResponse()      
  10.    reader = StreamReader(rsp.GetResponseStre(),            
  11.    UTF8.GetEncoding(encoding))            
  12.    return reader  

  寫一個類來定義抓取結果,這個類不需要在c#項目里定義,到時候直接用c# 4.0的dynamic關鍵字就可以使用
  1. class Post:  
  2.     def __init__(self, hit, comments, title, link, author):  
  3.         self.hit = hit  
  4.         self.comments = comments   
  5.         self.title = title  
  6.         self.link = link  
  7.         self.author = author  

  定義主要工作的類,__init__大概相當于構造函數,我們傳入編碼參數,并初始化cookie容器和解析結果,[]是python里的列表,大約相當于c#的List
  1. class BaiDu:  
  2.     def __init__(self,encoding):  
  3.         self.cc = self.cc = CookieContainer()  
  4.              self.encoding = encoding 
  5.             self.posts = []     

  接下來定義抓取方法,調用getWebData抓網頁,然后用fromHtml轉換成xml,剩下的就是xml操作,和.net里一樣,一看便知
  1. def getPosts(self, url):  
  2.         reader = getWebData(url, "GET", None, self.cc, self.encoding)  
  3.         doc = fromHtml(reader)  
  4.         trs = doc.SelectNodes("html//table[@id='thread_list_table']/tbody/tr")       
  5.         self.parsePosts(trs)  
  6.  
  7. def parsePosts(self, trs):  
  8.         for tr in trs:  
  9.             tds = tr.SelectNodes("td")  
  10.             hit = tds[0].InnerText  
  11.             comments = tds[1].InnerText  
  12.             title = tds[2].ChildNodes[1].InnerText  
  13.             link = tds[2].ChildNodes[1].Attributes["href"]   
  14.             author = tds[3].InnerText  
  15.  
  16.             post = Post(hit, comments, title, link, author)  
  17.             self.posts.append(post)  

  c#代碼要創建一個腳本運行環境,設置允許調試,然后執行baidu.py,最后創建一個Baidu的類的實例,并用dynamic關鍵字引用這個實例
  1. Dictionary<stringobject> options = new Dictionary<stringobject>();      
  2.   options["Debug"] = true;            
  3.   ScriptEngine engine = Python.CreateEngine(options);            
  4.   ScriptScope scope = engine.ExecuteFile("baidu.py");            
  5.   dynamic baidu = engine.Operations.Invoke(scope.GetVariable("BaiDu"), "GBK");  

  接下來調用BaiDu這個python類的方法獲取網頁抓取結果,然后輸出就可以了
  1. baidu.getPosts("http://tieba.baidu.com/f?kw=seo");             
  2.    dynamic posts = baidu.posts;          
  3.    foreach (dynamic post in posts)            
  4.  {                   
  5.      Console.WriteLine("{0} (回復數:{1})(點擊數:{2})[作者:{3}]",                      
  6.      post.title,                  
  7.  post.comments,                     
  8.   post.hit,                   
  9.  post.author);           
  10.  }  
參考鏈接:

 【編輯推薦】

  1. 高性能ASP.NET站點構建之細節決定成敗
  2. Mono 2010 跨平臺的.NET運行環境發布了
  3. ASP.NET MVC 3 新特性全解析
  4. 手把手教你實現.NET程序打包
責任編輯:佚名 來源: 博客園
相關推薦

2011-02-23 09:48:00

Python.NET

2009-05-18 09:12:00

ASON自動交換光網絡

2023-06-06 19:24:06

KubernetesSpark

2009-06-03 09:08:20

ScalaJava類型

2020-09-14 09:33:02

網絡

2015-05-04 14:12:43

2017-07-18 06:08:41

2023-11-27 08:21:49

Camera2API,

2017-02-14 15:37:32

KappaLambda

2025-02-18 00:10:00

2015-10-10 10:01:39

VMware數據中心

2023-12-05 10:25:24

Python類型注解

2024-11-21 15:48:40

2020-10-28 15:17:08

Go服務超時net

2009-08-04 15:55:56

OracleEPMBI

2017-08-09 15:27:33

python爬蟲開發工具

2009-10-15 09:32:39

什么是IronPythPython.NET

2025-05-08 08:10:00

Python函數調用代碼

2020-11-11 10:58:59

Scrapy
點贊
收藏

51CTO技術棧公眾號

黑鬼狂亚洲人videos| 男女无套免费视频网站动漫| 亚洲xxx在线| 亚洲精品专区| 中文字幕精品一区二区精品| 一级 黄 色 片一| av人人综合网| 国产人成一区二区三区影院| 亚洲综合自拍一区| 黄色在线观看国产| 精品一区不卡| 精品国产露脸精彩对白| av免费在线播放网站| 生活片a∨在线观看| 不卡视频在线观看| 国产免费亚洲高清| 可以免费看的av毛片| 999国产精品999久久久久久| 亚洲成人久久久久| 成人性生交免费看| 精品丝袜在线| 亚洲欧美综合在线精品| 精品国产电影| 精品国产一级片| 久久男女视频| 久久久噜久噜久久综合| 青青操在线播放| 人人网欧美视频| 日韩欧美一级片| www.日本xxxx| 欧美aa在线观看| 一区二区三区欧美| 亚洲一区二区三区乱码| 日本午夜在线视频| 成人综合婷婷国产精品久久免费| 国产精品一区二区性色av| 日本在线小视频| 一区二区日韩欧美| 深夜福利一区二区| 亚洲成人日韩在线| 大陆精大陆国产国语精品| 欧美精选一区二区| 亚洲欧美国产日韩综合| 成人午夜精品| 色婷婷精品大视频在线蜜桃视频 | 国内精品久久久久久99蜜桃| 精品sm捆绑视频| 日本特黄在线观看| 亚洲18在线| 欧美三级乱人伦电影| 国产精品99久久免费黑人人妻| www欧美xxxx| 亚洲一区二区三区影院| 成年在线观看视频| 欧美寡妇性猛交xxx免费| 亚洲另类中文字| 黄瓜视频免费观看在线观看www| 超碰免费97在线观看| 国产视频一区在线播放| 日韩免费av电影| 国产资源在线观看| 欧美激情自拍偷拍| 亚洲一区二区三区免费观看| 日本精品一区二区三区在线播放| 国产精品视频你懂的| 亚洲一区在线直播| 国产三级在线播放| 一区二区三区在线观看动漫| 欧美这里只有精品| av岛国在线| 欧美色视频日本版| 99免费视频观看| 六九午夜精品视频| 91精品国产品国语在线不卡| 成年人看片网站| 国产精品毛片视频| 亚洲欧美日韩精品久久| 免费看黄色三级| 99久久夜色精品国产亚洲96| 欧美激情综合色| 成人毛片18女人毛片| 日日夜夜免费精品| 成人网中文字幕| 亚洲AV无码乱码国产精品牛牛| 成人中文字幕电影| 欧美性天天影院| 午夜精品一区| 亚洲一区二区偷拍精品| 一本大道熟女人妻中文字幕在线 | 欧美午夜精品久久久久久久| 激情婷婷综合网| 综合久草视频| 日韩精品免费在线视频观看| 殴美一级黄色片| 伊人成人在线视频| 国产欧美一区二区| 免费观看国产精品| 国产欧美日韩综合精品一区二区| 四虎4hu永久免费入口| 色吧亚洲日本| 91精品在线麻豆| 亚洲制服丝袜在线播放| 99久久99久久精品国产片果冰| 欧美肥老妇视频| 亚洲永久精品一区| 国产aⅴ综合色| 日产精品一线二线三线芒果| 丁香花视频在线观看| 色94色欧美sute亚洲线路一ni | 欧洲午夜精品| 亚洲精品美女久久久| 26uuu成人网| 日韩专区一卡二卡| 好吊色欧美一区二区三区四区| 免费在线观看黄| 一本久久a久久精品亚洲| 色哟哟在线观看视频| 免费欧美视频| 国模视频一区二区三区| 国产乱人乱偷精品视频| 国产区在线观看成人精品| 国产真人做爰毛片视频直播| 国产一区二区视频在线看| 亚洲视频免费一区| 日韩三级小视频| 国产在线播精品第三| 色乱码一区二区三在线看| 成年人在线网站| 精品国产a毛片| 99热精品免费| 久久91精品久久久久久秒播| 日韩av电影免费播放| 手机在线观看av网站| 亚洲成年网站在线观看| 欧美三级小视频| 久久精品国产免费| 日日噜噜噜噜夜夜爽亚洲精品| 成人爽a毛片免费啪啪| 亚洲第一av在线| 精品少妇久久久| 国产一区二区三区在线观看免费视频| 亚洲毛片aa| 成人在线视频观看| 在线精品国产欧美| 波多野结衣视频观看| 久久久www成人免费无遮挡大片| 69堂免费视频| 日韩精品免费一区二区夜夜嗨| 午夜精品一区二区三区在线视 | 日韩精品一区二区三区国语自制| 国产成人免费网站| av在线免费观看国产| 北条麻妃一区二区三区在线| 久久久久久久久国产精品| 亚洲成a人片在线| 午夜精品一区二区三区免费视频 | 午夜精品aaa| 欧美午夜精品一区二区| 亚洲精品一区二区妖精| 91深夜福利视频| 中文字幕中文字幕在线十八区| 欧美另类z0zxhd电影| 羞羞在线观看视频| 国产在线视视频有精品| 中文字幕の友人北条麻妃| 欧美视频二区欧美影视| 色综合色综合久久综合频道88| www.蜜臀av| 亚洲影院免费观看| 无码人妻精品一区二区三| 国产精品亚洲欧美| 久久影视中文粉嫩av| 婷婷综合六月| 中文字幕亚洲情99在线| av网站免费大全| 亚洲二区在线观看| aaaaaav| 日本视频免费一区| 国产手机视频在线观看| 粉嫩一区二区三区四区公司1| 欧美亚州一区二区三区| 久青草国产在线| 欧美精品在线视频| 精品午夜福利视频| 国产午夜亚洲精品午夜鲁丝片 | 美女写真久久影院| 日韩中文字幕在线看| 亚洲精品一区二区口爆| 一本一道综合狠狠老| 九九这里只有精品视频| 成人高清av在线| www欧美激情| 午夜日韩av| 免费久久99精品国产自| av在线播放一区二区| 91国产精品电影| 欧美r级在线| 日韩精品在线观| 国产巨乳在线观看| 色婷婷综合五月| 国产在线视频二区| 国产精品毛片大码女人| 天堂www中文在线资源| 美女视频一区二区| 男人天堂999| 激情91久久| 一区二区视频在线观看| 色愁久久久久久| 亚洲综合在线中文字幕| 欧美日韩五区| 欧美一性一乱一交一视频| 91中文在线| 一区二区三区无码高清视频| 理论片中文字幕| 制服.丝袜.亚洲.另类.中文| 日日噜噜噜噜人人爽亚洲精品| 中文字幕一区二| 成人性生交大免费看| 成人免费高清视频在线观看| 日本免费色视频| 日韩高清不卡一区| 波多野结衣50连登视频| 国模大胆一区二区三区| 国产日韩第一页| 日韩国产一区二区| 欧美日韩亚洲一区二区三区在线观看| 凹凸av导航大全精品| 91在线观看免费| 99视频这里有精品| 成人久久久久久| 成人av色网站| 国产精品pans私拍| 伊人久久国产| 2019亚洲男人天堂| 国产传媒在线观看| 久久久午夜视频| gratisvideos另类灌满| 欧美激情在线观看视频| 羞羞视频在线观看免费| 毛片精品免费在线观看| 成人日批视频| 欧美尺度大的性做爰视频| 国产视频在线播放| 美日韩精品免费视频| 二区在线播放| 美女撒尿一区二区三区| 成人在线播放| 不卡伊人av在线播放| 很黄的网站在线观看| 日韩网站在线观看| 麻豆视频在线免费观看| 另类少妇人与禽zozz0性伦| 黄色片网站在线| 欧美成人三级视频网站| 国产在线xxx| 国内精品久久久| 日韩激情电影| 国产精品99久久99久久久二8| 国产超碰精品| 91精品国产自产在线| 国产精一区二区| 岛国一区二区三区高清视频| 粉嫩精品导航导航| 欧美亚洲一级二级| 日韩国产一区| 永久免费看av| 日韩视频不卡| caoporn超碰97| 国内欧美视频一区二区| 久草免费资源站| av午夜一区麻豆| 亚洲一区二区三区日韩| 亚洲日本在线看| 日韩欧美a级片| 日本精品一区二区三区高清| 国产精品伦一区二区三区| 日韩精品一区二区三区中文精品| 日本精品久久久久| 亚洲一区999| 69xxx在线| 91国内免费在线视频| jvid一区二区三区| 91久久精品www人人做人人爽| 激情小说亚洲色图| 亚洲高清精品中出| 欧美日韩亚洲一区三区| 欧美色图另类小说| 久久成人久久鬼色| 熟女人妻在线视频| 国产精品久久免费看| 日本少妇xxxx动漫| 欧美色倩网站大全免费| 亚洲精品一区二区三区新线路| 亚洲欧美日韩一区二区在线| 91福利国产在线观看菠萝蜜| 日本一区二区三区四区视频| 久久久久亚洲精品中文字幕| 蜜桃精品久久久久久久免费影院 | 国产www在线| 欧美一区二区三区日韩视频| 能在线看的av| 久久91精品国产91久久久| 美脚恋feet久草欧美| 成人欧美一区二区三区黑人免费| 性欧美lx╳lx╳| 宅男av一区二区三区| 久久精品一区二区国产| 精品伦一区二区三区| 中文字幕永久在线不卡| 亚洲免费在线观看av| 欧美va亚洲va| 午夜在线视频| 欧美在线视频观看| av不卡一区二区| 精品国产无码在线| 青青草原综合久久大伊人精品优势| 美女黄色一级视频| 亚洲天堂网中文字| 一区二区三区在线免费观看视频| 日韩精品视频在线播放| 国产三线在线| 成人激情视频小说免费下载| 精品少妇av| 国产肥臀一区二区福利视频| 丁香六月综合激情| 国产日韩欧美在线观看视频| 欧美日韩一区二区在线观看| 国际av在线| 日本午夜精品理论片a级appf发布| 麻豆精品av| 婷婷无套内射影院| 国产a级毛片一区| 激情视频在线播放| 日韩区在线观看| av免费在线免费| 91人人爽人人爽人人精88v| 久久麻豆精品| 国产精品久久久毛片| 国产午夜精品一区二区三区四区| 你懂的国产在线| 亚洲欧美国产另类| 原纱央莉成人av片| 欧美日韩一区在线视频| 99视频在线精品国自产拍免费观看| 香港三日本8a三级少妇三级99 | 中文字字幕在线中文| 日韩电影中文字幕av| 色偷偷偷在线视频播放| 国内精品二区| 国产精品入口66mio| 日本少妇色视频| 色嗨嗨av一区二区三区| 国产乱视频在线观看| 国产精品你懂得| 色小子综合网| 女王人厕视频2ⅴk| 亚洲精品久久7777| 亚洲黄色在线观看视频| 性色av一区二区三区红粉影视| 天天久久夜夜| 日韩精品一区中文字幕| 国产精品麻豆99久久久久久| 国产精品亚洲欧美在线播放| 欧美成人全部免费| 精品欠久久久中文字幕加勒比| 欧美三级一级片| 久久久高清一区二区三区| 亚洲永久精品视频| 九九视频直播综合网| 狼人精品一区二区三区在线 | 色姑娘综合网| 韩国av一区二区三区| 久久久久99精品成人片毛片| 亚洲国产天堂网精品网站| 亚洲性色av| 中日韩在线视频| 成人在线一区二区三区| 精品视频一二三区| 久久久精品国产亚洲| 国产欧美啪啪| 依人在线免费视频| 亚洲成av人片一区二区梦乃| 国产乱子伦三级在线播放 | 欧美挤奶吃奶水xxxxx| 国产精品入口免费软件| 亚洲视频免费看| 无码精品人妻一区二区三区影院| 国产成人一区二区在线| 中文字幕一区二区av| 日本黄色网址大全| 在线成人av网站| a级片在线免费观看| 一本一道久久a久久精品综合| 福利一区二区在线观看| 五月激情丁香网| 久久人人爽人人| 91精品秘密在线观看| 人妻熟女aⅴ一区二区三区汇编| 欧美理论片在线| 吉吉日韩欧美|