国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解

這篇具有很好參考價(jià)值的文章主要介紹了Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言
前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家:https://www.captainbed.cn/z

「個人網(wǎng)站」:雪碧的個人網(wǎng)站
Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言

ChatGPT體驗(yàn)地址

Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言

爬蟲

爬蟲是指一種自動化程序,能夠模擬人類用戶在互聯(lián)網(wǎng)上瀏覽網(wǎng)頁、抓取網(wǎng)頁內(nèi)容、提取數(shù)據(jù)等操作。爬蟲通常用于搜索引擎、數(shù)據(jù)挖掘、網(wǎng)絡(luò)分析、競爭情報(bào)、用戶行為分析等領(lǐng)域。
Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言
我們以爬取某個用戶的博文列表并存儲到文件中實(shí)現(xiàn)多線程爬蟲為例,帶大家體驗(yàn)爬蟲的魅力

獲取cookie

首先我們在爬取網(wǎng)站的時候首先獲取cookie
Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言

拿我的博客主頁為例,用F12打開控制臺,點(diǎn)擊網(wǎng)絡(luò),找到cookie
Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言
創(chuàng)建一個cookie文件,復(fù)制進(jìn)去
然后從給定的cookie_path文件中讀取cookie信息,并將其存儲在一個字典中。函數(shù)返回這個字典。
具體如下

def get_headers(cookie_path:str):
cookies = {}
with open(cookie_path, "r", encoding="utf-8") as f:
cookie_list = f.readlines()
for line in cookie_list:
cookie = line.split(":")
cookies[cookie[0]] = str(cookie[1]).strip()
return cookies

網(wǎng)站爬取與啟動

CSDN爬蟲

class CSDN(object):
def init(self, username, folder_name, cookie_path):
# self.headers = {
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
# }
self.headers = get_headers(cookie_path)
self.s = requests.Session()
self.username = username
self.TaskQueue = TaskQueue()
self.folder_name = folder_name
self.url_num = 1
  1. headers: 這是一個字典,用于存儲請求頭信息。
  2. s: 這是一個會話對象,用于保持與CSDN網(wǎng)站的連接。
  3. username: 這是一個字符串,表示CSDN用戶的用戶名。
  4. TaskQueue: 這是一個任務(wù)隊(duì)列對象,用于管理待訪問的URL。
  5. folder_name: 這是一個字符串,表示保存爬取結(jié)果的文件夾名稱。
  6. _name: 這是一個整數(shù),表示當(dāng)前保存的文件夾編號。
  7. _num: 這是一個整數(shù),表示當(dāng)前爬取的頁面編號。

爬蟲啟動

def start(self):
	num = 0
	articles = [None]
	while len(articles) > 0:
		num += 1
		url = u'https://blog.csdn.net/' + self.username + '/article/list/' + str(num)
		response = self.s.get(url=url, headers=self.headers)
		html = response.text
		soup = BeautifulSoup(html, "html.parser")
		articles = soup.find_all('div', attrs={"class":"article-item-box csdn-tracking-statistics"})
		for article in articles:
			article_title = article.a.text.strip().replace('        ',':')
			article_href = article.a['href']
			with ensure_memory(sys.getsizeof(self.TaskQueue.UnVisitedList)):
				self.TaskQueue.InsertUnVisitedList([article_title, article_href])
  1. 初始化一個變量num,用于表示當(dāng)前訪問的文章頁碼。
  2. 初始化一個列表articles,用于存儲待處理的文章信息。
  3. 使用一個while循環(huán),當(dāng)articles列表中的文章數(shù)量大于0時,執(zhí)行循環(huán)體。
  4. 更新num變量,表示當(dāng)前訪問的文章頁碼。
  5. 構(gòu)造一個URL,該URL包含當(dāng)前用戶名、文章列表和頁碼。
  6. 使用requests庫發(fā)送請求,并獲取響應(yīng)。
  7. 使用BeautifulSoup庫解析HTML內(nèi)容,并提取相關(guān)的文章信息。
  8. 遍歷提取到的文章列表,提取文章標(biāo)題和鏈接。
  9. 將文章標(biāo)題和鏈接插入到任務(wù)隊(duì)列TaskQueue的未訪問列表中。

