1.scrapy数据分析

2.scrapy持久化存储

3.全站数据爬取

4.请求传参  +   五大核心组件

- 创建scrapy工程  scrapy startproject ProName

- 切换到工程目录下  cd ProName

- 创建spider文件夹    scrapy genspider SpiderName  www.xxx.com

-settings里面的一些设置
  - LOG_LEVEL = 'ERROR'
  - USER_AGENT='JHJAJHHJKAFHJFHJ'
  - ROBOTSTXT_OBEY = False
-运行spider  scrapy crawl SpiderName

- scrapy的数据解析
  - 在scrapy中使用xpath解析标签中的文本内容或者标签属性的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
  - 如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()
- scrapy的持久化存储
  - 基于终端指令:
    - 可以将parse方法的返回值对应的数据进行本地磁盘文件的持久化存储
    - scrapy crawl SpiderName -o filePath
    - 优点:便捷
    - 缺点:局限性较强(数据不可以存储到数据库,数据存储文件的后缀有要求)

  - 基于管道:
    -编码流程:
      - 1.数据解析
      - 2.在item类中进行相关属性的封装
      - 3.实例化一个item类型的对象
      - 4.将解析的数据存储封装到item类型的对象中
      - 5.将item提交给管道
      - 6.在配置文件中开启管道
  - 注意事项:
    - 爬虫文件提交的item只会传递给第一个被执行的管道类
    - 在管道类的process_item方法中的return item,是将item传递给下一个即将被执行的管道类
    - 习惯:每一个process_item中都需要编写return item

爬取糗百数据一:

1.存放在start_urls中的url会被scrapy自动的进行请求发送

2. def parse(self, response): 这个函数下面操作代码的数据解析

3.response.xpath()  scrapy用来定位标签的xpath,用法和etree的xpath差不多,但是response.xpath是scrapy自己封装的

4.scrapy的数据解析

  - 在scrapy中使用xpath解析标签中的文本内容或者标签属性的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
  - 如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()

5.运行之前,settings里面的一些参数需要设置

# -*- coding: utf-8 -*-
import scrapy
from qiubaiPro.items import QiubaiproItem
class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
   #允许的域名,一般注释掉
# allowed_domains = ['www.xxx.com'] # 存放在该列表中的url都会被scrapy自动的进行请求发送
start_urls = ['https://www.qiushibaike.com/text/'] # 基于终端指令的持久化存储:可以将parse方法的返回值对应的数据进行本地磁盘文件的持久化存储
 def parse(self, response): 
all_data = [] #数据解析response.xpath:作者and段子内容
div_list = response.xpath('//div[@id="content-left"]/div') for div in div_list:
#在scrapy中使用xpath解析标签中的文本内容的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
#如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()
author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
content = div.xpath('./a/div/span/text()').extract()
dic = {
'author':author,
'content':content
}
all_data.append(dic)
# print(author,content)
return all_data

scrapy基于终端指令的持久化存储

scrap基于管道的持久化存储

1.开启管道settings设置里面  需要手动打开管道

ITEM_PIPELINES = {
'qiubaiPro.pipelines.QiubaiproPipeline': 300,
# 'qiubaiPro.pipelines.mysqlPileLine': 301,
'qiubaiPro.pipelines.redisPileLine': 302,
#300表示的是优先级,数值越小优先级越高
}

2.

  - 爬虫文件中获取文件信息

  - 创建一个item的类对象 item = QiubaiproItem()

  - 将解析数据存储到item对象中  item['author'] = author

  - 将item提交给管道类  yield item

# -*- coding: utf-8 -*-
import scrapy
from qiubaiPro.items import QiubaiproItem
class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
# allowed_domains = ['www.xxx.com']
# 存放在该列表中的url都会被scrapy自动的进行请求发送
start_urls = ['https://www.qiushibaike.com/text/'] #基于管道实现持久化存储
def parse(self, response):
all_data = []
#数据解析:作者and段子内容
div_list = response.xpath('//div[@id="content-left"]/div')
for div in div_list:
#在scrapy中使用xpath解析标签中的文本内容的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
#如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()
author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
if not author:
author = '匿名用户'
content = div.xpath('./a/div/span/text()').extract()
content = ''.join(content) #创建一个item类型的对象(只可以存储一组解析的数据)
item = QiubaiproItem()
#将解析到的数据存储到item对象中
item['author'] = author
item['content'] = content #将item提交给管道类
yield item

3.管道pipelines.py的介绍

  - 管道类里面使用数据库对爬取的文件进行存储

