1 .Scrapy提取项目

从网页中提取数据,Scrapy 使用基于 XPath 和 CSS 表达式的技术叫做选择器。

选择器有四个基本的方法,如下所示:

S.N.

方法 & 描述

extract()

它返回一个unicode字符串以及所选数据

extract_first()

它返回第一个unicode字符串以及所选数据

re()

它返回Unicode字符串列表,当正则表达式被赋予作为参数时提取

xpath()

它返回选择器列表,它代表由指定XPath表达式参数选择的节点

css()

它返回选择器列表,它代表由指定CSS表达式作为参数所选择的节点

2 .Scrapy Shell

如果使用选择器想快速的到到效果,我们可以使用Scrapy Shell
scrapy shell "http://www.163.com"

注意windows系统必须使用双引号

3.以文件的方式打印,保存文件的两种方式

3.1 python原生方式

with open("movie.txt", 'wb') as f: for n, c in zip(movie_name, movie_core): str = n+":"+c+"\n" f.write(str.encode())

3.2 以scrapy内置方式

scrapy 内置主要有四种:JSON,JSON lines,CSV,XML

我们将结果用最常用的JSON导出,命令如下:

在控制台输出一下命令:

scrapy crawl dmoz -o douban.json -t json

-o 后面是导出文件名,-t 后面是导出类型(这个可以不写)

scrapy crawl qidian -o qidian.json
scrapy crawl qidian -o qidian.csv
scrapy crawl qidian -o qidian.xml

3.3 scrapy 保存json文件出现Unicode字符

在setting里面加入下面的配置

FEED_EXPORT_ENCODING ='utf-8'

3.4 scrapy 保存csv文件出现乱码

在setting里面加入下面的配置

FEED_EXPORT_ENCODING = 'gb18030'

4. scrapy框架,使用piplines和items两种格式,对提取文件进行打印和保存 

从一个普通的HTML网站提取数据,查看该网站得到的 XPath 的源代码。检测后,可以看到数据将在UL标签,并选择 li 标签中的 元素。
代码的下面行显示了不同类型的数据的提取:


# -*- coding: utf-8 -*-
import scrapyclass QidianSpider(scrapy.Spider):name = 'qidian'allowed_domains = ['qidian.com']start_urls = ['https://www.qidian.com/rank/yuepiao?chn=21']def parse(self, response):names=response.xpath('//h4/a/text()').extract()authors=response.xpath('//p[@class="author"]/a[1]/text()').extract()# print(names,':',authors)books=[]for name,author in zip(names,authors):books.append({"name":name,"author":author})return books

返回的内容

