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个列表,但是实际却是随机的,有时候是四十多点,有时候只有二十多点。
我还没玩过scrapy,不过猜scrapy中应该集成了多线程或者多进程之类的。查下手册看看呢?
我玩过,不过就是想自己实现下多线程,scrapy是异步操作,效率也很高。
对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你不一定执行完了啊。