美文网首页
Scrapy实例:爬取office官方模板

Scrapy实例:爬取office官方模板

作者: IsOnion | 来源:发表于2018-09-11 11:50 被阅读61次

分析网页

分析爬取网页

office官网提供了大量的Word、Excel、PowerPoint等模板信息。

该实例使用Scrapy爬虫架构,爬取该网站所有的模板文件。

https://templates.office.com/

进入网页

按F12  

开始分析网页源码

该网站模板信息众多,每个模板都有一条分类信息

图1

通过这些分类标签获取该站所有模板信息

图2

通过审查元素我们发现分类标签存在于

'''

<div class="odcom-template-categories-pane>

'''

每个分类标签在

'''

<p class="c-subheading-4">

'''

进去其中业务这个标签

https://templates.office.com/zh-CN/%E4%B8%9A%E5%8A%A1

图3

通过审查元素找到模板详情页链接

图4

获取下一页链接地址

图5

进入模板详情页

我们可以获取其分类信息、名称、描述、APP、下载地址,预览图。

通过分类标签->分类详情->模板详情爬取全站的模板信息。

编写爬虫

新建项目

打开cmd 进入项目目录

输入 scrapy startproject office

图6

回车 scrapy提示我们

You can start your first spider with:

    cd office

    scrapy genspider example example.com

打开项目文档->新建一个爬虫

我们接着输入

cd office

scrapy genspider templates https://templates.office.com/

图7

我们使用pycharm 打开项目文件

图8

进入templates.py

该文件用来编写项目中的爬虫程序

'''

# -*- coding: utf-8 -*-

import scrapy

from office.itemsimport OfficeItem

class TemplatesSpider(scrapy.Spider):

name ='templates'

    start_urls = ['http://templates.office.com/?omkt=zh-CN/']

URLBASE ="https://templates.office.com"

    category =''

    def parse(self, response):

#category_url = response.css(".odcom-template-category-link").extract()

        for urlsin response.css(".odcom-template-category-link::attr(href)").extract():

self.category = urls

print(urls)

yield scrapy.Request(self.URLBASE+urls, callback=self.parse_category)

def parse_category(self, response):

for urlsin response.css(".odcom-template-item-anchor::attr(href)").extract():

yield scrapy.Request(self.URLBASE+urls, callback=self.parse_dell)

if response.css(".f-hide a::attr(data-bi-name)").extract_first() !="下一页":

page_url = response.css(".m-pagination li")[-1].css("::attr(href)").extract()[0]

scrapy.Request(self.category+page_url, callback=self.parse_category)

def parse_dell(self, response):

items = OfficeItem()

items["category"] = response.css(".c-hyperlink::text").extract()[1]

items["filename"] = response.css("#breadcrumbLine::text").extract()[0]

items["description"] = response.css("#tempDescription::text").extract()[0]

items["app"] = response.css(".odcom-core-app-label::text").extract()[0]

items["down_url"] = response.css(".odcom-template-details-action-buttons a::attr(href)").extract()[0]

items["img"] = response.css(".odcom-template-details-preview-thumbnail::attr(src)").extract()[0]

yield items

'''

items.py

'''

import scrapy

class OfficeItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

    category = scrapy.Field()

filename = scrapy.Field()

description = scrapy.Field()

app = scrapy.Field()

down_url = scrapy.Field()

img = scrapy.Field()

'''

程序开始会从

'''

start_urls = ['http://templates.office.com/?omkt=zh-CN/']内的网站,请求该网页,之后调用parse函数处理

'''

在parse中

'''

response.css(".odcom-template-category-link::attr(href)").extract()

'''

通过CCS选择器 获取每个分类标签详情页的链接地址

'''

yield scrapy.Request(self.URLBASE+urls, callback=self.parse_category)

'''

请求每个分类标签详情页地址通过回调函数parse_category 处理请求的数据

在parse_category中

'''

response.css(".odcom-template-item-anchor::attr(href)").extract()

'''

获取页面中模板详情页的链接地址

之后

'''

yield scrapy.Request(self.URLBASE+urls, callback=self.parse_dell)

'''

请求链接地址 调用parse_dell处理

下面的if 语句 判断是否是最后一页

如果 不是 则请求新一页 并回调自己

parse_dell

用来存在下载地址、描述等信息

items.py

相当于建立一个字典结构

最后我们在cmd中输入

scrapy crawl  templates -o 1.json

运行爬虫

结果将存储在当前目前下的1.josn中

相关文章

网友评论

      本文标题:Scrapy实例:爬取office官方模板

      本文链接:https://www.haomeiwen.com/subject/auosgftx.html