{'movie_name': ['肖申克的救赎', '霸王别姬', '这个杀手不太冷', '阿甘正传', '美丽人生', '千与千寻', '泰坦尼克号', '辛德勒的名单', '盗梦空间', '机器人总动员', '海上钢琴师', '三傻大闹宝莱坞', '忠犬八公的故事', '放牛班的春天', '大话西游之大圣娶亲', '教父', '龙猫', '楚门的世界', '乱世佳人', '熔炉', '触不可及', '天堂电影院', '当幸福来敲门', '无间道', '星际穿越'], 'movie_core': ['9.6', '9.5', '9.4', '9.4', '9
.5', '9.2', '9.2', '9.4', '9.3', '9.3', '9.2', '9.1', '9.2', '9.2', '9.2', '9.2', '9.1', '9.1', '9.2', '9.2', '9.1', '9.1', '8.9', '9.0
', '9.1']}

 4.1.通过使用piplines,对提取文件进行打印和保存


2.通过piplines打印返回数据并且保存数据# -*- coding: utf-8 -*-
import scrapyclass MaoyanSpider(scrapy.Spider):name = 'maoyan'allowed_domains = ['maoyan.com']start_urls = ['https://maoyan.com/films?showType=3']def parse(self, response):names=response.xpath('//div[@class="channel-detail movie-item-title"]/a/text()').extract()# scores_div=response.xpath('//div[@class="channel-detail channel-detail-orange"]')# scores=[]# for score in scores_div:#     scores.append(score.xpath('string(.)').extract_first())#简写scores = [score.xpath('string(.)').extract_first() for score inresponse.xpath('//div[@class="channel-detail channel-detail-orange"]')]# 在控制台打印的方法一# for name,score in zip(names,scores):#   print(name,':',score)# 在控制台打印的方法二 pipline 使用yield函数推送到pipline# 必须使用字典或item形式# 返回的是一个字典for name,score in zip(names,scores):yield {'name': name,'score': score}# 在piplines输出
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.htmlclass SpiderPipeline:def process_item(self, item, spider):print(item)# return item注意:                        piplines默认的打印格式是log日志需要在设置里打开piplines配置文件ITEM_PIPELINES = {'spider.pipelines.SpiderPipeline': 300,
}#保存文件
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html写法一
import jsonclass SpiderPipeline:def process_item(self, item, spider):#使用a追加写入,需要每次打开文件,增加CPU速度with open('movie.txt','a',encoding='utf-8') as f:#item返回的是字典对象,dumps转为字符串对象f.write(json.dumps(item,ensure_ascii=False)+'\n')         print(item)return item
写法二,使用打开和关闭文件的函数模式保存文件
import jsonclass SpiderPipeline:def open_spider(self,spider):self.filename=open('movie.txt','w',encoding='utf-8')def process_item(self, item, spider):#item返回的是字典对象,dumps转为字符串对象self.filename.write(json.dumps(item,ensure_ascii=False)+'\n')return itemdef close_spider(self,spider):self.filename.close()

4.2.通过使用items,对提取文件进行打印和保存

提取内容的封装Item
Scrapy进程可通过使用蜘蛛提取来自网页中的数据。Scrapy使用Item类生成输出对象用于收刮数据。Item 对象是自定义的python字典,可以使用标准字典语法获取某个属性的值

3. 提取内容的封装Item
Scrapy进程可通过使用蜘蛛提取来自网页中的数据。Scrapy使用Item类生成输出对象用于收刮数据
Item 对象是自定义的python字典,可以使用标准字典语法获取某个属性的值
2.1 定义
# -*- coding: utf-8 -*-
import scrapy
from spider.items import MovieItemclass MaoyanSpider(scrapy.Spider):name = 'maoyan'allowed_domains = ['maoyan.com']start_urls = ['https://maoyan.com/films?showType=3']def parse(self, response):names=response.xpath('//div[@class="channel-detail movie-item-title"]/a/text()').extract()# scores_div=response.xpath('//div[@class="channel-detail channel-detail-orange"]')# scores=[]# for score in scores_div:#     scores.append(score.xpath('string(.)').extract_first())scores = [score.xpath('string(.)').extract_first() for score inresponse.xpath('//div[@class="channel-detail channel-detail-orange"]')]# 创建item对象item=MovieItem()for name,score in zip(names,scores):item['names'] = nameitem['scores'] = scoreyield item# 在item输出
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass MovieItem(scrapy.Item):# define the fields for your item here like:names=scrapy.Field()scores = scrapy.Field()保存数据
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import json
写法一
class SpiderPipeline:def process_item(self, item, spider):#使用a追加写入,需要每次打开文件,增加CPU速度with open('movie.txt','a',encoding='utf-8') as f:#item返回的是字典对象,dumps转为字符串对象#使用item进行保存文件会出现序列化报错,需要把item序列化转化为字典格式#TypeError: Object of type MovieItem is not JSON serializablef.write(json.dumps(dict(item),ensure_ascii=False)+'\n')# print(item)return itemimport jsonclass SpiderPipeline:def open_spider(self,spider):self.filename=open('movie.txt','w',encoding='utf-8')def process_item(self, item, spider):#item返回的是字典对象,dumps转为字符串对象#使用item进行保存文件会出现序列化报错,需要把item序列化转化为字典格式#TypeError: Object of type MovieItem is not JSON serializableself.filename.write(json.dumps(dict(item),ensure_ascii=False)+'\n')return itemdef close_spider(self,spider):self.filename.close()                        

scrapy框架使用piplines、items进行提取项目并保存数据相关推荐

  1. 【6】爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel

    爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel 更新时间:2021.9.16 vedio:15,16,17,18,19 ...

  2. 运用Scrapy框架爬取淘车网十七万二手车数据

    本篇内容将使用scrapy框架爬取淘车网所有二手车信息. 下面开始讲解下如何爬取我们想要的数据: 明确爬取目标: 首先,进入官网:https://www.taoche.com/ 进入官网发现,我们要获 ...

  3. Scrapy框架学习笔记 - 爬取腾讯招聘网数据

    文章目录 一.Scrapy框架概述 (一)网络爬虫 (二)Scrapy框架 (三)安装Scrapy框架 (四)Scrapy核心组件 (五)Scrapy工作流程 二. Scrapy案例演示 (一)爬取目 ...

  4. python中scrapy可以爬取多少数据_python scrapy框架爬取某站博人传评论数据

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  5. Python爬虫-利用Scrapy框架完成天天书屋内容爬取并保存本地txt

    准备工作 首先创建项目,代码操作参照我之前的博客,这里强调一下,由于scrapy是异步io,同时处理多个http,所以要想按顺序存一个txt每章按顺序写入,可以实现但有点繁琐,这里只为了scrapy的 ...

  6. Python爬虫 scrapy框架 爬取智联招聘,并把数据存入数据库,存为json格式的数据

    First:创建项目:执行下面三句命令: 1. scrapy startproject zhilianzhaopin2. cd zhilianzhaopin3.scrapy genspider zhi ...

  7. 【爬虫】scrapy下载股票列表(四)——对接mongodb保存数据

    本文是本项目最后一篇,撒花! 前三篇传送门: [爬虫]scrapy下载股票列表(一)--对接selenium中间件: https://blog.csdn.net/yao09605/article/de ...

  8. Python的Scrapy框架入门教程

    前言: Scrapy是一个基于Python的Web爬虫框架,可以快速方便地从互联网上获取数据并进行处理.它的设计思想是基于Twisted异步网络框架,可以同时处理多个请求,并且可以使用多种处理数据的方 ...

  9. Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))

    在Scrapy框架中的items.py的作用   1.可以预先定义好要爬取的字段     items.py import scrapyclass TencentItem(scrapy.Item):# ...

