摘要:最近發(fā)現(xiàn)有個電影下載網(wǎng)站叫做比特大雄,下了幾部電影之后,打算寫個爬蟲把網(wǎng)站的電影信息都爬取下來。結(jié)果我就發(fā)現(xiàn),速度太慢了因為決定將其改成多線程爬蟲,歡迎繼續(xù)閱讀后續(xù)的此系列文章。
最近發(fā)現(xiàn)有個電影下載網(wǎng)站叫做比特大雄,下了幾部電影之后,打算寫個爬蟲把網(wǎng)站的電影信息都爬取下來。
一開始思路是這樣的,從首頁開始,解析首頁的所有鏈接,如果這個鏈接是電影詳情頁的鏈接,就將其html解析成想要的電影信息,如果不是電影詳情頁的鏈接,就將其加入到待爬取的URL list里,等待后續(xù)繼續(xù)從這個url的頁面爬取更多的鏈接。
直接給出代碼如下(含注釋):
import requests import re import time # 網(wǎng)站首頁 base_url = r"https://www.btdx8.com/" # 爬取到的新url會繼續(xù)加入到這個list里 total_url_list = [base_url] # 存放已經(jīng)爬取過的url used_url_list = [] # 存放是電影詳情頁的url movie_url_list = [] # 從html文本中抓取url的正則表達式 url_reg = "href="(https://.*?)"" # 判斷url是不是電影詳情頁url的正則表達式 movie_url_reg = "https://www.btdx8.com/torrent/.*?html" while 1: # 取出url list中的第一個url url = total_url_list.pop(0) print("Current Url:", url) print() try: # 獲取url的html text = requests.get(url).text # 從html中找到所有的url鏈接 new_urls = re.findall(url_reg, text) # 如果是之前沒出現(xiàn)過的url,將其放入到total_url_list用于后續(xù)繼續(xù)爬取 for n in new_urls: if n not in total_url_list + used_url_list + movie_url_list: total_url_list.append(n) used_url_list.append(url) # 如果當前url是電影詳情頁的鏈接,將其存入movie_url_list if re.match(movie_url_reg, url): movie_url_list.append(url) print("Current url succeed") time.sleep(0.1) except: print("Current url failed") print("Total: %s, Used: %s, Movie: %s" % (len(total_url_list), len(used_url_list), len(movie_url_list))) # 如果total_url_list已經(jīng)為空了就停止循環(huán) if len(total_url_list) == 0: break # 打印所有的movie url print(movie_url_list)
這個代碼肯定是有些問題的,比如total_url_list可能永遠都不為空,循環(huán)無法停止,不過可以先跑一跑看看情況。結(jié)果我就發(fā)現(xiàn),速度太慢了!因為決定將其改成多線程爬蟲,歡迎繼續(xù)閱讀后續(xù)的此系列文章。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42298.html
摘要:繼續(xù)看上一段循環(huán)的代碼,是遍歷,將已經(jīng)掛了的線程去除掉,那么在這個中線程什么情況下會死掉就是類中的方法中的這段代碼如果為空會循環(huán),此時對應(yīng)的線程會死掉。此時主函數(shù)的循環(huán)將死掉的線程去除,在線程數(shù)不足個的情況下,接下來的循環(huán)繼續(xù)制造新的線程。 上一篇文章: 從0開始寫一個多線程爬蟲(1) 我們用繼承Thread類的方式來改造多線程爬蟲,其實主要就是把上一篇文章的代碼寫到線程類的run方...
摘要:所以與多線程相比,線程的數(shù)量越多,協(xié)程性能的優(yōu)勢越明顯。值得一提的是,在此過程中,只有一個線程在執(zhí)行,因此這與多線程的概念是不一樣的。 真正有知識的人的成長過程,就像麥穗的成長過程:麥穗空的時候,麥子長得很快,麥穗驕傲地高高昂起,但是,麥穗成熟飽滿時,它們開始謙虛,垂下麥芒。 ——蒙田《蒙田隨筆全集》 上篇論述了關(guān)于python多線程是否是雞肋的問題,得到了一些網(wǎng)友的認可,當然也有...
摘要:一般用進程池維護,的設(shè)為數(shù)量。多線程爬蟲多線程版本可以在單進程下進行異步采集,但線程間的切換開銷也會隨著線程數(shù)的增大而增大。異步協(xié)程爬蟲引入了異步協(xié)程語法。 Welcome to the D-age 對于網(wǎng)絡(luò)上的公開數(shù)據(jù),理論上只要由服務(wù)端發(fā)送到前端都可以由爬蟲獲取到。但是Data-age時代的到來,數(shù)據(jù)是新的黃金,毫不夸張的說,數(shù)據(jù)是未來的一切?;诮y(tǒng)計學(xué)數(shù)學(xué)模型的各種人工智能的出現(xiàn)...
摘要:優(yōu)雅的使用框架,爬取唐詩別苑網(wǎng)的詩人詩歌數(shù)據(jù)同時在幾種動態(tài)加載技術(shù)中對比作選擇雖然差不多兩年沒有維護,但其本身是一個優(yōu)秀的爬蟲框架的實現(xiàn),源碼中有很多值得參考的地方,特別是對爬蟲多線程的控制。 優(yōu)雅的使用WebMagic框架,爬取唐詩別苑網(wǎng)的詩人詩歌數(shù)據(jù) 同時在幾種動態(tài)加載技術(shù)(HtmlUnit、PhantomJS、Selenium、JavaScriptEngine)中對比作選擇 We...
閱讀 3333·2021-09-08 09:45
閱讀 1264·2019-08-30 15:53
閱讀 1542·2019-08-30 14:12
閱讀 990·2019-08-29 17:01
閱讀 2583·2019-08-29 15:35
閱讀 407·2019-08-29 13:09
閱讀 1984·2019-08-29 12:32
閱讀 3096·2019-08-26 18:37