多程序抓取頁面
匯入第三方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...