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

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

開發 后端
如果有了IronPython,可以把抓取和分析的邏輯做成Python腳本,如果對方頁面結構變了,只需修改腳本就行了,不需重新編譯軟件,這樣可以用c#做交互和界面部分,用Python封裝預期經常變化的部分。

由于各種原因,我們經常需要去別的網站采集一些信息,.net下所有相關的技術都已經非常成熟,用Webrequest抓取頁面,既支持自定義Reference頭,又支持cookie,解析頁面一般都是用正則,而且對方網站結構一變,還得重新改代碼,重新編譯,發布。

如果有了IronPython,可以把抓取和分析的邏輯做成Python腳本,如果對方頁面結構變了,只需修改腳本就行了,不需重新編譯軟件,這樣可以用c#做交互和界面部分,用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" 
  4.     sgmlReader.WhitespaceHandling = WhitespaceHandling.All  
  5.     sgmlReader.CaseFolding = CaseFolding.ToLower  
  6.     sgmlReader.InputStream = textReader  
  7.       
  8.     doc = XmlDocument()  
  9.     doc.PreserveWhitespace = True 
  10.     doc.XmlResolver = None 
  11.     doc.Load(sgmlReader)  
  12.     return doc 

利用webrequest寫一個支持cookie和網頁編碼的抓網頁方法

  1. def getWebData
  2. (url, method, data = None, cookie = None, encoding = "UTF-8"):  
  3.     req = WebRequest.Create(url)  
  4.     req.Method = method  
  5.       
  6.     if cookie != None:  
  7.         req.CookieContainer = cookie  
  8.       
  9.     if data != None:  
  10.         stream = req.GetRequestStream()  
  11.         stream.Write(data, 0, data.Length)  
  12.           
  13.     rsp = req.GetResponse()  
  14.     reader = StreamReader
  15. (rsp.GetResponseStream(), UTF8.GetEncoding(encoding))  
  16.     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
  3. (url, "GET"Noneself.cc, self.encoding)  
  4.         doc = fromHtml(reader)  
  5.           
  6.         trs = doc.SelectNodes
  7. ("html//table[@id='thread_list_table']/tbody/tr")  
  8.         self.parsePosts(trs)  
  9.       
  10.     def parsePosts(self, trs):  
  11.         for tr in trs:              
  12.             tds = tr.SelectNodes("td")  
  13.             hit = tds[0].InnerText  
  14.             comments = tds[1].InnerText  
  15.             title = tds[2].ChildNodes[1].InnerText  
  16.             link = tds[2].ChildNodes[1].Attributes["href"]  
  17.             author = tds[3].InnerText  
  18.               
  19.             post = Post(hit, comments, title, link, author)  
  20.             self.posts.append(post) 

c#代碼要創建一個腳本運行環境,設置允許調試,然后執行baidu.py,***創建一個Baidu的類的實例,并用dynamic關鍵字引用這個實例

  1. Dictionary options = new Dictionary();  
  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}   
  6. (回復數:{1})(點擊數:{2})[作者:{3}]",  
  7.                     post.title,  
  8.                     post.comments,  
  9.                     post.hit,  
  10.                     post.author);  
  11.             } 

原文鏈接:http://www.cnblogs.com/onlytiancai/archive/2011/02/22/1960859.html

【編輯推薦】

  1. Python 3.2發布 改進調試器PDB
  2. 淺談Python Web的五大框架
  3. 一個Python程序員的進化
  4. 年度黑馬Python 自省指南
  5. 學習python處理python編碼
責任編輯:陳貽新 來源: 胡浩的博客
相關推薦

2011-02-22 10:00:38

.NETc#IronPython

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函數調用代碼

2013-12-20 17:38:37

華為統一通信鐵路
點贊
收藏

51CTO技術棧公眾號

