python爬蟲廣度優先與深度優先 例項說明

2021-10-07 04:27:41 字數 2907 閱讀 5187

感覺網上的文章都是以這篇為中心去照搬的

不過這篇文章也確實把廣度跟深度優先演算法說完了,但感覺沒有爬取例項的話還是挺抽象的,所以就配合例子說一下廣/深度優先。

首先我們要知道:

廣度優先: 把同一等級的url全部爬取網然後再往下一級的url去爬取

深度優先: 把乙個分頁的所有等級的url從淺到深爬取完後再爬取另乙個分頁

我們以 這個電影網為例子

我們的目標是 進入每乙個分類的更多頁面

import requests,re

from parsel import selector

from urllib.parse import urljoin

defurl_level_queue

(url)

: base_url =

""if url is

none

:return

url_list =

next_page_url =

resp_shouye = requests.get(url=url,headers=headers)

if resp_shouye.text:

print

(resp_shouye.url)

else

:return

selector_shouye = selector(resp_shouye.text)

#獲取所有"更多"的起始頁分頁

url_list = selector_shouye.xpath(

"//div[@class='title_all']//em/a/@href"

).getall(

)#迅雷不是我們要的所以刪除

#所有的分頁url

resp_new_url = requests.get(url=new_url,headers=headers)

next_page = re.findall(r"ïâò»ò³"

,str

(resp_new_url.text))[

0]#獲得所有分頁url的nextpage 第二頁

)while next_page_url:

node_next = next_page_url.pop(0)

print

(node_next)

#2 resp_next_url = requests.get(url=node_next,headers=headers)

#2 next_page = re.findall(r"ïâò»ò³"

,str

(resp_next_url.text))[

0]#2找3

)

headers =

url =

"/"url_level_queue(url)

``

深度優先:採取的是遞迴

import requests,re

from parsel import selector

from urllib.parse import urljoin

defurl_tree

(url)

: resp_shou = requests.get(url=url,headers=headers)

if resp_shou:

print

(resp_shou.url)

next_page = re.findall(r"ïâò»ò³"

,str

(resp_shou.text)

)if next_page:

#為了不把乙個深度全部爬取完,所以只爬取前5頁

if re.findall(r'.+_(\d+)\.html'

,str

(next_page))[

0]=='6'

:return

next_page_url = urljoin(resp_shou.url,next_page[0]

)return url_tree(next_page_url)

base_url =

""headers =

url =

"/"resp_shouye = requests.get(url=url,headers=headers)

if resp_shouye.text:

print

(resp_shouye.url)

selector_shouye = selector(resp_shouye.text)

#獲取所有"更多"的起始頁分頁

url_tree(new_gengduo_url)

**寫得很爛,但不妨礙我們去理解

python基礎爬蟲 深度優先與廣度優先

困於心衡於慮而後作 今天的學習目標是 深度優先與廣度優先爬取資料 深度優先與廣度優先示意圖 1.深度優先使用棧來完成 如果我們不適用遞迴程式實現深度優先的順序爬取網頁資料,也可以設計乙個棧stack來完成 在python中實現乙個棧很容易,python中的list就是乙個棧,很容易設計乙個自己的st...

遍歷 廣度優先與深度優先

第一步,建立佇列,元素操作規則為 佇列尾部加入元素,頭部移除元素 第二步,把資料夾加入該佇列 第三步,從該佇列頭移除資料夾,同時依次遍歷它的所有孩子,如果孩子是檔案,則提取 如果孩子是資料夾,則加入佇列尾部 第四步,重複第三步 直到隊列為空為止。到此資料夾中所有檔案都被獲取 獲取資料夾下所有檔案 p...

深度優先 廣度優先

父類定義 class people def init self,name,age,weight self.name name self.age age self.weight weight defspeak self print s 說 我 d 歲。self.name,self.age 單繼承示例 ...