前几天写了一个爬虫,用来爬伯乐在线的python版块的文章。其实这个爬虫只是保存网页而已,因为伯乐在线的文章既有图片又有代码,爬主要部分的话排版很难看,不如直接把网页保存下来。
然后这两天就在看python的一个轻量级爬虫框架–scrapy,并尝试用scrapy写爬虫。一开始觉得毫无头绪,后来慢慢就觉得挺好使的。但是好使归好使,就是不知道性能如何?于是就用scrapy也写一个爬虫来爬伯乐在线的文章,然后做一个对比。
自己写的爬虫-jobbole.py
因为自己用写爬虫接触多线程的时候,看到贴吧的一个人写的爬虫用到的是multiprocessing.dummy.Pool,然后就去用了一下,发现这个Pool真好用,于是基本上我写的每个爬虫都会用到Pool。其用法是:
from multiprocessing.dummy import Pool
pool=Pool(10)#10代码线程数
#定义一个函数
def run(num):
print num**2
num_list=[1,2,3,4,5,6,7,8,9,10]
pool.map(run,num_list) #运行
#关闭线程
pool.close()
pool.join()
上面的就是基本用法,简单高效。
然后这里写的爬虫也是用这种方法。
爬虫分两步:
- 第一步:解析每一页如http://python.jobbole.com/all-posts/page/2/的网页,把文章的链接解析出来。
第二步:解析文章页(其实这里没有解析,因为是直接保存网页),并把内容保存为.html格式。
详细代码如下:
import re
import requests as req
from multiprocessing.dummy import Pool
import time
class DownloadArticle():
def __init__(self):
self.url='http://python.jobbole.com/all-posts/page/'
self.article_list=[]
self.savepath='D:/python/jobbole/articles/'
self.errorUrl={}
def parseArticleUrl(self,page):
global article_list
url=self.url+str(page)
s=req.get(url)
#<a target="_blank&#