提取码: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