小編給大家分享一下多線程在python3爬蟲中調(diào)用函數(shù)的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)成立與2013年,先為建華等服務(wù)建站,建華等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為建華企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
可以說函數(shù)和python爬蟲一般情況下都可以結(jié)合使用,但是這需要小伙伴們對(duì)于函數(shù)的使用方法進(jìn)行充分的了解,才能和python爬蟲的知識(shí)點(diǎn)緊密結(jié)合使用。經(jīng)過幾天多線程和爬蟲的內(nèi)容講解,相信大家對(duì)于這方面的模塊內(nèi)容已經(jīng)比較熟悉的,所以可以用我們的老朋友download()函數(shù)進(jìn)行一次知識(shí)點(diǎn)的交流,下面就來來看看download()在python爬蟲中的運(yùn)用吧。
對(duì)其進(jìn)行構(gòu)造,創(chuàng)建日志,download()函數(shù)創(chuàng)建線程,update_queque_url對(duì)連接的列表進(jìn)行更新,get_url()根據(jù)bs4進(jìn)行匹配獲取連接,download_all()通過調(diào)用download()函數(shù)實(shí)現(xiàn)批量下載。spider作為一個(gè)入口函數(shù)進(jìn)行爬取
class Crawler: def __init__(self,name,domain,thread_number): self.name=name self.domain=domain self.thread_number=thread_number self.logfile=open('log.txt','w') self.thread_pool=[] self.url = 'http://'+domain def spider(self):# 內(nèi)容會(huì)隨著爬蟲的進(jìn)行而更新 global g_queue_urls# 初始,隊(duì)列中僅有一個(gè)url g_queue_urls.append(self.url)# 爬取的深度 depth =0 print(f'爬蟲{self.name}開始啟動(dòng)........') while g_queue_urls: depth +=1 print(f'當(dāng)前爬取深度是{depth}') self.logfile.write(f'URL:{g_queue_urls[0]}') self.download_all() # 下載所有 self.update_queque_url() # 更新 url隊(duì)列 self.logfile.write(f">>>Depth:{depth}") count = 0 while count10 and 'http://' not in link['href']: # 如果link是相對(duì)地址 links.append(self.url +link['href']) except Exception as e: print("fail to get url",e) return links
主函數(shù)調(diào)用爬蟲函數(shù)的spider()方法
if __name__=="__main__": domain ="www.geyanw.com" thread_number=10 name="geyan" crawler =Crawler(name,domain,thread_number) crawler.spider()
除了download()函數(shù),spider()也可以在python爬蟲中調(diào)用。
以上是“多線程在python3爬蟲中調(diào)用函數(shù)的示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!