首页 新闻 会员 周边

python多线程爬虫,提高效率,怎么写?

0
悬赏园豆:10 [待解决问题]
 1 import requests
 2 from scrapy.selector import Selector
 3 import scrapy,datetime
 4 import threading
 5 print(datetime.datetime.now())
 6 
 7 def get_title(url):
 8     html=requests.get(url)
 9     selector=scrapy.selector.Selector(text=html.text)
10     title=selector.xpath('//div[@class="post floated-thumb"]/div[1]/a/@title').extract()
11     print(title)
12 def next_page():
13     for i in range(1,51):
14         url = 'http://blog.jobbole.com/all-posts/page/{0}/'.format(i)
15         t=threading.Thread(target=get_title,args=(url,))
16         t.setDaemon(True)
17         t.start()
18     t.join()
19 
20 if __name__ == "__main__":
21     next_page()
22     print(datetime.datetime.now())

这个爬虫就是提取伯乐在线文章的前50页的标题,希望有一份不用多线程和用多线程的对比下时间。我现在编写的很奇怪,伯乐在线每一页是20条文章,按照道理来说有50个列表,但是实际却是随机的,有时候是四十多点,有时候只有二十多点。

今孝的主页 今孝 | 初学一级 | 园豆:146
提问于:2017-04-26 17:00
< >
分享
所有回答(2)
0

我还没玩过scrapy,不过猜scrapy中应该集成了多线程或者多进程之类的。查下手册看看呢?

墨镜带佬星 | 园豆:2294 (老鸟四级) | 2017-04-27 12:18

我玩过,不过就是想自己实现下多线程,scrapy是异步操作,效率也很高。

支持(0) 反对(0) 今孝 | 园豆:146 (初学一级) | 2017-04-27 16:16
0

对python不是很熟,但

 for i in range(1,51):
        url = 'http://blog.jobbole.com/all-posts/page/{0}/'.format(i)
        t=threading.Thread(target=get_title,args=(url,))
        t.setDaemon(True)
        t.start()
    t.join()

这个不太对吧,最后这个t只是最后一个循环周期的thread,前面那些thread你不一定执行完了啊。

Daniel Cai | 园豆:10424 (专家六级) | 2017-04-27 18:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册