【发布时间】:2017-10-12 13:19:16
【问题描述】:
所以我试图同时在多个网站上使用requests 和BeautifulSoup,但由于某种原因我无法使其工作。
这是一个完整的例子:
import multiprocessing as mp
import requests
from bs4 import BeautifulSoup
from random import randint
# Define an output queue
class Spider(object):
"""docstring for Spider"""
def __init__(self):
super(Spider, self).__init__()
# define a example function
def rand_string(length, output):
random_post=randint(1000000,9999999)
response=requests.get('https://stackoverflow.com/questions/'+str(random_post))
soup=BeautifulSoup(response.content,'lxml')
try:
title=soup.find('a',{'class':'question-hyperlink'}).string
except:
title="not found"
output.put(title)
# Setup a list of processes that we want to run
def run(self):
output = mp.Queue()
processes = [mp.Process(target=Spider.rand_string, args=(x, output)) for x in range(10)]
for p in processes:
p.start()
# Exit the completed processes
for p in processes:
p.join()
# Get process results from the output queue
results = [output.get() for p in processes]
print(results)
# Run processes
if __name__ == '__main__':
spider=Spider()
spider.run()
【问题讨论】:
-
您是否尝试过在单线程时确保一切顺利运行?多处理可能会使调试子进程变得困难
-
您发布的代码中没有任何明显的地方,所以您的问题在其他地方..
-
@Aaron,单线程工作得很好,但我对执行时间不满意。没有一个函数使用相同的资源/文件
-
好吧,atm 我看不出你发布的代码有什么问题。所有功能是否足够相似,您可以浓缩为一个功能并提供另一个参数(搜索网站)?如果是这样,我个人会尝试这样做并使用已经构建的
multiprocessing.pool -
@Aaron 我认为这与我在 Windows 机器上运行的事实有关,但我还没有弄清楚如何更改代码...stackoverflow.com/questions/37244168/…跨度>
标签: python beautifulsoup queue multiprocessing