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

2021-08-14 09:00:22 字數 2627 閱讀 8574

多程序抓取頁面

匯入第三方thread包,定義乙個程序池

將抓取的一級頁面放進程式池裡

啟動程序池,自定義用幾個程序來執行函式

在程序池中引入函式,定義download函式,執行二級抓取資料

退出執行緒

# import 先導入內建的庫,再匯入第三方庫

import time

import threading

from queue import queue

import lxml.etree

import requests

start_url= '世界大學排名'

# 啟動的執行緒數量

download_line = 10

# 定義queue,佇列,儲存等抓取的url

link_queue = queue()

# 執行緒列表,儲存thread物件

threads =

download_pages = 0

deffetch

(url, raise_err=true):

global download_pages

try:

# 使用requests抓取url

r = requests.get(url)

r.encoding = 'utf-8'

# 每讀取乙個,加1,顯示已經讀取的資料

download_pages += 1

return r.text

except exception as e:

# 如果報錯則print出來

print(e)

else:

# 如果沒報錯,則檢查http的返回碼是否正常

if raise_err:

r.raise_for_status()

defparse_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)

# 執行緒執行這個函式,不退出,一直到link為空

defdownload

():while

true:

# get阻塞方法

link = link_queue.get()

if link is

none:

break

parse_university(fetch(link))

# 向佇列傳送完成任務的訊息

link_queue.task_done()

print('remaining queue: %s' % link_queue.qsize())

if __name__ == '__main__':

start_time = time.time()

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

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

# 第一步,抓取第乙個頁面放進q裡面

# 第二步,啟動執行緒

for i in range(download_line):

t = threading.thread(target=download)

t.start()

# 把讀入的內容

# 堵塞,前面的都執行完了之後,再執行他,然後退出程式

link_queue.join()

# 向佇列傳送**********_num個none,以通知執行緒退出

for i in range(download_line):

link_queue.put(none)

# 退出執行緒

for t in threads:

t.join()

# 計算抓取的耗時

cost_seconds = time.time() - start_time

print('download %s pages in %.2f seconds'%(download_pages, cost_seconds))

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

用函式將 優化 將 劃分為三個函式 模組 第乙個函式請求根路徑 第二個函式,請求二級頁面,遍歷出大學的詳細資訊 第三個函式,主函式,控制整個程式的執行,在主函式裡,先獲取請求頁面的路徑,然後link出一級頁面,最後,把這個一級頁面的路徑用parse university迴圈出他的子資訊。需要注意的是...

設計 乙個簡單的 流程引擎

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

跑乙個 OpenVINO 的 demo

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