scrapy爬虫基础

一、安装所需包

1、首先安装scrapy包:pip install scrapy

2、在windows系统下,还需安装pypiwin32这个包:pip install pypiwin32

二、创建项目

1、命令行操作

  • 进入指定盘:比如要进入D盘:在命令行输入: d: 或 D: 即可
  • 进入指定文件夹:cd+文件名
  • 查看指定文件夹下的子文件目录:cd+文件名+dir
  • 在某文件下创建文件夹:mkdir+需要创建的文件名称
  • 创建scrapy项目:scrapy startproject [项目名称]

2、创建项目和爬虫:(在命令行中的操作)

  • 创建项目:‘scrapy startproject[爬虫的名字]’.
  • 创建爬虫:进入到项目所在的路径,执行命令:‘scrapy genspider[爬虫名字][爬虫的域名]’.注意,爬虫名字不能和项目名称一致。
  • 通过命令行运行爬虫:scrapy crawl [爬虫名字]

3、项目目录结构:

  • items.py:用来存放爬虫爬取下来数据的模型
  • middlewares.py:用来存放各种中间件的文件
  • pipelines.py:用来将items的模型存储到本地磁盘中
  • settings.py:本爬虫的一些配置信息(比如请求头,多久发送一次请求,ip代理池等)
  • scrapy.cfg:项目的配置文件
  • spiders包:以后所有的爬虫,都是存放在这个里面

4、在pycharm创建.py文件代替cmd命令行运行scrapy项目

  • 在cmd创建好scrapy项目后,在pycharm找到创建的项目并打开,在scrapy项目根目录下创建一个py文件,代替cmd运行爬虫项目
  • 在py文件输入:from scrapy import cmdline
  • cmdline.execute("scrapy crawl [爬虫名字]”).split()或cmdline.execute(['scrapy','crawl','[爬虫名字]')
  • 由于cmdline.execute需要传入列表字符串的格式,所以需要用.split()函数或直接传入列表字符串的形式。

5、糗事百科scrapy爬虫笔记:

  • response是一个‘scrapy.htttp.response.html.HtmlResponse’对象,可以执行'xpath'和‘css’语法来提取数据
  • 读取出来的数据,是一个‘selector’或者是一个‘selectorlist’对象,如果想要获取其中的字符串,那么应该执行‘getall’或者‘get’方法
  • getall方法:获取‘selector’中的所有文本,返回的是一个列表
  • get方法:获取的是‘selector’中的第一个文本,返回的是一个str类型。
  • 如果数据解析回来,要传给pipeline处理,那么可以使用‘yield’生成器来返回,或者是创建列表,收集所有的item,最后使用return返回。
  • item:建议在‘items.py’中定义好模型,以后就不要使用字典。
  • pipeline:这个是专门用来保存数据的,其中有三个方法是会经常使用的,
    • ‘open_spider(self,spider)’:当爬虫被打开的时候执行
    • ‘process_item(self,spider)’:当爬虫有item传过来的时候会被调用
    • 'close_item(self,spider)':当爬虫关闭的时候会被调用
    • 要激活pipeline,应该在‘settings.py’中设置‘ITEM_PIPELINES’示例如下:
    • ITEM_PIPELINES = {'qsbk.pipelines.QsbkPipeline': 300,}

6、JsonItemExporter和JsonLinesItemExporter

  • 保存json数据的时候,可以使用这两个类,让操作变得更简单
  • 1、JsonItemExporter:这个是每次把数据添加到内存中,最后统一写入到磁盘中,好处是存储的数据是一个满足json规则的数据,坏处是如果数据量大,比较耗内存
    • 示例代码如下:
      • from scrapy.exporters import JsonItemExporter
      • class QsbkPipeline(object): # def __init__(self):
      • self.fp=open("duanzi.json",'wb') self.exporter=JsonItemExporter(self.fp,ensure_ascii=False,encoding='utf-8') self.exporter.start_exporting() #def open_spider(self,spider): print('pachongkaishil') # def process_item(self,item,spider): self.exporter.export_item(item) return item def close_spider(self,spider): self.exporter.finish_exporting() self.fp.close() print('pachongjieshul')
  • 2、JsonLinesItemExporter:这个是每次调用‘export_item’的时候把这个item存储到硬盘中,坏处是每一个字典是一行,整个文件不是一个满足json格式的文件,好处是每次处理数据的时候就直接存储到了硬盘中,不会耗内存,数据也比较安全。
    • 示例代码如下:
      • from scrapy.exporters import JsonLinesItemExporter
      • class QsbkPipeline(object):
      • def __init__(self):
      • self.fp=open('duanzi.json','wb')
      • self.exporter=JsonLinesItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
      • def open_spider(self,spider):
      • print('pachongkaishil')
      • def process_item(self,item,spider):
      • self.exporter.export_item(item)
      • return item
      • def close_spider(self,spider):
      • self.fp.close()
      • print('pachongjieshul')

7、CrawlSpider:

  • 在cmd创建爬虫的时候,输入:scrapy genspider -t crawl [爬虫名字,是指需要在里面写网页详情页面爬取的py文件] ["域名"]
  • 需要使用‘LinkExtractor’和‘Rule’,这两个东西决定爬虫的具体走向
    • allow设置规则的方法:要能够限制在我们想要的url上面,不要跟其他的url产生相同的正则表达式 即可
    • 什么情况下使用follow:如果在爬取页面的时候,需要将满足当前条件的url在进行跟进,那么就设置为True,否则设置为False
    • 什么情况下改指定callback:如果这个url对应的页面,只是为了获取更多的url,并不需要里面的数据,那么可以不指定callback,如果想要获取url对应页面中的数据,那么就需要指定一个callback
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值