Scrapy 爬虫 个人学习经验
2017-09-27 15:39
309 查看
安装Scrapy
安装环境 : python2.7, Ubuntu16.04pip install Scrapy
使用Scrapy
创建工程
scrapy startproject programname
scrapy 会创建一个sipders文件里面用于放置爬虫文件
item 用于创建数据类
piplines用于处理数据
middlewares 中间器 可以在爬虫重写其中的方法
settings 用于爬虫的配置
编写爬虫
建立一个scrapy.Spider的子类为爬虫类
name 为 爬虫名字,用scrapy crawl name启动爬虫 一定要写
allowed_dimains 为爬取网址的部分
start_urls 开始爬取的url
rules = ( #自动从response中根据正则表达式提取url,再根据这个url再次发起请求,并用callback解析返回的结果 Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+/')), callback="parse_item"), #Rule(LinkExtractor(allow=(r'https://movie.douban.com/tag/\[wW]+'))), # 从网页中提取http链接 )
Rule类的参数:link_extractor、callback=None、cb_kwargs=None、follow=None、process_links=None、process_request=None
allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。
deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。
allow_domains:会被提取的链接的domains。
deny_domains:一定不会被提取链接的domains。
restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css
定义 start_requests 用来请求start_urls中的url
def start_requests(self): for url in self.start_urls: yield Request(url,headers= self.header,callback=self.parse )
编写parse来处理start_requests 返回的请求,爬取所需的信息
数据保存与处理
在items文件中建立scrapy.Item的子类启用piplines处理数据,在settings文件中写入
ITEM_PIPELINES = { 'projectname.pipelines.pipelinesclassname':300, }
在pipelines 文件里重写 open_spider(执行spider时,运行一次)
def open_spider(self,spider): client = pymongo.MongoClient('localhost',27017) database = client['databasesname'] self.collection = database['collectionname']
这里是用MongoDB,所以open_spider建立与MongoDB的连接
def process_item(self, item, spider): data = { 'Id': item['Id'], } self.collection.insert(data) return item
将item数据写入数据库
数据去重
for id in collection.distinct('Id'): num = collection.count({'Id': id}) for i in range(1,num): collection.remove({'Id':id},0)
通过distinct,将相同属性的合并,统计数据,若大于1,则有重复数据,删除多余数据
scrapy使用代理
打开middlewares.py在middlewares.py中增加一个类,取名:ProxyMiddleware即代理中间件
class ProxyMiddleware(object): proxyList = [] def process_request(self, request, spider): pro_ip = random.choice(self.proxyList) print "use proxyip "+ pro_ip request.meta['proxy'] = "http://"+ pro_ip DOWNLOADER_MIDDLEWARES = { 'projectname.middlewares.ProxyMiddleware': 100, 'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110 }
或者在重写的star_requests
def start_requests(self): for url in self.start_urls: yield Request(url,headers= self.header,callback=self.parse,meta = {'proxy':proxyip})
PS:参考了很多博客,就不一一列举了
相关文章推荐
- 使用python,scrapy写(定制)爬虫的经验,资料,杂。
- 爬虫scrapy之学习路线
- 个人的CodeSmith和.NetTiers的学习心得及经验总结
- CentOS6.8 部署爬虫(Scrapy)和Django经验浅谈
- Python爬虫框架Scrapy 学习笔记 5 ------- 使用pipelines过滤敏感词
- Python爬虫学习--WIN10下定时获取CSDN个人的访问量并保存到文件中2018/03/05
- Scrapy爬虫学习:同步和异步分页
- Python的Scrapy爬虫框架简单学习笔记
- 个人学习java的真实经验!
- 个人浅谈java的学习经验!
- 学习python 中的scrapy爬虫框架艰辛路,不推荐看,主要纪录自己学习笔记的
- Scrapy爬虫框架学习之MySQL数据库的存储
- Python网络爬虫框架scrapy的学习
- 爬虫框架Scrapy学习记录II--Selector学习
- Scrapy爬虫学习中遇到的问题记录
- windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息
- 利用CSDN空间总结个人学习经验的计划
- 摘抄:架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习