1. 程式人生 > 程式設計 >python爬蟲模組URL管理器模組用法解析

python爬蟲模組URL管理器模組用法解析

這篇文章主要介紹了python爬蟲模組URL管理器模組用法解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

URL管理器模組

一般是用來維護爬取的url和未爬取的url已經新新增的url的,如果佇列中已經存在了當前爬取的url了就不需要再重複爬取了,另外防止造成一個死迴圈。舉個例子

我爬www.baidu.com 其中我抓取的列表中有music.baidu.om,然後我再繼續抓取該頁面的所有連結,但是其中含有www.baidu.com,可以想象如果不做處理的話就成了一個死迴圈了,在百度首頁和百度音樂頁迴圈,所以有一個對列來維護URL是很重要的。

下面以python程式碼實現為例,使用的deque雙向佇列方便取出以前的url。

from collections import deque
class URLQueue():
  def __init__(self):
    self.queue = deque() # 待抓取的網頁
    self.visited = set() # 已經抓取過的網頁
 
  def new_url_size(self):
    '''''
    獲取未爬取URL集合的大小
    :return: 
    '''
    return len(self.queue)
 
  def old_url_size(self):
    '''''
    獲取已爬取URL的大小
    :return: 
    '''
    return len(self.visited)
 
  def has_new_url(self):
    '''''
    判斷是否有未爬取的URL
    :return: 
    '''
    return self.new_url_size() != 0
 
  def get_new_url(self):
    '''''
    獲取一個未爬取的URL
    :return: 
    '''
    new_url = self.queue.popleft()#從左側取出一個連結
    self.old_urls.add(new_url)#記錄已經抓取
    return new_url
 
  def add_new_url(self,url):
    '''''
    將新的URL新增到未爬取的URL集合
    :param url: 單個url
    :return: 
    '''
    if url is None:
      return False
    if url not in self.new_urls and url not in self.old_urls:
      self.new_urls.append(url)
 
  def add_new_urls(self,urlset):
    '''''
    將新的URL新增到未爬取的URL集合
    :param urlset: url集合
    :return: 
    '''
    if urlset is None or len(urlset) == 0:
      return
    for url in urlset:
       self.add_new_url(url)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。