Scrapy实例:爬取office官方模板

分析网页

分析爬取网页

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

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

https://templates.office.com/

进入网页

按F12  

开始分析网页源码

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

《Scrapy实例:爬取office官方模板》 图1

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

《Scrapy实例:爬取office官方模板》 图2

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

”’

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

”’

每个分类标签在

”’

<p class=”c-subheading-4″>

”’

进去其中业务这个标签

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

《Scrapy实例:爬取office官方模板》 图3

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

《Scrapy实例:爬取office官方模板》 图4

获取下一页链接地址

《Scrapy实例:爬取office官方模板》 图5

进入模板详情页

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

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

编写爬虫

新建项目

打开cmd 进入项目目录

输入 scrapy startproject office

《Scrapy实例:爬取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/

《Scrapy实例:爬取office官方模板》 图7

我们使用pycharm 打开项目文件

《Scrapy实例:爬取office官方模板》 图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官方模板》

    原文作者:IsOnion
    原文地址: https://www.jianshu.com/p/28353112199f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