將爬取內(nèi)容存到文件中

  1. 打印爬取開始的信息。
  2. 計(jì)算并獲取存儲博文列表的文件路徑。
  3. 使用open函數(shù)以寫入模式打開文件,并設(shè)置文件編碼為utf-8。
  4. 寫入文件頭,包括用戶名和博文列表。
  5. 遍歷任務(wù)隊(duì)列TaskQueue中的未訪問列表,將每篇文章的標(biāo)題和鏈接寫入文件。
  6. 在每篇文章標(biāo)題和鏈接之間添加一個空行,以提高可讀性。
  7. 更新一個變量_num,用于表示當(dāng)前已寫入的文章序號。

代碼如下

def write_readme(self):
	print("+"*100)
	print("[++] 開始爬取 {} 的博文 ......".format(self.username))
	print("+"*100)
	reademe_path = result_file(self.username,file_name="README.md",folder_name=self.folder_name)
	with open(reademe_path,'w', encoding='utf-8') as reademe_file:
		readme_head = "# " + self.username + " 的博文\n"
		reademe_file.write(readme_head)
		for [article_title,article_href] in self.TaskQueue.UnVisitedList[::-1]:
				text = str(self.url_num) + '. [' + article_title + ']('+ article_href +')\n'
				reademe_file.write(text)
				self.url_num += 1
	self.url_num = 1

列表文件生成之后,我們要對每一個鏈接進(jìn)行處理

def get_all_articles(self):
	try:
		while True:
			[article_title,article_href] = self.TaskQueue.PopUnVisitedList()
			try:
				file_name = re.sub(r'[\/::*?"<>|]','-', article_title) + ".md"
				artical_path = result_file(folder_username=self.username, file_name=file_name, folder_name=self.folder_name)
				md_head = "# " + article_title + "\n"
				md = md_head + self.get_md(article_href)
				print("[++++] 正在處理URL:{}".format(article_href))
				with open(artical_path, "w", encoding="utf-8") as artical_file:
					artical_file.write(md)
			except Exception:
				print("[----] 處理URL異常:{}".format(article_href))
			self.url_num += 1
	except Exception:
		pass
  1. 從任務(wù)隊(duì)列TaskQueue中彈出未訪問的文章鏈接和標(biāo)題。
  2. 嘗試獲取一個文件名,該文件名由文章標(biāo)題生成,以避免文件名中的特殊字符。
  3. 計(jì)算并獲取存儲文章的文件路徑。
  4. 創(chuàng)建一個Markdown文件頭,包括文章標(biāo)題。
  5. 獲取文章內(nèi)容,并將其添加到Markdown文件頭。
  6. 將處理后的Markdown內(nèi)容寫入文件。
  7. 打印正在處理的URL。
  8. 更新一個變量_num,用于表示已處理的文章數(shù)量。

多線程爬蟲

實(shí)現(xiàn)多線程爬蟲,以提高爬取速度。在循環(huán)中,會不斷地創(chuàng)建新的線程來處理任務(wù)隊(duì)列中的任務(wù),直到任務(wù)隊(duì)列為空。這樣可以充分利用計(jì)算機(jī)的多核性能,提高爬取效率。

def muti_spider(self, thread_num):
	while self.TaskQueue.getUnVisitedListLength() > 0:
		thread_list = []
		for i in range(thread_num):
			th = threading.Thread(target=self.get_all_articles)
			thread_list.append(th)
		for th in thread_list:
			th.start()

我們在多線程爬蟲的時候,要保證系統(tǒng)有足夠的內(nèi)存空間。通過使用contextlib庫的contextmanager裝飾器,可以輕松地實(shí)現(xiàn)上下文管理,確保內(nèi)存分配和釋放的正確性。

lock = threading.Lock()
total_mem= 1024 * 1024 * 500 #500MB spare memory
@contextlib.contextmanager
def ensure_memory(size):
    global total_mem
    while 1:
        with lock:
            if total_mem > size:
                total_mem-= size
                break
        time.sleep(5)
    yield 
    with lock:
        total_mem += size

__enter__方法中,使用with lock語句模擬加鎖,確保在執(zhí)行內(nèi)存分配操作時,不會發(fā)生競爭條件。然后判斷當(dāng)前系統(tǒng)的總內(nèi)存是否大于所需分配的內(nèi)存空間,如果大于,則減少總內(nèi)存,并跳出循環(huán)。

