爬虫实战(二)之 CrawlSpider 爬取新闻网

前面我们已经使用Scrapy实现过自动爬取网页功能的实现,其实,在 Scrapy 中,提供了一种自带的自动爬取网页的爬虫 CrawlSpider,我们可以使用 CrawlSpider 轻松实现网页的自动爬取,关于 CrawlSpider 的基础知识请参照官网:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html#crawlspider

下面我们直接上案例,目标:新闻网符合链接的新闻标题,发布时间、来源(http://news.sohu.com/

首先在指定目录下创建一个爬虫项目:scrapy startprojects mycwpjt
接下来进入spisers目录中先查看下爬虫模板:scrapy genspider -l


12.png

然后根据 crawl 模板创建爬虫文件:scrapy genspider -t crawl crawlsohu sohu.com

项目建立好以及爬虫文件也创建了之后,我们根据需要爬取的信息信息效果图编写 Items.py 文件:

10.png
代码如下:
import scrapy

class MycwpjtItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #新闻网信息
    title = scrapy.Field()
    time = scrapy.Field()
    source = scrapy.Field()

编写爬虫文件之前我们在观察下需要请求的链接的规律:

9.png
从图中的红色边框可以看出我们需要爬取的规律:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from mycwpjt.items import MycwpjtItem


class CrawlsohuSpider(CrawlSpider):
    name = 'crawlsohu' #爬虫名
    # allowed_domains = ['lagou.com'] #指定爬取的网站域名
    start_urls = ['http://news.sohu.com/'] #爬取的起始网址

    # rules 自动爬行的规则 
    # LinkExtractor 为链接提取器,一般可以用来提取页面中满足条件的链接,以供下一次爬行使用
    # parse_item 编写爬虫的处理过程
    # follow 是否循环抓取
    rules = (
        Rule(LinkExtractor(allow=('http://www.sohu.com/a/230.*?')), callback='parse_item', follow=True),
    )


    def parse_item(self, response):
        
        item_news = MycwpjtItem()

        #根据 XPath 表达式提取新闻网页中的标题、发布时间、信息来源
        item_news['title'] = response.xpath('//div[@class="text-title"]/h1/text()').extract_first()
        item_news['time'] = response.xpath('//span[@id="news-time"]/text()').extract_first()
        item_news['source'] = response.xpath('//span[@data-role="original-link"]/a/text()').extract_first()

        return item_news


获取得我们想要爬取的数据之后,我们就可以对数据进行处理了,打开我们的管道文件 pipelines.py :
import json

class MycwpjtPipeline(object):

    def __init__(self):#初始化
        self.f = open("news.json", "w", encoding="utf-8")


    def process_item(self, item, spider):
        #先转换成字典然后保存为json文件
        content = json.dumps(dict(item), ensure_ascii = False) +",\n" #换行并且没有分隔符
        #输出测试
        print("输出-> %s"%content)
        #写入本地
        self.f.write(content)

        return item


    def close_spider(self, spider):#关闭
        self.f.close()


最后一步我们在配置文件中设置启用管道文件以及常用的设置:
#设置请求头  - 用户代理
DEFAULT_REQUEST_HEADERS = {
  'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}

#禁用 COOKIE
COOKIES_ENABLED = False

ITEM_PIPELINES = {
   'mycwpjt.pipelines.MycwpjtPipeline': 300,
}

#设置下载延时
DOWNLOAD_DELAY = 0.3 

# Obey robots.txt rules
ROBOTSTXT_OBEY = False


搞到这里,项目就算完成了,其实和我们 basic 模板的不同之处最主要就是 爬虫文件实现的机制不一样而已,其余的基本一致,好了,我们运行一下项目就可以看到效果了:


11.png
相信这个案例之后,同学们对 CrawlSpider 也算入门了,嘿嘿,接下来使用这个模板去爬取一下 “拉勾网的职位信息” 吧!!!祝你好运,^_^
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容