用lxml跑乙個簡單的流程 2 0版本

2021-08-14 08:48:39 字數 2240 閱讀 6104

用函式將**優化

將**劃分為三個函式(模組),第乙個函式請求根路徑

第二個函式,請求二級頁面,遍歷出大學的詳細資訊

第三個函式,主函式,控制整個程式的執行,

在主函式裡,先獲取請求頁面的路徑,然後link出一級頁面,最後,把這個一級頁面的路徑用parse_university迴圈出他的子資訊。

需要注意的是,不能把路徑直接傳入fetch函式,因為在主函式裡,每一次迴圈二級頁面都需要訪問一級頁面,重新遍歷一級頁面fetch函式的值
import lxml.etree

import requests

start_url= '世界大學排名'

deffetch

(url):

start_url = '世界大學排名'

r = requests.get(url)

# 伺服器出錯資訊

r.raise_for_status()

r.encoding='utf-8'

return r.text

# 負責將每乙個大學的子資訊都遍歷出來(二級遍歷)

defparse_university

(html):

selector = lxml.etree.html(html)

title = selector.xpath('//*[@id="wikicontent"]/h1/text()')[0]

infobox = selector.xpath('//div[@class="infobox"]')[0]

# p//text()雙斜槓,表示把隱藏的也顯示出來

keys = infobox.xpath('./table//tr/td[1]/p//text()')

cols = infobox.xpath('./table//tr/td[2]')

# 把values的內容便利出來,用空格鏈結起來

values = [''.join(col.xpath('.//text()')) for col in cols]

info =

for name, properties in info.items():

print(name)

for k, v in properties.items():

print('%s:%s' % (k, v))

print('-' * 30)

if __name__ == '__main__':

# 獲取請求頁面的路徑

selector = lxml.etree.html(fetch(start_url))

# 獲取一級頁面的內容(標籤)

links = selector.xpath('//*[@id="content"]/table/tbody/tr/td/a/@href')

# 遍歷二級頁面,將需要的每一條大學資料遍歷出來(一級遍歷)

for link in links:

parse_university(fetch(link))

2.1 按順序排列
字典是無序的,實現按順序排列,將字典換成列表就行了

1. 在二級頁面迴圈的時候,每次都先把標題(這裡是大學名)列印出來

2. 迴圈大學資訊的時候,直接用列表的形式迴圈出keys和values

def

parse_university

(html):

selector = lxml.etree.html(html)

title = selector.xpath('//*[@id="wikicontent"]/h1/text()')[0]

# 列印大學名

print(title)

infobox = selector.xpath('//div[@class="infobox"]')[0]

keys = infobox.xpath('./table//tr/td[1]/p//text()')

cols = infobox.xpath('./table//tr/td[2]')

values = [''.join(col.xpath('.//text()')) for col in cols]

# 用列表的形式迴圈出keys, values

for k, v in zip(keys, values):

print('%s:%s'%(k, v))

print('-' * 30)

用lxml跑乙個簡單的流程 3 0版本

多程序抓取頁面 匯入第三方thread包,定義乙個程序池 將抓取的一級頁面放進程式池裡 啟動程序池,自定義用幾個程序來執行函式 在程序池中引入函式,定義download函式,執行二級抓取資料 退出執行緒 import 先導入內建的庫,再匯入第三方庫 import time import thread...

設計 乙個簡單的 流程引擎

專案原因 之前參與過一些 工作流 的專案,都是基於 某些 機構現有的 工作流引擎。專案進行中,最鬧心的 莫過於 業務 和 流程 的 混淆一起。見過的工作流是怎樣的 首先乙個基於 silverlight 的 流程ui設計器 通過設計器 得到乙個 流程xml 和 布局json 兩個檔案 布局json檔案...

跑乙個 OpenVINO 的 demo

上週在公司聽了 intel 的代表來介紹他們的 ai 晶元,spring hill nnp i 1000 關於這個晶元的資料,具體可以看看這個下面的 ppt。因為 gpu 資源太緊缺了,而線上部署的模型,考慮到算力和延時等因素,都不會太複雜,所以實際場景下做推斷,還是大量的 cpu 為主的。鑑於 i...