scrapy框架学习(五)定义数据结构和多页爬取
定义数据结构和多页爬取
定义数据结构
在items.py文件中定义你要提取的内容(定义数据结构),比如我提取的内容为用户名name、用户头像链接face_src、好笑数funny、评论数comment,我就创建4个变量。Field方法实际上的做法是创建一个字典,给字典添加一个建,暂时不赋值,等待提取数据后再赋值。
#用户名
name=scrapy.Field()
#头像链接
face_src=scrapy.Field()
#好笑数
funny=scrapy.Field()
#评论数
comment=scrapy.Field()
在爬虫文件中使用定义好的数据结构存储数据
首先导入数据结构类
from myfirst_scrapyDemo.items import MyfirstScrapydemoItem
使用时类似字典的使用方式
item=MyfirstScrapydemoItem()
item['name']= name
item['face_src']=face_src
item['funny']=funny
item['comment']=comment
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html import scrapy class MyfirstScrapydemoItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#用户名
name=scrapy.Field()
#头像链接
face_src=scrapy.Field()
#好笑数
funny=scrapy.Field()
#评论数
comment=scrapy.Field()
import scrapy
from myfirst_scrapyDemo.items import MyfirstScrapydemoItem class SpiderQiushiSpider(scrapy.Spider):
#爬虫名字
name = 'spider_QiuShi'
#域名限制列表,列表值可以设置多个,限制爬虫只爬取该域名下的网页
allowed_domains = ['www.qiushibaike.com']
#初始爬取地址
start_urls = ['http://www.qiushibaike.com/text'] def parse(self, response):
div_list= response.xpath('//div[@class="col1 old-style-col1"]/div')
#items=[]
item=MyfirstScrapydemoItem()
for li in div_list:
# name= li.xpath('.//h2/text()')[0].extract().strip('\n').strip(' ')
# face_src= "https:"+li.xpath('.//div[1]/a[1]/img/@src')[0].extract().split('?')[0]
# funny= li.xpath('.//div[@class="stats"]/span[1]/i/text()')[0].extract()
# comment=li.xpath('.//div[@class="stats"]/span[2]/a/i/text()')[0].extract()
name= li.xpath('.//h2/text()').extract_first().strip('\n').strip(' ')
face_src= "https:"+li.xpath('.//div[1]/a[1]/img/@src').extract_first().split('?')[0]
funny= li.xpath('.//div[@class="stats"]/span[1]/i/text()').extract_first()
comment=li.xpath('.//div[@class="stats"]/span[2]/a/i/text()').extract_first()
# item= {
# "名称":name,
# "链接":face_src
# }
# items.append(item)
item['name']= name
item['face_src']=face_src
item['funny']=funny
item['comment']=comment
#print(item)
yield item
多页爬取
使用yield,将scrapy.Request(url)返回给引擎,引擎寻找调度器,并重新调用scrapy中的parse
程序里一共有两个yield,我比较喜欢叫它中断,当然中断只在CPU中发生,它的作用是移交控制权,在本程序中,我们对item封装数据后,就调用yield把控制权给管道,管道拿到处理后return返回,又回到该程序。这是对第一个yield的解释。
第二个yield稍微复杂点,这条程序里利用了一个回调机制,即callback,回调的对象是parse,也就是当前方法,通过不断的回调,程序将陷入循环,如果不给程序加条件,就会陷入死循环,如本程序我把if去掉,那就是死循环了。
yield scrapy.Request(url=url,callback=self.parse)
import scrapy
from myfirst_scrapyDemo.items import MyfirstScrapydemoItem class SpiderQiushiSpider(scrapy.Spider):
#爬虫名字
name = 'spider_QiuShi'
#域名限制列表,列表值可以设置多个,限制爬虫只爬取该域名下的网页
allowed_domains = ['www.qiushibaike.com']
#初始爬取地址
start_urls = ['http://www.qiushibaike.com/text'] #爬取多页
url='https://www.qiushibaike.com/text/page/{}/'
page=1 def parse(self, response):
div_list= response.xpath('//div[@class="col1 old-style-col1"]/div')
#items=[]
item=MyfirstScrapydemoItem()
for li in div_list:
# name= li.xpath('.//h2/text()')[0].extract().strip('\n').strip(' ')
# face_src= "https:"+li.xpath('.//div[1]/a[1]/img/@src')[0].extract().split('?')[0]
# funny= li.xpath('.//div[@class="stats"]/span[1]/i/text()')[0].extract()
# comment=li.xpath('.//div[@class="stats"]/span[2]/a/i/text()')[0].extract()
name= li.xpath('.//h2/text()').extract_first().strip('\n').strip(' ')
face_src= "https:"+li.xpath('.//div[1]/a[1]/img/@src').extract_first().split('?')[0]
funny= li.xpath('.//div[@class="stats"]/span[1]/i/text()').extract_first()
comment=li.xpath('.//div[@class="stats"]/span[2]/a/i/text()').extract_first()
# item= {
# "名称":name,
# "链接":face_src
# }
# items.append(item)
item['name']= name
item['face_src']=face_src
item['funny']=funny
item['comment']=comment
#print(item)
yield item #爬取多页
if self.page<6:
self.page+=1
url=self.url.format(self.page)
yield scrapy.Request(url=url,callback=self.parse)
scrapy框架学习(五)定义数据结构和多页爬取的更多相关文章
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- (转)python爬虫----(scrapy框架提高(1),自定义Request爬取)
摘要 之前一直使用默认的parse入口,以及SgmlLinkExtractor自动抓取url.但是一般使用的时候都是需要自己写具体的url抓取函数的. python 爬虫 scrapy scrapy提 ...
- Scrapy框架学习笔记
1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...
- 自己的Scrapy框架学习之路
开始自己的Scrapy 框架学习之路. 一.Scrapy安装介绍 参考网上资料,先进行安装 使用pip来安装Scrapy 在开始菜单打开cmd命令行窗口执行如下命令即可 pip install Scr ...
- scrapy爬虫系列之二--翻页爬取及日志的基本用法
功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...
- Scrapy框架学习(一)Scrapy框架介绍
Scrapy框架的架构图如上. Scrapy中的数据流由引擎控制,数据流的过程如下: 1.Engine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取得URL. 2.En ...
- Scrapy 框架 (学习笔记-1)
环境: 1.windows 10 2.Python 3.7 3.Scrapy 1.7.3 4.mysql 5.5.53 一.Scrapy 安装 1. Scrapy:是一套基于Twisted的一部处理框 ...
- Scrapy框架学习 - 使用内置的ImagesPipeline下载图片
需求分析需求:爬取斗鱼主播图片,并下载到本地 思路: 使用Fiddler抓包工具,抓取斗鱼手机APP中的接口使用Scrapy框架的ImagesPipeline实现图片下载ImagesPipeline实 ...
- scrapy框架学习之路
一.基础学习 - scrapy框架 介绍:大而全的爬虫组件. 安装: - Win: 下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip3 ...
- Scrapy框架学习(三)Spider、Downloader Middleware、Spider Middleware、Item Pipeline的用法
Spider有以下属性: Spider属性 name 爬虫名称,定义Spider名字的字符串,必须是唯一的.常见的命名方法是以爬取网站的域名来命名,比如爬取baidu.com,那就将Spider的名字 ...
随机推荐
- MapboxGL基础
1. 概述 Mapbox GL 是一套开源库,用于在 Web.移动和桌面应用程序中嵌入可自定义且响应迅速的客户端地图.Mapbox GL 贴图以高帧速率呈现.缩写"GL"来自行业标 ...
- vue3中inject无法获取provide传递的最新的值
// 爷组件 import { defineComponent, reactive, toRefs, onMounted, provide ,computed} from 'vue'; const ...
- Python爬虫-爬取手机应用市场中APP下载量
一.首先是爬取360手机助手应用市场信息,用来爬取360应用市场,App软件信息,现阶段代码只能爬取下载量,如需爬取别的信息,请自行添加代码. 使用方法: 1.在D盘根目录新建.tet文件,命名为Ap ...
- c/c++ 2d矢量库
Cairo Cairo is a 2D graphics library with support for multiple output devices. Currently supported o ...
- JavaSE总结(1)
Java发展历史.HelloWorld.常量.变量类型转换.运算符.方法(函数)1.jdk版本: jdk1.2---J2EE/J2SE/J2ME jdk1.5---JavaSE/JavaE ...
- Head_First_Python(中文版)值得花时间读的一本书
Head_First_Python(中文版)书籍免费下载 提取码:u6z5 内容简介 · · · · · · 你想过可以通过一本书就学会Python吗?<Head First Python(中 ...
- FMC子卡设计资料原理图:FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡
FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡 一.产品概述 ADRV9002 是一款高性能.高线性度.高动态范围收发器,旨在针对性能与功耗系统进行优化.该设备是可配置的,非常适合要 ...
- XCZU19EG板卡设计资料:610-基于6U VPX 的FPGA XCZU19EG存储阵列
基于6U VPX 的FPGA XCZU19EG存储阵列 一.板卡概述 高性能存储板基于标准6U VPX架构,是基于Xilinx UltraScale+ 系列FPGA XCZU19EG架 ...
- vue、iview、VeeValidate 表单验证完整
1.main.js (1).安装vee-validate npm install vee-validate --save (2).安装vue-i18n npm install vue-i18n --s ...
- pip安装psycopg2报错Could not find a version that satisfies the requirement psycopg2
pip安装psycopg2报错 在使用命令(pip install psycopg2)安装psycopg2时,会报错: ERROR: Could not find a version that sat ...