摘要:最近發(fā)現(xiàn)有個(gè)電影下載網(wǎng)站叫做比特大雄,下了幾部電影之后,打算寫個(gè)爬蟲把網(wǎng)站的電影信息都爬取下來。結(jié)果我就發(fā)現(xiàn),速度太慢了因?yàn)闆Q定將其改成多線程爬蟲,歡迎繼續(xù)閱讀后續(xù)的此系列文章。
最近發(fā)現(xiàn)有個(gè)電影下載網(wǎng)站叫做比特大雄,下了幾部電影之后,打算寫個(gè)爬蟲把網(wǎng)站的電影信息都爬取下來。
一開始思路是這樣的,從首頁開始,解析首頁的所有鏈接,如果這個(gè)鏈接是電影詳情頁的鏈接,就將其html解析成想要的電影信息,如果不是電影詳情頁的鏈接,就將其加入到待爬取的URL list里,等待后續(xù)繼續(xù)從這個(gè)url的頁面爬取更多的鏈接。
直接給出代碼如下(含注釋):
import requests import re import time # 網(wǎng)站首頁 base_url = r"https://www.btdx8.com/" # 爬取到的新url會(huì)繼續(xù)加入到這個(gè)list里 total_url_list = [base_url] # 存放已經(jīng)爬取過的url used_url_list = [] # 存放是電影詳情頁的url movie_url_list = [] # 從html文本中抓取url的正則表達(dá)式 url_reg = "href="(https://.*?)"" # 判斷url是不是電影詳情頁url的正則表達(dá)式 movie_url_reg = "https://www.btdx8.com/torrent/.*?html" while 1: # 取出url list中的第一個(gè)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) # 如果當(dāng)前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)
這個(gè)代碼肯定是有些問題的,比如total_url_list可能永遠(yuǎn)都不為空,循環(huán)無法停止,不過可以先跑一跑看看情況。結(jié)果我就發(fā)現(xiàn),速度太慢了!因?yàn)闆Q定將其改成多線程爬蟲,歡迎繼續(xù)閱讀后續(xù)的此系列文章。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42298.html
摘要:繼續(xù)看上一段循環(huán)的代碼,是遍歷,將已經(jīng)掛了的線程去除掉,那么在這個(gè)中線程什么情況下會(huì)死掉就是類中的方法中的這段代碼如果為空會(huì)循環(huán),此時(shí)對(duì)應(yīng)的線程會(huì)死掉。此時(shí)主函數(shù)的循環(huán)將死掉的線程去除,在線程數(shù)不足個(gè)的情況下,接下來的循環(huán)繼續(xù)制造新的線程。 上一篇文章: 從0開始寫一個(gè)多線程爬蟲(1) 我們用繼承Thread類的方式來改造多線程爬蟲,其實(shí)主要就是把上一篇文章的代碼寫到線程類的run方...
摘要:最近看前端都展開了幾場(chǎng)而我大知乎最熱語言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來說, 基礎(chǔ)大概也就夠用了...
摘要:所以與多線程相比,線程的數(shù)量越多,協(xié)程性能的優(yōu)勢(shì)越明顯。值得一提的是,在此過程中,只有一個(gè)線程在執(zhí)行,因此這與多線程的概念是不一樣的。 真正有知識(shí)的人的成長過程,就像麥穗的成長過程:麥穗空的時(shí)候,麥子長得很快,麥穗驕傲地高高昂起,但是,麥穗成熟飽滿時(shí),它們開始謙虛,垂下麥芒。 ——蒙田《蒙田隨筆全集》 上篇論述了關(guān)于python多線程是否是雞肋的問題,得到了一些網(wǎng)友的認(rèn)可,當(dāng)然也有...
摘要:一般用進(jìn)程池維護(hù),的設(shè)為數(shù)量。多線程爬蟲多線程版本可以在單進(jìn)程下進(jìn)行異步采集,但線程間的切換開銷也會(huì)隨著線程數(shù)的增大而增大。異步協(xié)程爬蟲引入了異步協(xié)程語法。 Welcome to the D-age 對(duì)于網(wǎng)絡(luò)上的公開數(shù)據(jù),理論上只要由服務(wù)端發(fā)送到前端都可以由爬蟲獲取到。但是Data-age時(shí)代的到來,數(shù)據(jù)是新的黃金,毫不夸張的說,數(shù)據(jù)是未來的一切。基于統(tǒng)計(jì)學(xué)數(shù)學(xué)模型的各種人工智能的出現(xiàn)...
摘要:優(yōu)雅的使用框架,爬取唐詩別苑網(wǎng)的詩人詩歌數(shù)據(jù)同時(shí)在幾種動(dòng)態(tài)加載技術(shù)中對(duì)比作選擇雖然差不多兩年沒有維護(hù),但其本身是一個(gè)優(yōu)秀的爬蟲框架的實(shí)現(xiàn),源碼中有很多值得參考的地方,特別是對(duì)爬蟲多線程的控制。 優(yōu)雅的使用WebMagic框架,爬取唐詩別苑網(wǎng)的詩人詩歌數(shù)據(jù) 同時(shí)在幾種動(dòng)態(tài)加載技術(shù)(HtmlUnit、PhantomJS、Selenium、JavaScriptEngine)中對(duì)比作選擇 We...
閱讀 3288·2021-09-08 09:45
閱讀 1251·2019-08-30 15:53
閱讀 1522·2019-08-30 14:12
閱讀 981·2019-08-29 17:01
閱讀 2568·2019-08-29 15:35
閱讀 394·2019-08-29 13:09
閱讀 1965·2019-08-29 12:32
閱讀 3083·2019-08-26 18:37