最新文章

  1. 卷积核里面的参数怎么来的_FSNet:利用卷积核概要进行深度卷积神经网络的压缩...
  2. ajax请求目标地址,AJAX功能目标
  3. linux高端内存申请,Linux高端内存
  4. element el-popover 要渲染较多内容,特定格式,以及在table 显示不完整。
  5. 耿国华c语言程序设计,C语言程序设计课程教学探究.doc
  6. Java基础——JVM内存模型
  7. PS教您与粗壮的胳膊拜拜
  8. 七月算法机器学习1 相关数学基础
  9. wincc连接mysql数据库说明_wincc 数据库的连接方法
  10. DB2 SqlCode对照表
  11. Zune支持哪些格式?
  12. 室内定位常用方法总结
  13. CentOS7下安装NVIDIA独立显卡驱动出现X service error问题解决方法
  14. 不能显示隐藏文件或文件夹的完整解决方案
  15. 当你写爬虫抓不到APP请求包的时候该怎么办?【高级篇-混淆导致通用Hook工具失效】
  16. Android 将本地资源图片转换成Drawable,进行设置大小
  17. html表格类似excel固定表头样式,(转)supertable像excel那样固定table的表头和第一列...
  18. MySQL远程连接的设置
  19. 收集一些可以发外链的网站
  20. 人无远虑,必有近忧:在35岁到来之前,移动app软件开发工程师

热门文章

  1. 《linux内核设计分析》 第一周作业
  2. WebRTC帧率调整策略
  3. 一个精简内核配置的方法 (感谢 flw2 兄分享)
  4. 生活中的小技巧-1:燃气热水器购买实用手册
  5. jQuery UI Datepicker日期日历改造为年月日历
  6. 原型设计工具 - Mockplus
  7. 关于微信分享接口,手机分享时候描述变链接的解决方法以及图片logo不显示问题解决方法
  8. 使用ultraISO 制作多种系统的启动U盘和文件U盘
  9. UE4蓝图基础——蓝图流程控制节点
  10. 小米路由器r1d刷第三方_小米路由器R1D 改造散热记录