性久久久久久久| 免费人成精品欧美精品| 亚洲激情成人网| 婷婷六月天在线| av软件在线观看| 不卡的av电影在线观看| 国产精品大陆在线观看| 国产一级视频在线观看| 欧美少妇xxxx| 亚洲丁香婷深爱综合| 国产xxxxx视频| 亚洲精品天堂| 欧美国产精品一区| 国产精品三区四区| 一卡二卡在线观看| 性娇小13――14欧美| 欧美精品一区二区免费| 国产中年熟女高潮大集合| 欧美久久一区二区三区| 在线精品视频一区二区三四| 免费人成自慰网站| 日本激情视频在线观看| 久久女同精品一区二区| 国产色综合一区二区三区| 91麻豆国产在线| 久久xxxx精品视频| 久久久久国产精品一区| 翔田千里亚洲一二三区| 亚洲av无码乱码在线观看性色| 日本亚洲免费观看| 2021国产精品视频| 国产亚洲第一页| 999成人精品视频线3| 亚洲人av在线影院| 在线免费播放av| 中文字幕一区二区三区四区久久 | 三级成人黄色影院| 亚洲在线免费播放| 无码人妻精品一区二区三区99v| 国产最新视频在线| 91女神在线视频| 国产专区一区二区| 黑人乱码一区二区三区av| 精久久久久久久久久久| 国产欧美日韩中文| 亚洲网站在线免费观看| 日本不卡的三区四区五区| 日本久久久久久久| 国产一级片免费在线观看| 亚洲欧美高清| 日本精品视频在线观看| 永久免费无码av网站在线观看| 日韩一区二区久久| 91av成人在线| 中文人妻av久久人妻18| 亚洲一区日本| 国产成人高潮免费观看精品| 老熟妇一区二区三区| 久久欧美肥婆一二区| 国产成人av在线播放| 国产污视频网站| 蜜臀av一区二区| 成人写真福利网| 国产黄色高清视频| 国产成人免费视频网站高清观看视频 | 精彩视频一区二区三区| 91久久久久久久久久久久久| 国产v片在线观看| 福利视频网站一区二区三区| 国产在线一区二区三区四区 | 亚洲超碰在线观看| 亚洲成人国产精品| 97人妻精品一区二区免费| 精品久久91| 久久深夜福利免费观看| 激情五月婷婷在线| 国产一区二区三区久久久久久久久 | 黄色a级片在线观看| 国精品一区二区| 欧美最猛性xxxxx(亚洲精品)| 黄色av一区二区| 国产美女精品一区二区三区| 国产高清自拍一区| 国产精品久久久久一区二区国产| 中文字幕一区二区三区av| 国产尤物av一区二区三区| 中文字幕乱码中文乱码51精品| 欧美性色综合网| aaaaa黄色片| 九九免费精品视频在线观看| 久久手机精品视频| 久久久久久久久久久影院| 久久国产婷婷国产香蕉| 国产精品污www一区二区三区| 三级视频在线| 亚洲色图欧美在线| 欧美日韩中文在线视频| 四虎地址8848精品| 亚洲精品国产综合久久| 国产三级精品三级观看| 亚洲福利专区| 国产区精品在线观看| 天天操天天干天天爽| 国产精品人妖ts系列视频| 精品人妻大屁股白浆无码| 澳门成人av网| 欧美xxxx老人做受| 山东少妇露脸刺激对白在线| 亚洲国产专区| 国产日韩欧美中文在线播放| 亚洲 另类 春色 国产| 国产精品护士白丝一区av| 国产二级片在线观看| 天堂久久一区| 一区二区三区四区精品| 日产亚洲一区二区三区| 国产一区二区三区国产| 色播亚洲婷婷| 伊人久久精品一区二区三区| 欧美va在线播放| 性生交大片免费全黄| 日韩中文字幕1| 精品国产一区二区三区麻豆小说| av毛片在线免费看| 欧美乱熟臀69xxxxxx| 久久久无码人妻精品一区| 亚洲国产午夜| 国产精品视频入口| 国产丝袜精品丝袜| 日韩三级av在线播放| 国产91在线播放九色| 日韩高清电影一区| 欧美连裤袜在线视频| freexxx性亚洲精品| 日韩一区二区三区视频| 国产色无码精品视频国产| 免费成人性网站| 亚洲精品一区二区三区四区五区| 澳门成人av网| 亚洲性生活视频| 波多野结衣不卡| 久久精品亚洲乱码伦伦中文| 亚洲欧洲日产国码无码久久99| 精品视频在线你懂得| 国内精品400部情侣激情| 午夜精品久久久久久久99老熟妇| 亚洲欧美日韩一区二区| 成年人网站av| 欧美一区二区三区久久精品茉莉花| 成人精品视频99在线观看免费 | 精品日韩久久久| 欧美呦呦网站| 国产色视频一区| 国产福利视频在线| 91精品国产一区二区三区香蕉| 国产suv精品一区二区68| 国内一区二区视频| 成人国产一区二区三区| 国产精品巨作av| 69av视频在线播放| 久青草国产在线| 欧美探花视频资源| 欧美日韩黄色网| 国产成人8x视频一区二区| 国产女主播自拍| 色婷婷av一区二区三区丝袜美腿| 热久久免费国产视频| 成年人视频免费在线观看| 欧美日韩亚洲综合| 美女的奶胸大爽爽大片| 99久久99久久免费精品蜜臀| 国产偷人视频免费| 97人人精品| 国产二区一区| 美女福利一区二区三区| 久久精品国产成人精品| 可以免费看毛片的网站| 色嗨嗨av一区二区三区| 天天做夜夜爱爱爱| 99久久精品免费看国产免费软件| 免费日韩视频在线观看| 99久久久久国产精品| 国产高清自拍一区| 欧美与亚洲与日本直播| 草民午夜欧美限制a级福利片| 日本xxxxxwwwww| 欧美伊人久久大香线蕉综合69| 国产精品久久久久久久精| 91视视频在线直接观看在线看网页在线看| 久草青青在线观看| 婷婷综合亚洲| 欧日韩一区二区三区| 国产美女视频一区二区| 欧美在线免费视频| 久草中文在线观看| 国产丝袜一区二区| 精品国产无码AV| 在线精品国精品国产尤物884a| 私库av在线播放| 欧美激情一区二区在线| 91传媒理伦片在线观看| 久久精品国产亚洲a| 欧美综合在线播放| 亚洲自拍偷拍网| 亚洲不卡一卡2卡三卡4卡5卡精品| 午夜不卡一区| 日韩av片永久免费网站| 韩国成人免费视频| 爱福利视频一区| 免费毛片在线| 精品国免费一区二区三区| 九九热最新视频| 精品久久久一区| 免费中文字幕在线观看| 国产精品麻豆欧美日韩ww| 久久精品老司机| 99久久婷婷国产综合精品| 制服下的诱惑暮生| 韩国精品在线观看 | 国产91丝袜在线播放0| 69久久久久久| 日韩中文字幕区一区有砖一区| 国产精品裸体瑜伽视频| 欧美日本一区| 男女爱爱视频网站| 色天天综合网| 亚洲高清乱码| 欧美精选一区二区三区| 欧美中日韩一区二区三区| 少妇一区二区三区| 国产欧美日韩一区| 成功精品影院| 成人在线资源网址| 凹凸成人在线| 操人视频欧美| 成人h动漫精品一区二区器材| 成人免费网站在线观看| 欧美videos粗暴| 国产精品你懂得| www.一区| 国产一区二区在线播放| 久久精品97| 成人高h视频在线| 日本在线一区二区| 91手机视频在线观看| 亚洲高清影院| 444亚洲人体| 日韩影片在线观看| 国产日韩欧美一区二区三区四区| 国产精品一区二区三区美女| 成人资源av| 久久综合社区| 欧美日韩一区二区视频在线观看| 久久不见久久见中文字幕免费| 欧美久久久久久| 日韩一区欧美| 精品91一区二区三区| 午夜性色一区二区三区免费视频| 成人av在线播放观看| 亚洲激情欧美| 成年人视频在线免费| 欧美aⅴ一区二区三区视频| 日本中文字幕观看| 国产成人在线视频网址| 69亚洲乱人伦| 国产欧美日韩精品一区| 777777国产7777777| 亚洲午夜久久久久久久久电影网| 日韩黄色a级片| 欧美中文字幕一区二区三区| 国产熟女一区二区三区四区| 精品国产乱码久久久久久久久| 日韩大片b站免费观看直播| 国产亚洲精品久久久久久| 麻豆视频在线免费观看| 97精品视频在线播放| 欧美xxx网站| 91嫩草在线视频| 天天久久夜夜| 在线视频亚洲自拍| 伊人影院久久| 五月婷婷六月丁香激情| 成人夜色视频网站在线观看| 日本激情小视频| 亚洲精品写真福利| 亚洲天堂男人av| 6080yy午夜一二三区久久| 五月婷婷六月激情| 精品久久国产精品| 周于希免费高清在线观看| 91在线精品播放| 一区二区三区四区在线看| 手机在线视频你懂的| 亚洲美女啪啪| 91亚洲一区二区| 久久久久久久久久久久久女国产乱 | 26uuu久久噜噜噜噜| 91精品在线免费视频| 久久影视中文粉嫩av| 欧美 日韩 国产 一区| 99色精品视频| 国产米奇在线777精品观看| 亚洲最大成人网站| 亚洲自拍另类综合| 一二三四区视频| 亚洲欧美综合另类中字| 牛牛精品视频在线| 国产色视频一区| 精品日本12videosex| 波多野结衣之无限发射| 狠狠色伊人亚洲综合成人| 蜜桃av免费看| 五月天亚洲婷婷| 亚洲成人黄色片| 久久影视免费观看| 成人在线视频免费| 欧美亚洲丝袜| 亚洲毛片av| 波多野吉衣在线视频| 一区在线播放视频| 樱花视频在线免费观看| 日韩激情片免费| 国产丝袜视频在线播放| 99久久综合狠狠综合久久止 | 久久亚洲精品国产亚洲老地址| 精品亚洲美女网站| 欧美一区二区三区在线播放| 亚洲精品少妇| 亚洲天堂2024| 亚洲一区二区三区四区五区中文| 国产成a人亚洲精v品无码| 在线丨暗呦小u女国产精品| 亚洲成av在线| 日本不卡免费新一二三区| 亚洲在线一区| 亚洲av片不卡无码久久| 大伊人狠狠躁夜夜躁av一区| 日韩在线观看视频网站| 久久久久九九九九| av不卡一区二区| 91黄色在线看| 成人午夜免费av| 日韩精品成人一区| 亚洲国产成人精品一区二区| 9999精品成人免费毛片在线看| 动漫一区二区在线| 亚洲久久在线| 国产激情视频网站| 欧美性猛交xxxx免费看久久久| 亚洲三级黄色片| 国产精品成人一区| 日韩一区二区在线免费| 欧美性受xxxx黒人xyx性爽| 亚洲精品免费电影| 亚洲乱色熟女一区二区三区| 久久久综合av| 亚洲精品无吗| 杨幂毛片午夜性生毛片| 中文字幕一区二区不卡| 国产精品无码在线播放| 欧美激情视频一区二区| 精品日产乱码久久久久久仙踪林| 99999精品视频| 久久亚洲一区二区三区四区| 中文字幕 欧美激情| 久热精品在线视频| 超碰地址久久| 国产日韩成人内射视频| 国产精品成人一区二区艾草| 国产草草影院ccyycom| 韩国美女主播一区| jizzjizz欧美69巨大| 日本一本在线视频| 亚洲不卡av一区二区三区| 免费一级在线观看| 91视频国产高清| 国产午夜精品一区二区三区欧美 | 五月综合激情婷婷六月色窝| 免费a在线观看| 91日韩在线播放| 亚洲毛片在线| 天天干天天操天天拍| 日韩视频免费观看高清在线视频| 黄色激情在线播放| 在线看成人av电影| 91亚洲国产成人精品一区二三| 亚洲男人天堂网址| 久久久久久久国产精品视频| 国产一区二区三区91| 永久av免费在线观看| 色诱亚洲精品久久久久久| www免费在线观看| 日本不卡一区二区三区视频| 久久99国产乱子伦精品免费| yjizz国产| 欧美成人免费大片| 欧美日韩一区二区综合| 一级黄色片毛片| 69av一区二区三区| 免费成人美女女|