使用Scrapy框架和Crawspider类爬取新浪新闻

上一篇文章已经说了怎么安装sarapy,这次就直接拿新浪试试!!
安装sprapy:↓
https://www.jianshu.com/p/ddf57836d625

CrwlSpider允许用户根据一定的URl规则提取跟进的链接,因为一般的网站设计URL都符合一定的规则,CrwlSpider正式利用这种URl构造跟进链接。

1、rules:
rules是规则对象的集合,也就是说爬取规则是在rules中定义,可定义多条规则,如果多个Rule匹配了相同的链接,则根据定义顺序,使用第一个。

2、爬取规则:
link_extractor被称为链接提取器,用它来定义具体的爬取规则,也就是说如何从爬取的页面提取链接并且可方便的过滤选项:
①. allow:值为正则表达式或正则表达式列表,当URL匹配时提取这个规则,它为空或者没有指定,将匹配所有连接。
②. deny值为正则表达式或正则表达式列表,URL匹配时不提取,优先于allow,它为空或者没有指定,将匹配所有连接。

废话不多说,“翠花,上代码。。。”
开始spider:
1、首先建立项目,使用crawl模板生成spider文件

scrapy startproject pachong6   #建立项目
图片.png
cd pachong6  #进入项目
scrapy genspider -t crawl sina sina.com  #使用crawl 生成spider文件
图片.png

查看项目内文件,已经全部生成


图片.png

2、定义爬取数据,打开项目内items文件,定义爬取项
(为定义演示用,只爬取三项:新闻标题,发布时间和新闻url)


图片.png

注意:使用文本编辑器编辑完内容时,记得TAB转为空格


图片.png

3、分析新浪新闻
https://www.sina.com.cn/

图片.png

发现每条新闻的链接都是
开头:news.sina.com.cn****
结尾:(7位数字).shtml

图片.png

知道了新浪新闻的URl规则,就好爬了

4、编写spider文件
生成的项目中spiders文件夹下sina.py
比如我的:
pachong6/spiders/sina.py
打开这个文件会发现,scrapy已经帮我们把大部分都生成好了,只要自己再稍微改动下就好了!


图片.png

其中:
name=定义的爬虫的名字
allowed_domains=定义爬取的域名,不在此域名中会被过滤
start_urls=默认爬取的地址,爬虫默认从start_urls爬取

5、开始编写爬虫:
①. 在生成的文件中改动相关内容


图片.png

②. 最核心的一步,定义链接提取规则


图片.png

follow默认为True,
follow是一个布尔值,指定这个规则从response提取的链接是否跟进,
也就是说在你打开的这个新闻页面下还有别的新闻链接并且url和规则定义的匹配,那么爬虫会继续跟进这个url,爬取你想要的内容,知道爬取完整个网站。

至此,短短几行就完成了整个新浪新闻的爬取
人生苦短,我用py

6、运行爬虫文件
在含有‘scrapy.cfg’文件路径下,也就是项目的根目录,打开cmd
输入命令

scrapy list  #检查是否有格式错误

继续执行命令

scrapy crawl sina -o sina.csv   #运行爬虫并保存到csv文件或者json文件(sina.json)

爬虫正常运行,爬取到数据已经在下方输出了


图片.png

查看生成的csv文件,保存正确。


图片.png

注:如果保存csv文件未乱码,打开爬虫项目中settings.py
在其中添加

FEED_EXPORT_ENCODING = "gb18030" #防止写入csv乱码

保存文件,再次运行爬虫就不会乱码了。
settings.py是爬虫框架的设置文件,请求头和间隔时间都在这里设置。

如果爬取到的内容为空,查看是否Xpath是否正确
项目根目录中,打开cmd,输入

scrapy shell  (url地址)
图片.png

最后,附完整代码
items文件

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class Pachong4Item(scrapy.Item):
title = scrapy.Field()
data = scrapy.Field()
content_url = scrapy.Field()

sina文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from pachong4.items import Pachong4Item


class SinaSpider(CrawlSpider):
    name = 'sina'
    allowed_domains = ['sina.com.cn']
    start_urls = ['https://www.sina.com.cn/']

    rules = (
        Rule(LinkExtractor(allow=r'https://news.sina.com.cn/.*.shtml?'), callback='parse_item',
        follow=True),
    )

    def parse_item(self, response):
        item = Pachong4Item()
        item['title'] = response.xpath('/html/body/div[2]/h1/text()').extract_first()
        item['data'] = response.xpath('//*[@id="top_bar"]/div/div[2]/span/text()').extract_first()
        item['content_url'] = response.xpath('/html/head/meta[10]/@content').extract_first()
        return item

只需要几条规则,就可以爬取整个网站,是不是特别简单?
已经非常接近通用爬虫了!!!

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

推荐阅读更多精彩内容