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

亚洲激情图片qvod| 国产精品一区二区在线观看网站| 亚洲欧美激情一区| 天天干天天综合| 91福利国产在线观看菠萝蜜| 成人午夜碰碰视频| 国产精品igao视频| 99热精品免费| 亚洲宅男一区| 日韩午夜激情免费电影| 99热在线这里只有精品| 日本最新在线视频| 99精品国产91久久久久久| 国产精品视频免费在线| 日韩欧美亚洲视频| 国产精品99久久| 日韩av网址在线| 午夜免费一级片| 成人激情综合| 亚洲午夜激情av| 亚洲欧洲精品一区二区| 视频在线不卡| 国产精品中文欧美| 国产精品久久久久久亚洲调教| 久久婷婷综合国产| 久久久五月天| 一区二区三区视频免费在线观看| 亚洲成a人无码| 亚洲高清影院| 在线看不卡av| 欧洲av无码放荡人妇网站| 在线免费观看的av| 国产精品久久久久久亚洲毛片| 国产一区喷水| 亚洲精品国偷拍自产在线观看蜜桃| 日韩 欧美一区二区三区| 欧美极品少妇xxxxx| 黑鬼狂亚洲人videos| 国产欧美高清视频在线| 亚洲国产精品免费| 樱花草www在线| 精品日韩视频| 日韩欧美精品网址| 国产午夜大地久久| 91超碰在线播放| 一区二区三区四区视频精品免费| 在线观看免费91| av在线1区2区| 日本一区二区三区在线不卡| 久久久久久艹| 日韩av免费观影| 91在线小视频| 久久久久久国产精品mv| 婷婷在线观看视频| www.日韩av| 久久99精品久久久久久水蜜桃| 免费看国产片在线观看| 成人精品视频一区| 国产在线精品一区二区中文| 欧美一级特黄aaaaaa大片在线观看 | www.成人| 91精品国产色综合久久不卡电影| 一级做a免费视频| 国产电影一区二区| 日韩一区二区三区免费观看| 中文字幕乱妇无码av在线| 亚洲免费一区三区| 日韩av在线网站| 中文字幕免费看| 日韩一区亚洲二区| 久久激情视频免费观看| 亚洲一级生活片| 狠狠综合久久| 57pao国产成人免费| 在线免费一区二区| 精品亚洲国内自在自线福利| 91入口在线观看| 日韩在线观看视频一区二区三区| 99久久婷婷国产综合精品电影| 免费h精品视频在线播放| 九九在线视频| 有码一区二区三区| 欧美深夜福利视频| 91国内外精品自在线播放| 在线不卡中文字幕播放| 蜜臀aⅴ国产精品久久久国产老师| 一区二区三区四区精品视频| 亚洲精品之草原avav久久| 91麻豆精品国产91久久综合| 欧美日韩三级| 欧日韩在线观看| 国产又粗又猛又爽又黄视频 | 亚洲国产免费看| 国产成人久久久精品一区| 国产精品毛片久久久久久久av | 欧美人妻一区二区三区| 亚欧美无遮挡hd高清在线视频| 欧美激情第1页| 国产一区免费看| 国产成人免费高清| 日产精品久久久一区二区| av网站在线看| 在线视频一区二区三区| 国产亚洲精品成人a| 欧美精品一区二区久久| 欧美日韩ab片| 中文字幕在线播放av| 成人午夜视频福利| 在线天堂一区av电影| 亚洲天堂免费电影| 日韩一二三区视频| 成年人视频软件| 国产精品一级| 不卡一卡2卡3卡4卡精品在| 黄色片视频在线观看| 亚洲午夜羞羞片| 成人黄色一级大片| 狠狠做深爱婷婷综合一区| 久久久久久有精品国产| 一级做a爱片性色毛片| 久久一夜天堂av一区二区三区| 成人在线免费观看网址| 国产亚洲一区二区手机在线观看 | 成人激情在线观看| 国产中文字幕在线| 精品福利一区二区| av在线天堂网| 91精品二区| 国产一区二区香蕉| 国产网站在线播放| 狠狠综合久久av一区二区小说 | 国产97在线 | 亚洲| 97一区二区国产好的精华液| 久久精品亚洲国产| 一区二区日韩视频| 中文字幕不卡在线| 色诱视频在线观看| 久久av超碰| 欧美一区二三区| 无码精品在线观看| 五月开心婷婷久久| 疯狂揉花蒂控制高潮h| 亚洲激情专区| 精品久久精品久久| 2020av在线| 亚洲精品91美女久久久久久久| 日本妇女毛茸茸| 国产91精品一区二区麻豆网站| 国产精品夜夜夜爽张柏芝| 婷婷丁香久久| 日韩一级裸体免费视频| 国产又粗又猛视频免费| 中文字幕在线观看一区二区| 亚洲美女爱爱视频| 91精品一区国产高清在线gif| 成人乱色短篇合集| 成人免费在线| 日韩欧美一级特黄在线播放| 九九视频在线免费观看| 丰满少妇久久久久久久| 亚洲精品无码国产| 亚洲资源网站| 国产精品扒开腿做爽爽爽视频 | 在线日韩一区| 国产成人自拍视频在线观看| 成人网视频在线观看| 欧美日本不卡视频| 福利所第一导航| 成人不卡免费av| 黄色片一级视频| 青青草原综合久久大伊人精品 | 国内精品久久久| 欧美zozo| 欧美高清dvd| 久久午夜鲁丝片午夜精品| 99久久免费精品高清特色大片| 北条麻妃69av| 色综合久久网| 成人免费在线看片| 日韩大尺度黄色| 日韩中文综合网| 日本激情一区二区| 欧美伊人久久久久久久久影院| 国产精品丝袜一区二区| 99国产欧美久久久精品| 黄色手机在线视频| 好看的亚洲午夜视频在线| 久久av免费观看| 91麻豆精品国产综合久久久 | 久久先锋影音av鲁色资源网| 国产wwwxx| 极品少妇一区二区三区| 日韩国产欧美精品| 丁香五月缴情综合网| 国产成人精品a视频一区www| a天堂中文在线官网在线| 亚洲精品国偷自产在线99热| 一本色道久久综合精品婷婷| 亚洲午夜久久久久| 91久久久久久久久久久久久久 | 国产精品1区2区3区4区| 成人av电影在线观看| 亚洲久久中文字幕| 99精品热6080yy久久| 亚洲成色www久久网站| 国产精品欧美大片| 成人福利在线观看| 亚洲成人激情社区| 午夜精品久久久99热福利| 香蕉视频网站在线观看| 亚洲免费电影在线观看| 亚洲毛片欧洲毛片国产一品色| 在线观看91视频| 国产原创视频在线| 亚洲综合免费观看高清完整版| 色www亚洲国产阿娇yao| 久久婷婷一区二区三区| 91porn在线| 国产一区二区在线观看免费 | 97久久久久久久| 亚洲激情在线播放| 青青操在线视频观看| 久久精品免费在线观看| 欧产日产国产精品98| 国产九色精品成人porny | 国产日韩欧美中文在线| 国产精品黄视频| 成人性生活视频| 97婷婷涩涩精品一区| 午夜av在线免费观看| xvideos成人免费中文版| 成年人视频在线看| 亚洲人成电影在线观看天堂色| 无码h黄肉3d动漫在线观看| a√中文在线观看| 欧美军同video69gay| aaa在线视频| 一本久久综合亚洲鲁鲁五月天 | 国产二区一区| 综合成人在线| 国产精品 日韩| 亚洲精品黑牛一区二区三区| 亚洲伊人久久综合| 国产一区二区av在线| 91在线免费网站| 久久伦理中文字幕| 成人淫片在线看| 国产精品欧美一区二区三区不卡 | 国产精品成久久久久三级| 国产免费不卡| 国产精品成人aaaaa网站| 另类中文字幕国产精品| 国产精品久久激情| 激情中国色综合| 91九色单男在线观看| 精品亚洲二区| 国产高清精品一区二区| 成人另类视频| 蜜桃视频在线观看91| 国产乱码精品一区二区亚洲 | 国产亚洲在线观看| 国产乱子夫妻xx黑人xyx真爽| 六月婷婷一区| 午夜免费看视频| 国产一区二区视频在线| 99国产精品免费视频| www.在线成人| 国产jk精品白丝av在线观看| 国产精品私人影院| 杨钰莹一级淫片aaaaaa播放| 亚洲一区二区在线免费观看视频| 日韩欧美高清在线观看| 91黄视频在线| 91免费视频播放| 亚洲第一精品久久忘忧草社区| 亚洲av毛片成人精品| 日韩资源在线观看| 午夜av在线免费观看| 欧美在线视频观看| 草民电影神马电影一区二区| 91福利入口| 啄木系列成人av电影| 中文字幕免费在线不卡| 海角社区69精品视频| 青青青在线播放| 国产一区美女在线| 久久一区二区电影| 中文字幕中文字幕在线一区| 久久久久久激情| 欧美在线免费观看亚洲| 精品国产99久久久久久宅男i| 亚洲精品av在线| 在线免费看黄网站| 午夜精品一区二区三区视频免费看| 电影一区电影二区| 国产精品一区视频| 精品一区二区三区的国产在线观看| 日韩精品手机在线观看| 久久精选视频| 日本精品一二三| 国产精品成人在线观看| 中文字幕日韩一级| 91精品国产手机| a天堂中文在线88| 91精品国产高清久久久久久91| 日韩三级一区| 久久综合九色99| 午夜亚洲福利| 日韩av卡一卡二| 久久久久久久久久久99999| 免费网站看av| 欧美日韩极品在线观看一区| 日本天堂在线| 久久久久久久电影一区| 成年永久一区二区三区免费视频| 久久av二区| 日韩午夜电影| 又色又爽又黄18网站| 亚洲人成在线播放网站岛国| 成人a v视频| 精品视频一区在线视频| 欧美卡一卡二| 亚洲最大的网站| 性欧美69xoxoxoxo| 国产精品区在线| 中文字幕第一区二区| 一级一片免费看| 亚洲美女av黄| 在线观看的黄色| 久久99久久精品国产| 在线观看一区| 中文字幕三级电影| 亚洲无人区一区| 亚洲精品中文字幕成人片| 欧美成人精品不卡视频在线观看| 国产成人精品一区二区三区免费| 欧美一区二区三区在线播放| 国产精品一二| 无码国产69精品久久久久同性| 欧美性生活大片免费观看网址| 亚洲av成人精品一区二区三区在线播放| 久久免费国产视频| 久本草在线中文字幕亚洲| 欧美激情亚洲天堂| 不卡视频在线看| 日本视频www| 亚洲精品不卡在线| 乱馆动漫1~6集在线观看| 鲁鲁视频www一区二区| 国产欧美在线| 亚洲最大成人网站| 色国产精品一区在线观看| 国产一区电影| 成人国产亚洲精品a区天堂华泰| 婷婷另类小说| 免费国偷自产拍精品视频| 亚洲制服丝袜一区| 蜜臀av在线观看| 2019最新中文字幕| 欧洲乱码伦视频免费| 性猛交ⅹ×××乱大交| 中文字幕一区在线观看视频| 国产婷婷在线视频| 久久乐国产精品| 欧美做受69| 亚洲黄色av网址| 亚洲视频在线观看一区| 亚洲国产一二三区| 全亚洲最色的网站在线观看| 欧美日韩一二三四| 欧美日韩精品区别| 亚洲一区精品在线| 国产小视频在线观看| 国产欧美精品在线| 1024日韩| 天天操天天舔天天射| 日韩一级片在线播放| www视频在线观看| 亚洲7777| 丁香另类激情小说| 中文字幕欧美色图| 色综合导航网站| 国产亚洲一区| 7777精品视频| 欧美精品电影| 精品国产乱码久久久久久郑州公司| 久久久国产亚洲精品| 亚洲女人久久久| 精品伊人久久97| 玖玖玖视频精品| 能在线观看的av| 亚洲激情在线激情| 国产精品一二三区视频| 99久热re在线精品视频| 日日骚欧美日韩| 国产精品美女毛片真酒店| 亚洲网址你懂得| 好吊妞视频这里有精品| 免费日韩中文字幕| 亚洲色图清纯唯美|