繼續上一篇文章的內容,上一篇文章中,將爬蟲調度器已經寫好了,調度器是整個爬蟲程序的“大腦”,也可以稱之為指揮中心。而現在,我們要做的就是去將調度器中用到的其他元件寫好。首先是url管理器,它既然作為管理器,那麼它一定要區分待爬取的url和已經爬取的url,否則會重複爬取。這裡教學用的是set集合,將兩個url暫時存放到集合中,也就是記憶體中,畢竟比較爬取的資料比較少,當然也可以存放到別的地方,例如快取或關係型資料庫。
第一次是調度器初始化函數中,建立這個urlmanager對象,
第二次是呼叫了add_new_url方法將最初始的url加入到帶爬取的集合中,帶爬取的集合中,
第三次是在爬取過程中來判斷是否有待爬取的url,
第四次是將要爬取的url從集合中取出來,
# 第五次是將頁面解析出來的新的一組url再次添加到帶爬去集合中
那麼我們接下來就要做的是用程式碼來實現這些功能:
1 class UrlManager(object): 2 """docstring for UrlManager""" 3 def __init__(self): 4 self.new_urls = set() 5 self.old_urls = set() 6 #向管理器中添加一个新的url 7 def add_new_url(self,url): 8 if url is None: 9 return10 if url not in self.new_urls and url not in self.old_urls:11 self.new_urls.add(url)12 #从爬取数据中向管理器中批量添加url13 def add_new_urls(self,urls):14 if urls is None or len(urls) == 0:15 return16 for url in urls:17 self.add_new_url(url)18 #判断是否有新的url19 def has_new_url(self):20 return (len(self.new_urls) != 0)21 #从管理器中取出一个新的url22 def get_new_url(self):23 new_url = self.new_urls.pop()24 self.old_urls.add(new_url)25 return new_url
好,到這,url管理器就搞定了!
接下來就是url下載器了,很簡單一個功能,將程式存取的頁面儲存下來。
下載器只在調度器中出現過兩次:
第一次是初始化的時候創建
第二次是緊接著是初始化的時候創建
第二次是緊接著是url之後,馬上取到url之後,馬上取到呼叫它來下載頁面
在url下載器中,原教程使用的是urllib庫,我覺得有點繁瑣。所以我換了一個更好用的函式庫:requests。這個函式庫可以幫助我封鎖許多技術難題,直接去抓取我們想要存取的頁面,而且使用起來非常簡單。
1 import requests 2 3 class HtmlDownloader(object): 4 """docstring for HtmlDownloader""" 5 def download(self,url): 6 if url is None: 7 return 8 response = requests.get(url, timeout = 0.1) 9 response.encoding = 'utf-8'10 if response.status_code == requests.codes.ok:11 return response.text12 else:13 return
簡單講一下這段程式碼:
a.首先要導入requests函式庫,這個因為是第三方函式庫,所以需要你自己下載,在命令列輸入:pip install requests
b.然後開始寫下載器這個類,這個類別只有一個方法,就是download。這個方法首先會接受你給定的url,然後對其進行判斷是否存在。
c.然後呼叫requests的get方法,它裡面接受兩個參數,一個是url,還有一個是timeout
timeout是我自己加進去的,就是超訪問時。如果不加timeout,程式會假死,也就是說會一直在那裡等待頁面的回應,也不拋出異常。
d.然後對返回的response進行編碼設置,因為爬取的百度百科頁面是utf-8,所以這裡最好還是設置一下,雖然requests會智能判斷,但是還是手動改一下為宜。
e.然後在判斷頁面是否回應,這裡的codes.ok其實就是200,表示網頁正常回應,你這裡直接寫 response.status_code == 200 也沒問題。
f.最後,將頁面的所有內容都返回,這裡的text就是一個字串,它包含了一個頁面的所有程式碼(html,css,js)。
### ###以上是python之調度器的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境