Scrapy爬虫框架学习笔 一
来源:互联网 发布:freebsd rc.d python 编辑:程序博客网 时间:2024/05/22 13:47
Scrapy爬虫框架学习笔 一
本文主要是Scrapy爬虫框架学习的笔记。因为有一部分自己的理解,带有强烈的自主看法可能会与客观的事实有所偏差。如有不对的请与我联系。
QQ邮箱:735566414@qq.com
- 对于Scrapy爬虫框架的理解
- 项目文件目录的分析
- Scrapy爬虫框架的基本使用方法
对于Scrapy爬虫框架的理解
Scrapy框架是对爬虫项目的抽象化。抽象了在具体项目中具体的业务实现。使我们在具体项目中可以更专注于业务逻辑。不用平凡的去关注具体的网页访问、具体的网页代码与数据的分离、多线程的具体实现。
更多的请关注:
Scrapy中文手册
项目文件目录的分析
Scrapy爬虫项目
目录说明
spiders:保存爬虫的的目录。(可以有多个爬虫)
items.py:定义数据类
例:
import scrapyfrom scrapy.item import Fieldfrom scrapy.item import Itemclass DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field()class ImageItem(scrapy.Item): image_urls = scrapy.Field() images = scrapy.Field() image_paths = scrapy.Field()
pipelines.py:定义了数据类的处理和预处理.(对数据可以做预处理。清除掉不需要的数据。)注意:要想数据处理类起作用还要在项目配置文件中配置。
例:
#去到空数据class TuinvlanPipeline(object): def process_item(self, item, spider): #需要的数据返回,不需要用raise返回 if len(item['link'])>=1: #item['title']=item['title'][0].decode("utf-8") #item['title']= httplib2.urllib.parse.unquote(item['title'][0]) return item else: raise DmozItem("Missing price in %s" % item)
settings.py:是项目的配置文件。
Scrapy爬虫框架的基本使用方法
1、生成scrapy项目
在dos命令行中输入 scrapy startproject projectName(项目的名称)
2、编写数据类
import scrapyfrom scrapy.item import Fieldfrom scrapy.item import Itemclass DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field()class ImageItem(scrapy.Item): image_urls = scrapy.Field() images = scrapy.Field() image_paths = scrapy.Field()
title 引用数据是的名字
例:item=DmozItem()
DmozItem[“title”]=”title”
官方说明
- 3、编写继承父类的类
在spiders目录下init.py编写爬虫类
这里是一爬一个图片网站的图片为例。
要写一个使用爬虫框架要想继承它的Spider类。(还有其他的几种爬虫类。)
例:
import scrapyfrom scrapy.spiders.crawl import Rulefrom tuinvlan.items import ImageItemfrom scrapy.http.request import Requestfrom scrapy.loader import ItemLoaderfrom public import appendfrom scrapy.http import requestfrom scrapy.spiders import CrawlSpider, Rulefrom scrapy.linkextractors import LinkExtractorfrom tuinvlan.items import DmozItemclass DmozSpider(scrapy.spiders.Spider): name = "dmoz" start_urls = [ "http://www.tuyimm.com/forum-14-1.html", ] def parse(self, response): #主题栏URL提取 uurl=response.xpath('//a[@hidefocus="true"]/@href') for url in uurl: #回调parse方法 yield scrapy.Request(url.extract(),callback=self.parse) url1=response.xpath('//*[@class="nxt"]/@href') for u in url1: yield scrapy.Request(u.extract(),callback=self.parse) for a in response.xpath('//*[@id="waterfall"]/li/div/a[@class="preview"]'): links= a.xpath('@href').extract() for link in links: xiangqing=scrapy.Request(link,callback=self.parse_xiangqing) yield xiangqing #url1=response.css('.nxt')[0].xpath('@href') #if url1 != None: # scrapy.Request(url1,callback=self.parse1) def parse_xiangqing(self,response): l = ItemLoader(item=DmozItem(), response=response) l.add_xpath('link','//*[@class="lazy"]/@zoomfile') l.add_xpath('title','//*[@id="thread_subject"]/text()') #//*[@id="aimg_190357"] #//*[@id="thread_subject"] return l.load_item() def parse_1(self,response): for a in response.css('.preview'): yield a.xpath('@href').extract()class LuSe(scrapy.spiders.CrawlSpider): name = '356e.info' allowed_domains = ['356e.info'] start_urls = ['http://www.356e.info/?page=1'] rules = ( # 提取匹配 'category.php' (但不匹配 'subsection.php') 的链接并跟进链接(没有callback意味着follow默认为True) Rule(LinkExtractor(allow=('\?page='))), # 提取匹配 'item.php' 的链接并使用spider的parse_item方法进行分析 Rule(LinkExtractor(allow=('vod/', )), callback='parse_item'), ) def parse_item(self, response): for res in response.xpath('//*[@id="ckplayer_a1"]/param[7]/@value'): #创建了数据类的一个实例 item= DmozItem() item['link']=res yield item
name = “dmoz”这里定义了爬虫的名字。这个名字要是唯一的名字,不能与其他的一样
start_urls = [“http://www.tuyimm.com/forum-14-1.html“,]定义了爬虫的起始位置。
def parse(self, response)方法这里覆盖了父类的parse方法。一个爬虫类在开始这个方法是入口。
3、编写数据处理类
在项目根目录下pipelines.py编写数据处理类
该类必须实现def process_item(self, item, spider):方法。
例:
#去到空数据class TuinvlanPipeline(object): def process_item(self, item, spider): #需要的数据返回,不需要用raise返回 if len(item['link'])>=1: return item else: raise DmozItem("Missing price in %s" % item)
item参数是定义数据类的实例。
spider是返回数据类实例的爬虫类实例。
- 4、设置项目文件
在项目根目录下settings.py*中配置项目的配置项
在这里我们是把数据处理的类加入项目中ITEM_PIPELINES = {
‘myproject.pipelines.PricePipeline’: 300,
‘myproject.pipelines.JsonWriterPipeline’: 800,}
这里的300,800是数据处理类执行的运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内。
- 5、启动项目
在项目根目录的上级目录dos命令行中输入scrapy crawl dmoz
dmoz是定义的爬虫名字。
- Scrapy爬虫框架学习笔 一
- 爬虫框架--Scrapy学习笔记一
- python爬虫 scrapy框架学习
- Python爬虫框架Scrapy学习一记——认识Scrapy
- Scrapy爬虫框架学习笔 二 CrawlSpider的使用
- python爬虫之scrapy框架(一)
- Scrapy爬虫框架(一):初试牛刀
- scrapy爬虫框架教程(一)-- Scrapy入门
- python爬虫框架scrapy学习笔记
- python爬虫框架scrapy学习笔记
- Python网络爬虫框架scrapy的学习
- 基于scrapy框架爬虫学习小结
- scrapy爬虫框架学习入门教程及实例
- Python爬虫框架scrapy 安装学习
- 爬虫框架Scrapy学习记录I--ing
- 大数据-爬虫框架学习--scrapy
- 学习安装python的Scrapy爬虫框架
- 爬虫框架--Scrapy学习笔记二
- 【25-Reids内存优化】
- jquery对象和DOM对象的相互转换
- Ajax——CS、BS架构
- dell灵越7370 U盘装机 BIOS设置
- java中list类测试总结
- Scrapy爬虫框架学习笔 一
- mysql索引
- Ajax——wampserver
- [Unity教程]unity 鼠标点击目的地生成特效
- C -杂记(2)
- 从AlexNet到胶囊网络,CNN这五年(视频详解)
- php
- 深度 | 为什么要利用NLP做情感分析?
- Ajax——浏览器和服务器的交互