文档章节

python爬虫框架scrapy学习之CrawlSpider

子夜闻雪
 子夜闻雪
发布于 2016/07/26 16:28
字数 411
阅读 138
收藏 0

学习任何东西如果有目的性总是更有效率,这里我目的是抓取oschina的博客列表:http://www.oschina.net/blog

这种需要有url跟进的爬虫,scrapy使用CrawlSpider十分方便,CrawlSpider的文档链接CrawlSpider

环境:python版本2.7.10, scrapy版本1.1.1

首先创建项目:

scrapy startproject blogscrapy

生成目录结构如下: 项目结构

编辑items.py,创建BlogScrapyItem存储博客信息

import scrapy

class BlogScrapyItem(scrapy.Item):
    title = scrapy.Field()
    content = scrapy.Field()
    url = scrapy.Field()

在spiders目录下新建spider文件blog.py编写爬虫的逻辑

# coding=utf-8
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import ItemLoader
from scrapy.spiders import Request, CrawlSpider, Rule
from blogscrapy.items import BlogScrapyItem

class WendaSpider(CrawlSpider):
    # 爬虫唯一标示
    name = 'oschina'

    # 允许的domain
    allowed_domains = ['oschina.net']

    # 种子url
    start_urls = [
        'http://www.oschina.net/blog',
    ]

    rules = (
        # 解析博客详情url地址callback到parse_page, follow为false, 则url不会跟进爬取了
        Rule(LinkExtractor(allow=('my\.oschina\.net/.+/blog/\d+$',)), callback='parse_page',
             follow=False,),
    )

    # 博客详情页面解析
    def parse_page(self, response):
        loader = ItemLoader(BlogScrapyItem(), response=response)
        loader.add_xpath('title', "//div[@class='title']/text()")
        loader.add_xpath('content', "//div[@class='BlogContent']")
        loader.add_value('url', response.url)
        return loader.load_item()

在项目目录下使用命令scrapy crawl oschina -o blogs.json即可在当前目录声称blogs.json文件,里面为获取到的BlogScrapyItem的json数据。

因为得到的数据格式不合理,可以通过在item的field上增加input_processor来在录入时处理数据 items.py

import scrapy
from scrapy.loader.processors import MapCompose
from w3lib.html import remove_tags


def filter_title(value):
    return value.strip()


class BlogScrapyItem(scrapy.Item):
    title = scrapy.Field(input_processor=MapCompose(remove_tags, filter_title))
    content = scrapy.Field(input_processor=MapCompose(remove_tags, filter_title))
    url = scrapy.Field(input_processor=MapCompose(remove_tags, filter_title))

github: https://github.com/chenglp1215/scrapy_demo/tree/master/blogscrapy

© 著作权归作者所有

共有 人打赏支持
子夜闻雪
粉丝 3
博文 37
码字总数 16415
作品 0
海淀
程序员
私信 提问
Python爬虫框架Scrapy架构和爬取糗事百科段子结果

根据上篇文章《Python爬虫框架Scrapy之爬取糗事百科大量段子数据》(传送门:Python爬虫框架Scrapy之爬取糗事百科大量段子数据),写好了糗百段子的爬虫,接下来就是开始运行然后获取结果了。...

铁扇公主1
2017/05/24
123
0
高级爬虫(一):Scrapy爬虫框架的安装

Hi 小伙伴们差不多有半个月没有更新干货了,一直有点忙,而且这中间还有曲折过程,也就没有更新文章. 但今天无论如何也要更新一篇文章,接下来是爬虫高级篇重点讲解的地方! 最近会连载Scrap...

Python绿色通道
2018/04/22
0
0
爬虫入门之Scrapy框架基础LinkExtractors(十一)

1 parse()方法的工作机制: 2 CrawlSpiders:定义了一些规则跟进link 通过下面的命令可以快速创建 CrawlSpider模板 的代码: 上一个案例中,我们通过正则表达式,制作了新的url作为Request请求...

善良小郎君
2018/07/07
0
0
Scrapy框架CrawlSpiders的介绍以及使用

CrawlSpiders是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工...

博行天下
2017/11/28
0
0
Python3爬虫视频学习教程

大家好哈,现在呢静觅博客已经两年多啦,可能大家过来更多看到的是爬虫方面的博文,首先非常感谢大家的支持,希望我的博文对大家有帮助! 最近,主要的任务就是开发性感美女图片大全,使用p...

yangjiyue0520
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
44分钟前
3
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
今天
363
14
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部