99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)

發(fā)布時(shí)間:2016-11-25 18:24  回復(fù):0  查看:2707   最后回復(fù):2016-11-25 18:24  

Python網(wǎng)絡(luò)爬蟲(chóng)內(nèi)容提取器一文我們?cè)敿?xì)講解了核心部件:可插拔的內(nèi)容提取器類gsExtractor。本文記錄了確定gsExtractor的技術(shù)路線過(guò)程中所做的編程實(shí)驗(yàn),實(shí)驗(yàn)了用xslt方式一次性提取靜態(tài)網(wǎng)頁(yè)內(nèi)容并轉(zhuǎn)換成xml格式。

  2,用lxml庫(kù)實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容提取

  lxmlpython的一個(gè)庫(kù),可以迅速、靈活地處理 XML。它支持 XML Path Language (XPath) Extensible Stylesheet Language Transformation (XSLT),并且實(shí)現(xiàn)了常見(jiàn)的 ElementTree API

  這2天測(cè)試了在python中通過(guò)xslt來(lái)提取網(wǎng)頁(yè)內(nèi)容,記錄如下:

  2.1,抓取目標(biāo)

  假設(shè)要提取集搜客官網(wǎng)舊版論壇的帖子標(biāo)題和回復(fù)數(shù),如下圖,要把整個(gè)列表提取出來(lái),存成xml格式

Python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)


2.2,源代碼1:只抓當(dāng)前頁(yè),結(jié)果顯示在控制臺(tái)

  Python的優(yōu)勢(shì)是用很少量代碼就能解決一個(gè)問(wèn)題,請(qǐng)注意下面的代碼看起來(lái)很長(zhǎng),其實(shí)python函數(shù)調(diào)用沒(méi)有幾個(gè),大篇幅被一個(gè)xslt腳本占去了,在這段代碼中,只是一個(gè)好長(zhǎng)的字符串而已,至于為什么選擇xslt,而不是離散的xpath或者讓人撓頭的正則表達(dá)式,請(qǐng)參看Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目啟動(dòng)說(shuō)明,我們期望通過(guò)這個(gè)架構(gòu),把程序員的時(shí)間節(jié)省下來(lái)一大半。

  可以拷貝運(yùn)行下面的代碼(windows10, python3.2下測(cè)試通過(guò))

  from urllib import requestfrom lxml import etreeurl="http://www.gooseeker.com/cn/forum/7"conn = request.urlopen(url)doc = etree.HTML(conn.read())xslt_root = etree.XML("""\<列表><標(biāo)題><回復(fù)數(shù)>""")transform = etree.XSLT(xslt_root)result_tree = transform(doc)print(result_tree)

  2.3,抓取結(jié)果 得到的抓取結(jié)果如下圖:

Python使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)


2.4,源代碼2:翻頁(yè)抓取,結(jié)果存入文件

我們對(duì)2.2的代碼再做進(jìn)一步修改,增加翻頁(yè)抓取和存結(jié)果文件功能,代碼如下:

  from urllib import requestfrom lxml import etreeimport timexslt_root = etree.XML("""\<列表><標(biāo)題><回復(fù)數(shù)>""")baseurl = "http://www.gooseeker.com/cn/forum/7"basefilebegin = "jsk_bbs_"basefileend = ".xml"count = 1while (count < 12):

  url = baseurl + "?page=" + str(count)

  conn = request.urlopen(url)

  doc = etree.HTML(conn.read())

  transform = etree.XSLT(xslt_root)

  result_tree = transform(doc)

  print(str(result_tree))

  file_obj = open(basefilebegin+str(count)+basefileend,'w',encoding='UTF-8')

  file_obj.write(str(result_tree))

  file_obj.close()

  count += 1

  time.sleep(2)

  我們?cè)黾恿藢懳募拇a,還增加了一個(gè)循環(huán),構(gòu)造每個(gè)翻頁(yè)的網(wǎng)址,但是,如果翻頁(yè)過(guò)程中網(wǎng)址總是不變?cè)趺崔k?其實(shí)這就是動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容,下面會(huì)討論這個(gè)問(wèn)題。

  3,總結(jié)

這是開(kāi)源Python通用爬蟲(chóng)項(xiàng)目的驗(yàn)證過(guò)程,在一個(gè)爬蟲(chóng)框架里面,其它部分都容易做成通用的,就是網(wǎng)頁(yè)內(nèi)容提取和轉(zhuǎn)換成結(jié)構(gòu)化的操作難于通用,我們稱之為提取器。但是,借助GooSeeker可視化提取規(guī)則生成器MS謀數(shù)臺(tái) ,提取器的生成過(guò)程將變得很便捷,而且可以標(biāo)準(zhǔn)化插入,從而實(shí)現(xiàn)通用爬蟲(chóng),在后續(xù)的文章中會(huì)專門講解MS謀數(shù)臺(tái)與Python配合的具體方法。


來(lái)源:中國(guó)統(tǒng)計(jì)網(wǎng)

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?