异步爬虫:
- 基于线程池
- 基于单线程+多任务的异步爬虫
线程池
-
from multiprocessing.dummy import Pool
-
map(callback,alist)
- 可以使用callback对alist中的每一个元素进行指定形式的异步操作
-
为了体现效果,我们自己搭建一个web服务
- Flask的基本使用
- 环境安装 pip install flask
- 创建一个py源文件
test.html
自定义一个简单网页
# -*- coding: utf-8 -*-
from flask import Flask
from flask import render_template
import time
#实例化一个app
app = Flask(__name__)
# 创建视图函数&路由地址
@app.route("/gpc") #路由地址
def index_1(): # 视图函数
time.sleep(2)#为了表示堵塞效果我们定义一个相应时间
return render_template("test.html")
@app.route("/una")
def index_2():
time.sleep(2)
return render_template("test.html")
@app.route("/python")
def index_3():
time.sleep(2)
return render_template("test.html")
if __name__=="__main__":
#debug=True 表示开启调试模式:服务器端代码被修改后按下保存键会自动重启服务
app.run(debug=True)
同步爬虫
import requests
import time
def get_request(url):
page_text = requests.get(url=url).text
return len(page_text)
#同步代码总耗时: 6.035839080810547秒
if __name__ == "__main__":
start = time.time()#开始时间
urls = [
"http://127.0.0.1:5000/gpc",
"http://127.0.0.1:5000/una",
"http://127.0.0.1:5000/python"]
for url in urls:
res = get_request(url)
print(res)
print("总耗时:",time.time()-start)
异步爬虫
import requests
from multiprocessing.dummy import Pool #线程池
import time
def get_request(url):
page_text = requests.get(url=url).text
return len(page_text)
urls = [
"http://127.0.0.1:5000/gpc",
"http://127.0.0.1:5000/una",
"http://127.0.0.1:5000/python"]
# 异步代码
if __name__ == "__main__":
start <