【python】研究与实践 python线程池爬取某网的接口视频资源入库

研究与实践 python线程池爬取某网的接口视频资源入库


Python(派森),它是一个简单的、解释型的、交互式的、可移植的、面向对象的超高级语言。这就是对Python语言的最简单的描述。
python 是一种解释性脚本语言,不像c++/java那样的高级语言,需要编译成字节码之后才能运行,python可以边运行边解释。
python主要应用于以下几个领域:
web开发,基于python产生了许多优秀的web框架,许许多多伟大的开源社区的程序员为它们贡献了诸多的开源库,
使得开发起来十分便捷。爬虫开发,实际上这个只是一个小小的应用,基于python的http库有很多, 
比如常见的httplib,urllib2,requests等,都很好的封装了http协议中的post,get等方法,也很方便的能够模拟浏览
器去实现自己想要的功能,并且,对网页的解析也有诸多工具可以使用,如beautifulsoup等。科学计算,不得不提是
python在科学计算领域也应用越来越广,如物理学领域,各种的实验数据的处理以及相关实验模拟等,机器学习领域
也产生了诸多的开源库,如sklearn,里面集成了机器学习领域常见的算法,接口良好,文档丰富,也有最近十分火热
的Deep Learning的开源库,如theano。高性能服务器后端,高性能不是说python执行有多快,其实python还是比
较慢的,但是在开发高并发,高吞吐率的服务器的时候,还是具有自己独特的优势。还有一切边边角角的应用,
比如开发界面程序,QT也提供了python的支持,因为python的开源库中包括了对c/c++ lib库的调用。
# -*-coding:utf8-*-

from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import requests
import time
import sys
import re
import json
import MySQLdb

reload(sys)

sys.setdefaultencoding('utf-8')

urls = []

head = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'
}

time1 = time.time()


for i in range(1,10000):
    url = 'https://domain.com/video/' + str(i)
    urls.append(url)

def spider(url):
    html = requests.get(url, headers=head)
    json_url = url
    jsoncontent = requests.get(json_url, headers=head).content
    jsDict = json.loads(jsoncontent)
    if jsDict['code'] == 0:
        jsData = jsDict['data']
        vtitle = jsData['vtitle']
        play_count = jsData['play_count']
        date_add = jsData['date_add']

        try:
            conn = MySQLdb.connect(host='localhost', user='', passwd='', 
                                   port=3306, charset='utf8')
            cur = conn.cursor()
            conn.select_db('db')
            cur.execute(
                'INSERT INTO videos( url, json, vtitle, play_count,datetime) VALUES '
                '(%s,%s,%s,%s,%s)',
                [  str(json_url), str(jsData), vtitle,play_count,date_add])
            conn.commit()
            print "Succeed: " + str(urls)
        except MySQLdb.Error, e:
            print "Mysql Error %d: %s" % (e.args[0], e.args[1])
    else:
        print "Error_Json: " + url


pool = ThreadPool(10)
# results = pool.map(spider, urls)
try:
    results = pool.map(spider, urls)
except Exception, e:
    # print 'ConnectionError'
    print e
    time.sleep(300)
    results = pool.map(spider, urls)

pool.close()
pool.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值