python爬蟲學習(二十)非同步爬蟲 執行緒池

2021-10-03 18:22:20 字數 2155 閱讀 4282

# import time

# #使用單執行緒序列的方式執行

# def get_page(str):

# time.sleep(2)

# name_list = ['xiaozi','aa','bb','cc']

# start_time = time.time()

## for i in range(len(name_list)):

# get_page(name_list[i])

## end_time =time.time()

# print('%d second'% (end_time-start_time))

# import time

# #匯入執行緒池模組對應的類

# from multiprocessing.dummy import pool

# #使用執行緒池的方式執行

# start_time = time.time()

# def get_page(str):

# time.sleep(2)

## name_list = ['xiaozi','aa','bb','cc']

## #例項化乙個執行緒池物件

# pool = pool(4)

# #將列表中每乙個列表元素傳遞給get_page進行處理

# pool.map(get_page,name_list)

## end_time = time.time()

# print(end_time-start_time)

import requests

from lxml import etree

import re

from multiprocessing.dummy import pool

headers=

#原則:執行緒池處理的是阻塞且好事的操作

#對下述uel發起請求解析出現的詳情頁url和視屏的名稱

url = ''

page_text = requests.get(url=url,headers= headers).text

tree = etree.html(page_text)

li_list = tree.xpath('//ul[@id="listvideolistul"]/li')

#儲存所有視屏的鏈結和名字

urls =

for li in li_list:

detail_url = ''+ li.xpath('./div/a/@href')[0]

name = li.xpath('./div/a/div[2]/text()')[0]+'.mp4'

#print(detail_url,name)

#對詳情頁url請求

detail_page_text = requests.get(url=detail_url,headers=headers).text

#從詳情頁中解析資料

#var contid="1659808",livestatusurl="livestatus.jsp",livesta="",playsta="1",autoplay=!1,isliving=!1,isvrvideo=!1,hdflvurl="",sdflvurl="",hdurl="",sdurl="",ldurl="",srcurl="",vdourl=srcurl,skinres="",videocdn="";

ex = 'srcurl="(.*?)",vdourl'

video_url = re.findall(ex,detail_page_text)[0]

#print(video_url)

dic =

def get_video_date(dic):

url = dic['url']

data = requests.get(url=url,headers= headers).content

#持久化儲存

with open(dic['name'],'wb') as fp:

fp.write(data)

#使用執行緒池對視屏資料進行請求

pool = pool(4)

pool.map(get_video_date,urls)

pool.close()

pool.join()

Python 爬蟲練習專案 非同步載入爬取

專案 from bs4 import beautifulsoup import requests url prefix infos 獲取單個頁面資料 def getapage url,data none web data requests.get url soup beautifulsoup web...

python爬蟲 非同步爬蟲

壞處 無法無限制的開啟多執行緒或者多程序。執行緒池 程序池 適當使用 使用非同步實現高效能的資料爬取操作 人多力量大 環境安裝 pip install aiohttp 使用該模組中的clientsession 2表示同時存在兩個協程 pool pool 2 urls for i in range 1...

python爬蟲反爬 爬蟲怎麼測試反爬?

有沒有反爬,如果你沒有用爬蟲抓取過,你是不可能知道的。就算要測試,你還要嘗試不同的delay。如果設定的 delay 在 的反爬頻率外,那就測不出來。如果在頻率內,那就被封。或者封ip,或者封賬號。如果一定要測出來,就簡單粗暴的方法,你不要設定delay,就不間斷的抓,最後出現兩種情況,1 有反爬,...