通過正規表示式找到當前頁面中的所有url,儲存在set中(剔除重複),用類似圖資料結構的深度優先遍歷演算法遍歷set,實現全站爬蟲。
from urllib import request
from bs4 import beautifulsoup as bs
import re
import time
url = ""
visited = set()
def get_local_pages(url):
try:
time.sleep(1)
web = request.urlopen(url=url)
except:
print("open url",url, "failed error!")
return
soup = bs(web.read(), 'html.parser')
tags = soup.find_all(name="a") #a標籤儲存url,找到所有a標籤
r = re.compile(r'href="/.+?\.html"') #使用非貪婪模式
pages_temp = set()
pages = set()
for tag in tags:
tag = str(tag)
urls = r.findall(tag)
if urls:
pages_temp.add(urls[0])
for page in pages_temp:
if page[7:11] != "jnyzh":
page = "" + page[7:-1]
pages.add(page)
print(pages)
return pages
def dfs(pages): #使用類似圖的深度優先遍歷方法遞迴遍歷url
global visited
if pages is set():
return
for page in pages:
if page not in visited:
print("visiting",page)
visited.add(page)
url = page
print("a")
pages = get_local_pages(url)
dfs(pages)
pages = get_local_pages(url)
dfs(pages)
爬蟲之全站爬取方法
方法 做過好幾個關於 全站的專案,這裡總結一下。先把上面那張圖寫下來,全站爬取的兩種方法 關係網路 優點 簡單 可以抓取 熱門 資料 缺點 無法抓取全量資料 速度慢 需要解決去重問題 可行性 比較高 遍歷id 優點 可以抓取所有資料 不用資料去重 缺點 資源消耗大 速度慢 可能被發現 可行性 僅可用...
全站爬蟲專案一階段總結
這段時間給公司做全站爬蟲。一開始在公司框架內開發,耗費了大量的時間,仍然效果不好 因為受限於框架本身的邏輯,難以實現複雜的業務。後來,轉向了scrapy,並將幾個關鍵的服務,比如鏈結過濾 列表頁識別和過濾,做成單獨的模組或者服務。雖然現在效果仍然不理想,但已經是乙個可用 可調優的框架,在幾個關鍵環節...
Python入門 全站url爬取
作為乙個安全測試人員,面對乙個大型 的時候,手工測試很有可能測試不全,這時候就非常需要乙個通用型的 掃瞄器。當然能直接掃出漏洞的工具也有很多,但這樣你只能算是乙個工具使用者,對於安全測試你還遠遠不夠。這時候應該怎麼做呢?對於那些大量且重複性工作,盡量能用工具實現就用工具實現,然後打包成自己的工具包。...