選擇要爬取的用戶

def spider_user(username: str, cookie_path:str, thread_num: int = 10, folder_name: str = "articles"):
	if not os.path.exists(folder_name):
		os.makedirs(folder_name)
	csdn = CSDN(username, folder_name, cookie_path)
	csdn.start()
	th1 = threading.Thread(target=csdn.write_readme)
	th1.start()
	th2 = threading.Thread(target=csdn.muti_spider, args=(thread_num,))
	th2.start()
  1. 檢查文件夾folder_name是否存在,如果不存在,則創(chuàng)建該文件夾。
  2. 創(chuàng)建一個CSDN對象csdn,用于模擬用戶登錄和爬取文章。
  3. 創(chuàng)建一個線程th1,目標(biāo)為_readme
  4. 創(chuàng)建一個線程th2,目標(biāo)為_spider,并傳入?yún)?shù)(thread_num,),用于指定線程數(shù)量。

這個函數(shù)的目的是爬取指定用戶的CSDN博客文章,并將文章保存到文件夾folder_name中。通過創(chuàng)建線程,可以實(shí)現(xiàn)多線程爬蟲,提高爬取速度。

線程池

線程池存儲爬蟲代理 IP 的數(shù)據(jù)庫或集合。在網(wǎng)絡(luò)爬蟲中,由于目標(biāo)網(wǎng)站可能會針對同一 IP 地址的訪問頻率進(jìn)行限制,因此需要使用池來存儲多個代理 IP 地址,以實(shí)現(xiàn) IP 地址的輪換和代理。池可以提高爬蟲的穩(wěn)定性和效率,避免因?yàn)?IP 地址被封禁而導(dǎo)致的爬蟲失效。
爬蟲和池是爬蟲領(lǐng)域中不可或缺的概念,池能夠提高爬蟲的穩(wěn)定性和效率,同時幫助爬蟲更好地適應(yīng)目標(biāo)的反爬蟲策略。
Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解,粉絲福利活動,python,爬蟲,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-800400.html

