分析网页
分析爬取网页
office官网提供了大量的Word、Excel、PowerPoint等模板信息。
该实例使用Scrapy爬虫架构,爬取该网站所有的模板文件。
进入网页
按F12
开始分析网页源码
该网站模板信息众多,每个模板都有一条分类信息
通过这些分类标签获取该站所有模板信息
通过审查元素我们发现分类标签存在于
'''
<div class="odcom-template-categories-pane>
'''
每个分类标签在
'''
<p class="c-subheading-4">
'''
进去其中业务这个标签
https://templates.office.com/zh-CN/%E4%B8%9A%E5%8A%A1
通过审查元素找到模板详情页链接
获取下一页链接地址
进入模板详情页
我们可以获取其分类信息、名称、描述、APP、下载地址,预览图。
通过分类标签->分类详情->模板详情爬取全站的模板信息。
编写爬虫
新建项目
打开cmd 进入项目目录
输入 scrapy startproject office
回车 scrapy提示我们
You can start your first spider with:
cd office
scrapy genspider example example.com
打开项目文档->新建一个爬虫
我们接着输入
cd office
scrapy genspider templates https://templates.office.com/
我们使用pycharm 打开项目文件
进入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中
网友评论