点赞。
好多人包括我,只是工具或者框架的使用者,没有深究原理。原因很多,或者自身能力限制没人带,或者公司平台限制。
设计模式之类的基本功,一问就跪。
不想混成狗了。
@ycwdaaaa 有没有深入的开发基础点推荐下,谢谢。
今天也收到人生的第一个微信打赏 5RMB,心里暖暖的。感谢 **_xy。
贡献下自己写的并发抓取 bilibili 闪图保存本地的爬虫,用了 requests 和 gevent 库
# coding: utf-8
import json
import time
import os
import requests
from gevent import monkey
from gevent.pool import Pool
monkey.patch_socket()
# 下载文件,保存本地
def get_image(image_url, image_name):
file_path = os.path.join("bilibili", image_name + ".gif")
with open(file_path, "wb") as image:
image.write(requests.get(image_url, timeout=20).content)
# 获取下载链接和文件名
def get_image_info(bll_url):
r = requests.get(bll_url, timeout=20)
dict_ = json.loads(r.content)["fix"]
return [(i["icon"], i["title"]) for i in dict_]
def download_asynchronous(url):
time_start = time.time()
if not os.path.exists("bilibili"):
os.mkdir("bilibili")
# 限制并发数
pool = Pool(10)
image_info = get_image_info(url)
[pool.spawn(get_image, *(i)) for i in image_info]
pool.join(timeout=30)
print 'finished , used {0} s, number is {1}'.format(int(time.time() - time_start), len(image_info))
print '-------------------------------------------------'
if __name__ == "__main__":
url = "http://www.bilibili.com/index/index-icon.json"
download_asynchronous(url)
赞,很实用。
#8 楼 @sigma 使用 python 的话,推荐使用库ddt, 就是使用了装饰器。
测试数据是保存在 sqlite3 中,可使用库Flask-restlss封装成接口,可直接调用接口存取测试数据。