到了這里,關(guān)于Python多線程爬蟲——數(shù)據(jù)分析項(xiàng)目實(shí)現(xiàn)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python多線程爬取鏈家房源,保存表格,實(shí)現(xiàn)數(shù)據(jù)可視化分析!

    使用Python來爬取二手房源數(shù)據(jù),并保存表格,實(shí)現(xiàn)數(shù)據(jù)分析! Python 3.8 Pycharm 模塊 ? 創(chuàng)建文件 ? 發(fā)送請求, 模擬瀏覽器 對于 url地址 發(fā)送請求 模擬瀏覽器 ? 請求網(wǎng)址/網(wǎng)站 ? 發(fā)送請求 ? 獲取數(shù)據(jù), 獲取網(wǎng)頁源代碼 獲取服務(wù)器返回響應(yīng)數(shù)據(jù) 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容

    2024年02月05日
    瀏覽(27)
  • Python北京二手房源爬蟲數(shù)據(jù)可視化分析大屏全屏系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 開題報(bào)告

    ?博主介紹 :《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識視頻課程,免費(fèi) 項(xiàng)目配有對應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月04日
    瀏覽(20)
  • Python天津二手房源爬蟲數(shù)據(jù)可視化分析大屏全屏系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 開題報(bào)告

    ?博主介紹 :《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識視頻課程,免費(fèi) 項(xiàng)目配有對應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月05日
    瀏覽(30)
  • Python上海二手房源爬蟲數(shù)據(jù)可視化分析大屏全屏系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 開題報(bào)告

    ?博主介紹 :《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識視頻課程,免費(fèi) 項(xiàng)目配有對應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月05日
    瀏覽(23)
  • Python杭州二手房源爬蟲數(shù)據(jù)可視化分析大屏全屏系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)和開題報(bào)告

    Python杭州二手房源爬蟲數(shù)據(jù)可視化分析大屏全屏系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)和開題報(bào)告

    ?博主介紹 :《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識視頻課程,免費(fèi) 項(xiàng)目配有對應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月04日
    瀏覽(17)
  • 基于Python的網(wǎng)絡(luò)爬蟲及數(shù)據(jù)處理---智聯(lián)招聘人才招聘特征分析與挖掘的算法實(shí)現(xiàn)

    基于Python的網(wǎng)絡(luò)爬蟲及數(shù)據(jù)處理---智聯(lián)招聘人才招聘特征分析與挖掘的算法實(shí)現(xiàn)

    收藏和點(diǎn)贊,您的關(guān)注是我創(chuàng)作的動力 ??隨著科學(xué)技術(shù)的發(fā)展,人類進(jìn)入了互聯(lián)網(wǎng)時代,不僅數(shù)據(jù)量龐大,而且數(shù)據(jù)種類繁多,Python簡單易學(xué), 語法清晰,在數(shù)據(jù)操作方面有著一定優(yōu)勢,成為了數(shù)據(jù)采集和可視化領(lǐng)域的熱門語言。本論文主要是使用Python來作為開發(fā)語言,并

    2024年02月03日
    瀏覽(22)
  • 【Python爬蟲與數(shù)據(jù)分析】爬蟲selenium工具

    【Python爬蟲與數(shù)據(jù)分析】爬蟲selenium工具

    目錄 一、selenium工具安裝 二、selenium打開瀏覽器測試 三、無頭瀏覽器 四、元素定位 五、頁面滑動 六、按鍵、填寫登錄表單 七、頁面切換 八、實(shí)戰(zhàn)爬取當(dāng)當(dāng)網(wǎng)書籍?dāng)?shù)據(jù) Selenium是Web的自動化測試工具,為網(wǎng)站自動化測試而開發(fā),Selenium可以直接運(yùn)行在瀏覽器上,它支持所有主

    2024年02月15日
    瀏覽(21)
  • 大數(shù)據(jù)輿情評論數(shù)據(jù)分析:基于Python微博輿情數(shù)據(jù)爬蟲可視化分析系統(tǒng)(NLP情感分析+爬蟲+機(jī)器學(xué)習(xí))

    大數(shù)據(jù)輿情評論數(shù)據(jù)分析:基于Python微博輿情數(shù)據(jù)爬蟲可視化分析系統(tǒng)(NLP情感分析+爬蟲+機(jī)器學(xué)習(xí))

    基于Python的微博輿情數(shù)據(jù)爬蟲可視化分析系統(tǒng),結(jié)合了NLP情感分析、爬蟲技術(shù)和機(jī)器學(xué)習(xí)算法。該系統(tǒng)的主要目標(biāo)是從微博平臺上抓取實(shí)時數(shù)據(jù),對這些數(shù)據(jù)進(jìn)行情感分析,并通過可視化方式呈現(xiàn)分析結(jié)果,以幫助用戶更好地了解輿情動向和情感傾向。系統(tǒng)首先利用爬蟲技術(shù)

    2024年04月15日
    瀏覽(29)
  • 大數(shù)據(jù)爬蟲分析基于Python+Django旅游大數(shù)據(jù)分析系統(tǒng)

    大數(shù)據(jù)爬蟲分析基于Python+Django旅游大數(shù)據(jù)分析系統(tǒng)

    歡迎大家點(diǎn)贊、收藏、關(guān)注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 ?? 基于Python和Django的旅游大數(shù)據(jù)分析系統(tǒng)是一種使用Python編程語言和Django框架開發(fā)的系統(tǒng),用于處理和分析旅游行業(yè)的大數(shù)據(jù),為旅游從業(yè)者和決策者提供有關(guān)旅游趨勢、客戶需求、市場競爭

    2024年02月03日
    瀏覽(30)
  • 【Python爬蟲與數(shù)據(jù)分析】基本數(shù)據(jù)結(jié)構(gòu)

    目錄 一、概述 二、特性 三、列表 四、字典 Python基本數(shù)據(jù)結(jié)構(gòu)有四種,分別是列表、元組、集合、字典 ,這是Python解釋器默認(rèn)的數(shù)據(jù)結(jié)構(gòu),可以直接使用,無需像C語言那樣需要手搓或像C++那樣需要聲明STL頭文件。 Python的數(shù)據(jù)結(jié)構(gòu)非常靈活,對數(shù)據(jù)類型沒有限制,即一個數(shù)

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包