首页 新闻 会员 周边 捐助

python多线程爬虫报错

0
悬赏园豆:20 [待解决问题]

用selenium写了一个爬动态网页的爬虫,用的ie,因为有很多IO,爬的太慢了想要用多线程。但是有以下报错不知道什么原因,希望大神解答啊

selenium.common.exceptions.WebDriverException: Message: Error 404: Not Found
Not Found

以下是写的多线程的部分代码

while not q.empty():
    spy1 = spyder(q.get())
    spy2 = spyder(q.get())                          
    spy1.start()
    spy2.start()
    spy1.join()
    spy2.join()
    print(q.qsize())
    print(index)
    index +=1     

把spy2去掉就可以正常跑了。

qinhyu的主页 qinhyu | 初学一级 | 园豆:182
提问于:2017-12-28 22:20
< >
分享
所有回答(1)
0

你这个循环写的有问题,外边只是判断q是不是为空而里面却取了两次,在q中只有一条数据的时候肯定spy2取不到数据

而且这块实现一般不是这样来用线程的,消费者应该是各自为寨,抽数据去处理,没有需要强行join的

Daniel Cai | 园豆:10424 (专家六级) | 2017-12-29 11:49

q.put我在前面已经写好了。我发现问题在哪里了,我需要开两个browser才行。。

什么叫各自为寨呀?join的用法我不太懂,看到其他的例子都会join,可以解答一下吗~

支持(0) 反对(0) qinhyu | 园豆:182 (初学一级) | 2017-12-30 18:48

@qinhyu: 这里你要分两段看,第一段是生产者如何将消息加入q,这里会是一个单独的线程。

另外一边是消费者如何去消费一个q,一般是一个死循环对q做判断,如果有消息则把消息抽出来往线程池中放,而线程池(不清楚python中有没有,如果没有可以自行实现一个简单的,即一个包含多个线程的对象,接受到消息后选择idle的线程去执行,如果没有idle的线程可以阻塞住这里,避免继续执行)则负责消耗消息。join的地方一般只有在需要退出时才做的,

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-12-31 08:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册