精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美劲爆第一页| 欧美精品粉嫩高潮一区二区| 久久久久久久久久久久久久一区| 香蕉影院在线观看| 久久精品国产99久久| 欧美一区二区三区免费观看视频 | 成人同人动漫免费观看| 欧美一区三区四区| 国产成人精品视频免费看| aaa在线观看| 国产东北露脸精品视频| 欧亚精品在线观看| 久草网站在线观看| 欧美精品一区二区三区精品| 日韩欧美在线影院| av污在线观看| 少妇视频一区| 亚洲欧洲日韩一区二区三区| 狠狠色噜噜狠狠狠狠色吗综合| 中文字幕av片| 国产精品人人爽人人做我的可爱| 久久精品一区中文字幕| 色婷婷av777| 97久久亚洲| 欧美精品在线视频| 午夜dv内射一区二区| 丰乳肥臀在线| 亚洲精品国产品国语在线app| 久久综合毛片| 日本美女一级片| 国产精品综合一区二区三区| 国产精品jizz在线观看麻豆| 国产精品国产三级国产专区52| 欧美69wwwcom| zzjj国产精品一区二区| 无码人妻精品一区二区中文| 超碰97久久国产精品牛牛| 91精品国产一区二区三区| 成人免费毛片播放| 正在播放日韩精品| 精品美女永久免费视频| 欧美一区二区激情| 人人超在线公开视频| 中文字幕一区二区三| 亚洲精品一区二区三区樱花| 精品乱码一区二区三四区视频| 99久久精品情趣| 成人在线免费观看一区| 亚洲精品视频专区| 国产精品99久久久久久久vr| 国产精品一区二区久久国产| 亚洲精品国产精品乱码视色| 日日噜噜夜夜狠狠视频欧美人| 欧美自拍大量在线观看| 精品欧美一区二区三区免费观看 | 日韩高清影视在线观看| 亚洲福利视频二区| 国产一级二级视频| 日韩av黄色在线| 亚洲精品视频久久| 白丝女仆被免费网站| 亚洲黄页在线观看| 亚洲图中文字幕| 国产一二三四区在线| 久久一级电影| 久久综合电影一区| 免费在线看黄网址| 在线亚洲免费| 国产成人精品免高潮费视频| 中文字幕视频一区二区| 精品在线免费观看| 99热国产免费| 天堂资源中文在线| 99久久99久久久精品齐齐| 久久精品国产综合精品| 国产视频网站在线| 中文字幕+乱码+中文字幕一区| 亚洲资源在线网| 国产三级在线播放| 亚洲超丰满肉感bbw| 精品人妻一区二区三区四区在线 | 亚洲精品日韩av| 韩国av免费在线| 久久久久久日产精品| 亚洲成人自拍| 色黄网站在线观看| 欧美午夜片在线免费观看| 一级特黄性色生活片| 日日夜夜精品| 亚洲国产精品久久久久秋霞不卡| 91网站免费入口| 91精品动漫在线观看| 国内精品久久久久影院 日本资源| 天天干在线播放| 久久国产精品色婷婷| 国产v亚洲v天堂无码| 九一在线视频| 亚洲综合色区另类av| 免费黄色特级片| 久久三级中文| 国产亚洲人成a一在线v站| 国产精品白丝喷水在线观看| 亚洲成人在线| 国产欧美日韩亚洲精品| 欧美一级特黄aaaaaa| 国产精品色哟哟| 给我免费播放片在线观看| 高清欧美日韩| 日韩精品在线观看一区二区| 精品国产视频在线观看| 麻豆精品网站| 国产伦精品一区二区三区照片| 成人免费视频| 欧美日韩激情网| 又黄又爽又色的视频| 亚欧洲精品视频在线观看| 欧美高跟鞋交xxxxxhd| 中文字幕人妻一区二区在线视频| 成人少妇影院yyyy| www.亚洲一区二区| 日本高清不卡一区二区三区视频| 精品国产一区二区三区忘忧草| 网爆门在线观看| 亚洲综合日本| 国产亚洲精品久久飘花| 成人欧美在线| 欧美午夜精品理论片a级按摩| 久久人人妻人人人人妻性色av| 亚洲精品一区二区在线看| 国产精品久久久av| 精品视频一二区| 色综合中文字幕| 黄色性生活一级片| 激情视频一区| 成人激情直播| 欧美1—12sexvideos| 555夜色666亚洲国产免| 国产视频三区四区| 天堂影院一区二区| 欧美久久久久久久| 在线视频超级| 亚洲人成电影网站| 亚洲 欧美 成人| 久久影音资源网| 久久久久久久久久久福利| 欧美aaaaaaaa牛牛影院| 97在线观看视频国产| 人妻va精品va欧美va| 亚洲一区二区免费视频| 91精产国品一二三| 激情久久婷婷| 久久99精品久久久久久久青青日本| a'aaa级片在线观看| 亚洲成av人片在线观看香蕉| 国产一级一级片| 99视频一区二区| 青青草成人免费在线视频| 欧美日韩大片免费观看| 欧美中文字幕在线播放| 美女毛片在线看| 欧洲视频一区二区| 欧美性生给视频| 国产精品一区二区无线| 91免费黄视频| 国产欧美日韩一区二区三区四区| 国产精品极品在线| 黄色网在线看| 精品国产一二三区| caoporn国产| 国产精品看片你懂得| 精品国产午夜福利在线观看| 亚洲手机视频| 欧美精品尤物在线| 亚洲精品成a人ⅴ香蕉片| 久久91精品国产91久久久| 日韩在线观看视频一区二区三区| 第一福利永久视频精品| 呻吟揉丰满对白91乃国产区| 国产麻豆精品theporn| 成人性生活视频免费看| 国产成人精品999在线观看| 91精品视频在线看| 国内精品国产成人国产三级粉色| 国产成人无遮挡在线视频| 日韩精品福利片午夜免费观看| 91综合精品国产丝袜长腿久久| 69**夜色精品国产69乱| 999国产在线视频| 欧美成人欧美edvon| 国产区一区二区三| ...xxx性欧美| 在线观看国产网站| 激情久久五月天| 日本欧美黄色片| 久久中文字幕av| 国产精品一区二| 玖玖精品在线| 57pao成人国产永久免费| 91最新在线| 亚洲激情电影中文字幕| 在线观看国产精品视频| 亚洲va韩国va欧美va精品| 国产精品酒店视频| av资源站一区| 五月天中文字幕在线| 夜夜夜久久久| 91大学生片黄在线观看| 欧美三级伦理在线| 精品国产乱码久久久久| 午夜精品久久久久久毛片| 欧洲日本亚洲国产区| 欧美黑人猛交| 久久精品国产亚洲精品2020| 欧洲免费在线视频| 精品久久久久久亚洲综合网| 亚洲天堂网在线视频| 黑丝美女久久久| 国产五月天婷婷| 亚洲精品第1页| 亚洲欧美另类日本| 久久久精品影视| 欧美xxxx×黑人性爽| 激情六月婷婷久久| 亚洲天堂2018av| 视频一区二区国产| 国产a级一级片| 在线精品一区| 国产成人永久免费视频| 一区二区三区四区电影| 一区二区在线高清视频| 精品一区二区三区的国产在线观看| 国产日韩精品推荐| а√中文在线天堂精品| 91久久偷偷做嫩草影院| 国产高清亚洲| 91在线精品播放| 91精品福利观看| 国产在线久久久| 天天综合91| 成人美女免费网站视频| 日韩有码欧美| 91精品久久久久久久久青青| 国产成人精品一区二区三区视频| 国产成人精品av在线| 久久爱91午夜羞羞| 日本精品va在线观看| 综合另类专区| 国产国语刺激对白av不卡| 成人h在线观看| 国产精品视频在线播放| 久久精品黄色| 成人黄色av网| 亚洲福利合集| 国产精品免费在线播放| 四虎5151久久欧美毛片| 久久精品二区| 成人羞羞网站入口免费| 亚洲成人午夜在线| 亚洲第一偷拍| 国产性生活免费视频| 合欧美一区二区三区| aa视频在线播放| 久久都是精品| 爱爱爱爱免费视频| 国产成人亚洲综合a∨婷婷图片| 精品伦一区二区三区| 99久久综合色| 国产真实乱人偷精品人妻| 国产精品欧美一区喷水| www.毛片com| 亚洲成人高清在线| 无码人妻一区二区三区线| 欧美日韩免费高清一区色橹橹| 在线观看免费中文字幕| 日韩欧美国产一二三区| 污视频在线免费| 国产一区二区免费| www久久日com| 日本精品免费一区二区三区| 久久91视频| 官网99热精品| 国产真实有声精品录音| 在线观看污视频| 新狼窝色av性久久久久久| mm131国产精品| 99国产欧美另类久久久精品| 国产精品久久免费观看| 一区二区不卡在线播放 | 国产一区二区精品| 五月婷婷丁香色| www.成人网.com| 国产精品酒店视频| 五月开心婷婷久久| 97在线播放免费观看| 日韩高清有码在线| 黄av在线免费观看| 欧美在线激情视频| 欧美日韩中出| 婷婷四房综合激情五月| 亚洲天堂男人| 中国黄色片一级| 91蜜桃视频在线| 欧美激情精品久久| 欧美色窝79yyyycom| 天天舔天天干天天操| 日韩一级裸体免费视频| 一根才成人网| 国产66精品久久久久999小说| 欧美色爱综合| 日本三级免费网站| 成年人国产精品| 欧美在线视频第一页| 在线日韩国产精品| 亚洲欧美色视频| 欧美国产日韩xxxxx| 久久青草视频| 日韩高清av电影| 亚洲综合激情| 91视频啊啊啊| 亚洲大片免费看| www.中文字幕| 超碰91人人草人人干| 国产成+人+综合+亚洲欧美| 久久婷婷国产综合尤物精品| 国模 一区 二区 三区| 日本精品一区在线| 国产精品久久久久影院色老大| 久久久久久久久影院| 亚洲第一区在线观看| 蜜桃传媒在线观看免费进入| 亚洲一区二区三区xxx视频| 日韩在线观看一区 | 成人全视频免费观看在线看| 欧美国产视频在线观看| 一区二区三区精品视频在线观看| 亚洲少妇中文字幕| 一区二区高清在线| www天堂在线| 欧美美女18p| 我要色综合中文字幕| 伊人再见免费在线观看高清版| 国产综合色产在线精品| 三级在线观看免费大全| 欧美一区午夜视频在线观看| 毛片在线看网站| 91综合免费在线| 欧美成人一品| 黄色激情在线观看| 五月婷婷激情综合网| 色在线免费视频| 日本在线观看天堂男亚洲 | aaa欧美日韩| 国产精品xxxx喷水欧美| 日韩毛片在线看| 韩国成人在线| 亚洲图片欧洲图片日韩av| 精品一区二区三区视频在线观看 | 亚洲成人7777| 欧美婷婷久久五月精品三区| 青青精品视频播放| 日韩电影免费网站| 6080国产精品| 婷婷久久综合九色综合绿巨人| 亚州精品国产精品乱码不99按摩| 91成品人片a无限观看| 国产伦精品一区二区三区千人斩 | 成年人视频在线免费看| 精品亚洲一区二区三区四区五区| 欧美xxx视频| 一区二区三区四区五区精品 | 在线观看av不卡| 日本精品在线| 国产精品视频福利| 另类激情亚洲| 青青草原在线免费观看| 亚洲精品99久久久久中文字幕| 在线中文字幕播放| 欧美性视频在线播放| 成人禁用看黄a在线| 中文字幕国产在线观看| 北条麻妃久久精品| 麻豆一区一区三区四区| 亚洲xxxx2d动漫1| 亚洲一线二线三线视频| 久久久久久久久亚洲精品| 成人乱人伦精品视频在线观看| 在线日韩欧美| 日本高清黄色片| 精品av综合导航| 国产精品第一国产精品| 性一交一乱一伧国产女士spa| 国产日韩影视精品| 亚洲a视频在线| 国产精品日韩在线播放| 国产一区二区中文| 美国精品一区二区| 日韩精品高清在线| 亚洲午夜国产成人| 蜜臀av午夜一区二区三区| 亚洲三级免费电影|