【发布时间】:2016-09-21 12:51:07
【问题描述】:
我是 Python 编程新手。
我正在尝试解析来自 Instagram 的 HTTP 请求,以使用正则表达式查找特定单词。
我使用了多处理,但它仍然很慢。我知道我的代码可能看起来很愚蠢,但这是我最好的。
我做错了什么让它变慢了?我需要让它更快地发送多个 HTTP 请求。
import requests
import re
import time
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
Nthreads = cpu_count()*2
pool = Pool(Nthreads)
f = open('full.txt','r')
fw = open('out.txt', 'w')
def findSnap(bio):
regex = 'content=".*sn[a]*p[a-z]*\s*[^a-z0-9].*'
snap = re.findall(regex, bio)
if not snap:
return None
else:
afterSnap = re.sub('content=".*sn[a]*p[a-z]*\s*[^a-z0-9]*\s*','',snap[0])
if afterSnap:
afterSnap = re.findall('[\w_\.-]*',afterSnap)[0]
sftS = afterSnap.split()
if sftS:
return sftS[0]
return None
return None
def loadInfo(url):
#print 'Loading data..'
st = time.time
try:
page = requests.get(url).text.lower()
except Exception as e:
print('Something is wrong!')
return None
snap = findSnap(page)
if snap:
fw.write(snap + '\n')
fw.flush()
print(snap)
else:
return None
return snap
start = time.time()
names = f.read().splitlines()
baseUrl = 'https://instagram.com/'
urls = map(lambda x: baseUrl + x, names)
pool.map(loadInfo, urls)
finish = time.time()
print((finish- start)/60)
fw.close()
【问题讨论】:
-
那么时间结果是多少?
-
“但还是很慢”。相比什么?也许您发出请求的服务器很慢,或者您的互联网连接?然后你可以随心所欲地加速脚本,但这对你没有帮助。请先尝试找出慢的部分。
-
顺便说一句,为什么线程数是 CPU 内核数的两倍?
-
@Evert 说了什么,而且,请告诉您您期望程序有多快,它实际上有多快,以及您的数据集有多大(即
full.txt中的行数)。
标签: python regex python-2.7 python-3.x