python3爬蟲,最短時間實現(二)

2021-07-02 15:28:33 字數 1470 閱讀 9744

(一)中主要內容:

python3中:urllib.request.urlopen()開啟指定url;

urllib.parse.uelencode()對普通字串轉成符合url的字串

urlencode()編碼:對字串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進製制數,空格則編碼為加號(+)。

urldecode()解碼:還原 url 編碼字串。

爬蟲是如何工作的。

看首頁所有鏈結裡的內容,然後爬到了工大要聞這乙個鏈結上面,已經完成了兩頁面的爬取,通過(一)方法分析url資料,即可提取有效內容。接下來,有乙個返回首頁的鏈結,是不用爬回去的,因為已經看過了這個鏈結。所以,要存下已經看過的鏈結,這樣,滅此看到乙個可能需要爬的新鏈結,就先看看存下的鏈結有沒有重複的,如果有,那就不用去爬了。理論上,如果所有的頁面都能爬到。在python裡,用偽**這樣實現。

importqueue

url_queue= queue.queue()

seen =set()

start_page= ''

seen.insert(start_page)

url_queue.put(start_page)

while(true):

if url_queue.size()>0:

current_url = url_queue.get() #取出佇列裡面第乙個url

store(current_url) #儲存url網頁

for next_url in extract_urls(current_url):

#extract_urls(current_url)是指頁面t中所有url的集合, current_url是這個集合中的乙個元素

if next_url not in seen:

seen.put(next_url)

url.queue(next_url)

else:

break

例項**:

# -*-coding: utf-8 -*-

importurllib.request

importurllib

fromcollections import deque

importre

q =deque()

s =set()

start_url= ''

data =urllib.request.urlopen(start_url).read().decode('utf-8')

r =re.compile(r'target.+?href="(.+?)"')

fori_url in r.findall(data):

s.add(i_url)

if i_url not in s:

print(s) 

總結:這次主要是爬蟲的工作原理,以及set,deque的基本操作,最重要的是有關正規表示式的了解。

最短時間(Dijistra)

時間限制 500ms 記憶體限制 100m 最短時間 描述 夢工廠有 n 個分廠 從 1 開始編號 有m對分廠通過雙向鐵路相連。為了保證每兩個分廠之間的同學可以方便地進行交流,掌舵人張老師就在那些沒有鐵路連線的分廠之間建造了公路。在兩個直接通過公路或鐵路相連的分廠之間移動,需要花費 1 小時。現在菜...

最短時間過橋問題

問題如下 四個女人過橋,夜間有一火把,每次最多過兩個,必需帶火把,過橋速度不一樣,分別為 兩個人過用最慢乙個的速度,火把不能扔,如何在17min內四個女人都過橋?這個問題其實園子裡已經有解決方案了 也討論了多次 不過呢 很多只有思路 原始碼也不夠詳細 於是 我再演繹一下 歸納總結一下 其實是很簡單的...

最短路 dijkstra求最短時間)

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...