专栏首页喵叔's 专栏Scrapy 爬虫模板--SitemapSpider

Scrapy 爬虫模板--SitemapSpider

SitemapSiper 允许我们通过网站的 Sitemap 文件中的 URL 来爬取一个网站。Sitemap 文件包含整个网站的每个网址链接,其中包含了上次更新时间、更新频率以及网址的权重(重要程度)。常见的 Sitemap 文件格式有 TXT 、 XML 和 HTML 格式,大部分网站是以 XML 格式来显示的。下面我们来看一下 CSDN 网站的 Sitemap 文件格式。

我们来讲解一下上图中各个节点的意思:

  1. loc:完整的网址;
  2. lastmod:最后修改时间;
  3. changefreq:更新频率;
  4. priority:链接的权重。

下面我们来讲解一下 SitemapSiper 中常用的属性:

  1. sitemap_urls:包含待爬取 url 的 Sitemap 列表;
  2. sitemap_rules:元组列表,包含正则表达式和回调函数,格式是这样的 (regex,callback)。regex 可以是正则表达式,也可以是一个字符串。 callback 用于处理 url 的回调函数;
  3. sitemap_follow:指定需要跟进 Sitemap 的正则表达式列表;
  4. sitemap_alternate_link:当指定的 url 有可选的链接时是否跟进,默认不跟进。这里所谓的可选链接指的是备用网址,一般的格式如下:
<url>
  <loc>http://aaa.com</loc>
  <!--备用网址/可选链接-->
  <xhtml:link rel="alternate" hreflang="en" href="http://aaa.com/en"/>
</url>

零、例子

下面我们通过爬取 CSDN 的 Sitemap 来看一下怎么使用 SitemapSiper 。

from scrapy.spiders import SitemapSpider
from ..items import CsdnItem


class csdnspider(SitemapSpider):
    name = 'csdn_spider'
    sitemap_urls = ['https://www.csdn.net/sitemap.xml']
    sitemap_rules = [
        ('beautifulsoup4', 'parse')
    ]

    def parse(self, response):
        docs = response.css('.local-toc li')
        for doc in docs:
            item = CsdnItem()
            item["title"] = doc.css(".reference::text").extract_first()
            item["url"] = doc.css(".reference::attr(href)").extract_first()
            yield item
import scrapy


class CsdnItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flask架站基础篇(四)--URL

    喵叔
  • 如何实现标准的dispose

    前面的文章我们说过,如果对象包含非托管资源那么就必须要正确的清理,现在我们就来说一下如何清理。针对非托管资源 .NET 会采用一套标准的模式来完成清理工作。也就...

    喵叔
  • 开胃菜

    从今天开始,我会每天早上放出一个 SQL 问题,之后会在第二天放出对这个问题进行讲解。今天是第一篇,算是个开胃菜吧,问题比较简单。

    喵叔
  • Axios 各种请求方式传递参数格式

    跟着阿笨一起玩NET
  • dubbo 缓存的使用和实现解析

    dubbo缓存主要实现,对方法调用结果的缓存。 在服务消费方和提供方都可以配置使用缓存。 以消费方为例,可以配置全局缓存策略,这样所有服务引用都启动缓存 ...

    技术蓝海
  • Python Scrapy分布式爬虫

    可以输入多个来观察多进程的效果。。打开了爬虫之后你会发现爬虫处于等待爬取的状态,是因为list此时为空。所以需要在redis控制台中添加启动地址,这样就可以愉快...

    Python知识大全
  • 双十一的狂欢背后:忧虑、固化同在,初心、本源迷失

    尽管没有参与到双十一的剁手大战当中,但是,我依然感受到了双十一的浓浓氛围。满屏的红包雨、不断弹出的推广链接、朋友圈里不断刷屏的盖楼活动,还有各大卫视的双十一的晚...

    孟永辉
  • 王卫手撕马云却力挺马化腾,大数据时代的企业竞争出现新形式了吗?

    “或许在多年以后,提到大数据,那些互联网大牛们都会想到阿里旗下的菜鸟和顺丰爆发冲突的那个下午”,虽然各行各业的“撕逼事件”常有,但在大数据领域,这次绝对可以记上...

    数据猿
  • AQS 与 Sync 源码分析

    ReentrantReadWriteLock 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读...

    lwen
  • ntfs-3g的安装与配置

    2,wget http://www.ntfs-3g.org/ntfs-3g-1.1120.tgz

    py3study

扫码关注云+社区

领取腾讯云代金券