python web框架 多线程_自制多线程python爬虫框架

提取码:i92q陈抟老祖/简单的多线程python爬虫框架​gitee.com

注:框架的所有代码都在main.py中

这个框架采用多线程的方式,爬虫效率比单线程最多20倍;并具有检查爬虫状态的线程,可检查线程数、爬取进度、预计爬取时间;并且非常简单只有百行代码,适合初学者学习。

流程图

使用时只需要修改三处代码,下面以爬取王者荣耀英雄属性为例

首先引入requests、BeautifulSoup模块

修改getUrls()函数

def getUrls():

#得到url列表

response=requests.get(url='https://pvp.qq.com/web201605/herolist.shtml')

response.encoding='gbk'

# print(response.text)

html=BeautifulSoup(response.text,'lxml')

ul=html.find('ul',class_='herolist clearfix')

# print(ul)

aEs=ul.find_all('a')

# for a in aEs:

# print(a['href'])

hrefs=list(map(lambda x:'https://pvp.qq.com/web201605/'+x['href'],aEs))

# print(len(hrefs))

return hrefs

修改spider()函数

def spider(url):

#使用前必须声明全局变量

global gLock

global times

global heros

#以下用来数据提取

response=requests.get(url=url)

response.encoding='gbk'

html=BeautifulSoup(response.text,'lxml')

cover=html.find('div',class_='cover')

# name=cover.find('h2',class_='cover-name').string

# print(name)

ibars=cover.find_all('i',class_='ibar')

# print(int(re.findall(r'\d+\d+',ibars[0]['style'])[0]))

attributes={

'名字':cover.find('h2',class_='cover-name').string,

'生存能力':int(re.findall(r'\d+\d+',ibars[0]['style'])[0]),

'攻击伤害':int(re.findall(r'\d+\d+',ibars[1]['style'])[0]),

'技能效果':int(re.findall(r'\d+\d+',ibars[2]['style'])[0]),

'上手难度':int(re.findall(r'\d+\d+',ibars[3]['style'])[0])

}

#以下用来数据存储

gLock.acquire()

heros.append(attributes)

#times用来计数

times+=1

gLock.release()

最后修改main

heros=[]

if __name__ == "__main__":

startTime=time.time()

spiderThread(getUrls()*10)

print(heros)

print('共用了%d秒'%(time.time()-startTime))

成功爬取

显然这个框架非常简单

作者:li crifan

链接:https://www.zhihu.com/question/19899608/answer/634724828

你可能感兴趣的:(python,web框架,多线程)