# -*- coding: utf-8 -*-
#
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
from redis import Redis
# 一个管道类对应一种平台的数据存储
class QiubaiproPipeline(object):
fp = None
#重写父类的方法:只在开始爬虫的时候被执行一次
def open_spider(self,spider):
print('开始爬虫......')
self.fp = open('./qiubai.txt','w',encoding='utf-8') #处理item类型的对象
#什么是处理?
#将封装在item对象中的数据值提取出来且进行持久化存储
#参数item表示的就是爬虫文件提交过来的item对象
#该方法每接收一个item就会被调用一次
def process_item(self, item, spider):
print('this is process_item()')
author = item['author']
content = item['content'] self.fp.write(author+':'+content+"\n")
#返回的item就会传递给下一个即将被执行的管道类
return item
def close_spider(self,spider):
print('结束爬虫!')
self.fp.close() #将数据同时存储到mysql
class mysqlPileLine(object):
conn = None
cursor = None
def open_spider(self,spider):
self.conn = pymysql.Connect(host='127.0.0.1',port=3306,db='spider',user='root',password='',charset='utf8')
print(self.conn)
def process_item(self,item,spider):
sql = 'insert into qiubai values ("%s","%s")'%(item['author'],item['content'])
#创建一个游标对象
self.cursor = self.conn.cursor()
try:
self.cursor.execute(sql)
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback()
return item
def close_spider(self,spider):
self.cursor.close()
self.conn.close()
#数据存储到redis中
class redisPileLine(object):
conn = None
def open_spider(self,spider):
self.conn = Redis(host='127.0.0.1',port=6379)
def process_item(self,item,spider):
dic = {
'author':item['author'],
'content':item['content']
}
self.conn.lpush('qiubaiData',dic)

4.item.py的介绍

  - item.py文件中定义item类型的属性

import scrapy
class QiubaiproItem(scrapy.Item):
# define the fields for your item here like:
author = scrapy.Field()
content = scrapy.Field()

scrapy框架第二天的更多相关文章

  1. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

  2. python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...

  3. Scrapy 框架流程详解

    框架流程图 Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): 简单叙述一下每层图的含义吧: Spiders(爬虫):它负责处理所有Respon ...

  4. 解读Scrapy框架

    Scrapy框架基础:Twsited Scrapy内部基于事件循环的机制实现爬虫的并发.原来: url_list = ['http://www.baidu.com','http://www.baidu ...

  5. Scrapy框架-----爬虫

    说明:文章是本人读了崔庆才的Python3---网络爬虫开发实战,做的简单整理,希望能帮助正在学习的小伙伴~~ 1. 准备工作: 安装Scrapy框架.MongoDB和PyMongo库,如果没有安装, ...

  6. python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍

    scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  7. scrapy框架整理

    0.安装scrapy框架 pip install scrapy 注:找不到的库,或者安装部分库报错,去python第三方库中找,很详细 https://www.lfd.uci.edu/~gohlke/ ...

  8. scrapy框架学习之路

    一.基础学习 - scrapy框架 介绍:大而全的爬虫组件. 安装: - Win: 下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip3 ...

  9. Scrapy框架爬虫

    一.sprapy爬虫框架 pip install pypiwin32 1) 创建爬虫框架 scrapy startproject Project # 创建爬虫项目 You can start your ...

随机推荐

  1. 介绍一下 WebApplicationContext ?

    WebApplicationContext 是 ApplicationContext 的扩展.它具有 Web 应用 程序所需的一些额外功能.它与普通的 ApplicationContext 在解析主题 ...

  2. 学习ansible(一)

    1.介绍 1 ansible基于Python开发的自动化运维工具 2 ansible基于ssh协议实现远程管理的工具,没有客户端 3 ansible软件可以实现多种批量管理操作 2.环境 主机 IP ...

  3. 攻防世界 web_php_include

    Web_php_include 进入题目源码直接出来了 <?php show_source(__FILE__); echo $_GET['hello']; $page=$_GET['page'] ...

  4. C语言对源程序处理的四个步骤:预处理、编译、汇编、链接——预处理篇

    预处理 1)预处理的基本概念 C语言对源程序处理的四个步骤:预处理.编译.汇编.链接. 预处理是在程序源代码被编译之前,由预处理器(Preprocessor)对程序源代码进行的处理.这个过程并不对程序 ...

  5. Logistic 回归模型的参数估计为什么不能采用最小二乘法?

    logistic回归模型的参数估计问题,是可以用最小二乘方法的思想进行求解的,但和经典的(或者说用在经典线性回归的参数估计问题)最小二乘法不同,是用的是"迭代重加权最小二乘法"(I ...

  6. 前端基础问题整理-HTML相关

    DOCTYPE的作用以及常见的DOCTYPE类型 <!DOCTYPE>声明位于文档中的最前面的位置,处于 <html> 标签之前,用来告知浏览器页面目前的文件是用哪种版本的HT ...

  7. java中请给一个Abstract类实现接口的实例!

    2.Abstract类实现接口 马克-to-win:如果实现某接口的类是abstract类,则它可以不实现该接口所有的方法.但其非abstract的子类中必须拥有所有抽象方法的实在的方法体:(当然它a ...

  8. 大数据学习之路之ambari配置(三)

    添加了虚拟机内存空间 重装ambari

  9. CCF201909-2小明种苹果(续)

    解题思路:解题思路很简答,就是用数组将数据存起来然后再进行统计,具体思路就见代码注释,记录这道题的是为了警示自己好好审题啊...... 审题有问题,写题火葬场啊.......以为每棵树就疏一次果,把D ...

  10. Cannot get a STRING value from a NUMERIC cell poi异常解决

    ref:http://www.tpyyes.com/a/kuozhan/2017/0902/199.html poi导入excel表格数据时报java.lang.IllegalStateExcepti ...