#coding: utf8
import re #正则表达式模块
import urllib2 #获取URLs的组件
import time
from Queue import Queue
import threading, errno, datetime
import json
import requests #Requests is an Apache2 Licensed HTTP library
import MySQLdb as mdb
DB_HOST = '127.0.0.1'
DB_USER = 'root'
DB_PASS = ''
#以下是正则匹配规则
re_start = re.compile(r'start=(\d+)') #\d 表示0-9 任意一个数字 后面有+号 说明这个0-9单个数位出现一到多次 比如21312314
re_uid = re.compile(r'query_uk=(\d+)') #查询编号
re_urlid = re.compile(r'&urlid=(\d+)') #url编号
ONEPAGE = 20 #一页数据量
ONESHAREPAGE = 20 #一页分享连接量
#缺少专辑列表
URL_SHARE = 'http://yun.baidu.com/pcloud/feed/getsharelist?auth_type=1&start={start}&limit=20&query_uk={uk}&urlid={id}' #获得分享列表
URL_FOLLOW = 'http://yun.baidu.com/pcloud/friend/getfollowlist?query_uk={uk}&limit=20&start={start}&urlid={id}' #获得订阅列表
URL_FANS = 'http://yun.baidu.com/pcloud/friend/getfanslist?query_uk={uk}&limit=20&start={start}&urlid={id}' # 获取关注列表
QNUM = 1000
hc_q = Queue(20) #请求队列
hc_r = Queue(QNUM) #接收队列
success = 0
failed = 0
def req_worker(inx): #请求
s = requests.Session() #请求对象
while True:
req_item = hc_q.get() #获得请求项
req_type = req_item[0] #请求类型,分享?订阅?粉丝?
url = req_item[1] #url
r = s.get(url) #通过url获得数据
hc_r.put((r.text, url)) #将获得数据文本和url放入接收队列
print "req_worker#", inx, url #inx 线程编号; url 分析了的 url
def response_worker(): #处理工作
dbconn = mdb.connect(DB_HOST, DB_USER, DB_PASS, 'baiduyun', charset='utf8')
dbcurr = dbconn.cursor()
dbcurr.execute('SET NAMES utf8')
dbcurr.execute('set global wait_timeout=60000') #以上皆是数据库操作
while True:
"""
#正则备注
match() 决定 RE 是否在字符串刚开始的位置匹配
search() 扫描字符串,找到这个 RE 匹配的位置
findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回
finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回
百度页面链接:http://pan.baidu.com/share/link
多线程百度网盘爬虫Python完整源码
最新推荐文章于 2020-11-23 20:31:04 发布
本文将分享一个使用Python编写的多线程百度网盘爬虫的完整源码,详细解析其工作原理和技术实现,帮助读者深入理解Python爬虫及多线程技术在实际项目中的应用。
摘要由CSDN通过智能技术生成