使用Scrapy框架和Crawspider類爬取新浪新聞

上一篇文章已經(jīng)說了怎么安裝sarapy,這次就直接拿新浪試試??!
安裝sprapy:↓
http://www.itdecent.cn/p/ddf57836d625

CrwlSpider允許用戶根據(jù)一定的URl規(guī)則提取跟進(jìn)的鏈接,因?yàn)橐话愕木W(wǎng)站設(shè)計(jì)URL都符合一定的規(guī)則,CrwlSpider正式利用這種URl構(gòu)造跟進(jìn)鏈接。

1、rules:
rules是規(guī)則對(duì)象的集合,也就是說爬取規(guī)則是在rules中定義,可定義多條規(guī)則,如果多個(gè)Rule匹配了相同的鏈接,則根據(jù)定義順序,使用第一個(gè)。

2、爬取規(guī)則:
link_extractor被稱為鏈接提取器,用它來定義具體的爬取規(guī)則,也就是說如何從爬取的頁面提取鏈接并且可方便的過濾選項(xiàng):
①. allow:值為正則表達(dá)式或正則表達(dá)式列表,當(dāng)URL匹配時(shí)提取這個(gè)規(guī)則,它為空或者沒有指定,將匹配所有連接。
②. deny值為正則表達(dá)式或正則表達(dá)式列表,URL匹配時(shí)不提取,優(yōu)先于allow,它為空或者沒有指定,將匹配所有連接。

廢話不多說,“翠花,上代碼。。?!?br> 開始spider:
1、首先建立項(xiàng)目,使用crawl模板生成spider文件

scrapy startproject pachong6   #建立項(xiàng)目
圖片.png
cd pachong6  #進(jìn)入項(xiàng)目
scrapy genspider -t crawl sina sina.com  #使用crawl 生成spider文件
圖片.png

查看項(xiàng)目內(nèi)文件,已經(jīng)全部生成


圖片.png

2、定義爬取數(shù)據(jù),打開項(xiàng)目內(nèi)items文件,定義爬取項(xiàng)
(為定義演示用,只爬取三項(xiàng):新聞標(biāo)題,發(fā)布時(shí)間和新聞url)


圖片.png

注意:使用文本編輯器編輯完內(nèi)容時(shí),記得TAB轉(zhuǎn)為空格


圖片.png

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

圖片.png

發(fā)現(xiàn)每條新聞的鏈接都是
開頭:news.sina.com.cn****
結(jié)尾:(7位數(shù)字).shtml

圖片.png

知道了新浪新聞的URl規(guī)則,就好爬了

4、編寫spider文件
生成的項(xiàng)目中spiders文件夾下sina.py
比如我的:
pachong6/spiders/sina.py
打開這個(gè)文件會(huì)發(fā)現(xiàn),scrapy已經(jīng)幫我們把大部分都生成好了,只要自己再稍微改動(dòng)下就好了!


圖片.png

其中:
name=定義的爬蟲的名字
allowed_domains=定義爬取的域名,不在此域名中會(huì)被過濾
start_urls=默認(rèn)爬取的地址,爬蟲默認(rèn)從start_urls爬取

5、開始編寫爬蟲:
①. 在生成的文件中改動(dòng)相關(guān)內(nèi)容


圖片.png

②. 最核心的一步,定義鏈接提取規(guī)則


圖片.png

follow默認(rèn)為True,
follow是一個(gè)布爾值,指定這個(gè)規(guī)則從response提取的鏈接是否跟進(jìn),
也就是說在你打開的這個(gè)新聞頁面下還有別的新聞鏈接并且url和規(guī)則定義的匹配,那么爬蟲會(huì)繼續(xù)跟進(jìn)這個(gè)url,爬取你想要的內(nèi)容,知道爬取完整個(gè)網(wǎng)站。

至此,短短幾行就完成了整個(gè)新浪新聞的爬取
人生苦短,我用py

6、運(yùn)行爬蟲文件
在含有‘scrapy.cfg’文件路徑下,也就是項(xiàng)目的根目錄,打開cmd
輸入命令

scrapy list  #檢查是否有格式錯(cuò)誤

繼續(xù)執(zhí)行命令

scrapy crawl sina -o sina.csv   #運(yùn)行爬蟲并保存到csv文件或者json文件(sina.json)

爬蟲正常運(yùn)行,爬取到數(shù)據(jù)已經(jīng)在下方輸出了


圖片.png

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


圖片.png

注:如果保存csv文件未亂碼,打開爬蟲項(xiàng)目中settings.py
在其中添加

FEED_EXPORT_ENCODING = "gb18030" #防止寫入csv亂碼

保存文件,再次運(yùn)行爬蟲就不會(huì)亂碼了。
settings.py是爬蟲框架的設(shè)置文件,請(qǐng)求頭和間隔時(shí)間都在這里設(shè)置。

如果爬取到的內(nèi)容為空,查看是否Xpath是否正確
項(xiàng)目根目錄中,打開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

只需要幾條規(guī)則,就可以爬取整個(gè)網(wǎng)站,是不是特別簡單?
已經(jīng)非常接近通用爬蟲了?。。?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 相關(guān)代碼參見:https://github.com/snowcement/Knowledge-Graph-rela...
    CherrySSS閱讀 2,388評(píng)論 0 0
  • 一、什么是Scrapy? Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,非常出名,非常強(qiáng)悍。...
    SlashBoyMr_wang閱讀 1,968評(píng)論 1 9
  • 資本主義教條 金錢自誕生以來,就一直在人類歷史中占據(jù)重要地位。 我們很難掌握金錢在現(xiàn)代歷史中究竟扮演了什么角色。雖...
    讀者_(dá)在路上閱讀 560評(píng)論 0 0
  • 一個(gè)人在脫離這個(gè)世界的一切以后,會(huì)變成什么,當(dāng)他作為一個(gè)冷眼旁觀的人時(shí),會(huì)變成什么樣,又有什么感覺? 那個(gè)時(shí)候,親...
    怯秋日志閱讀 281評(píng)論 0 1
  • 今晚細(xì)爹過來問最近有沒有人來說媒,然后又說年前說的那家人挺好的,可以相處試試……聽到這個(gè)問題第一個(gè)反應(yīng)是:結(jié)婚有什...
    沙漠中的月牙湖閱讀 468評(píng)論 0 0

友情鏈接更多精彩內(nèi)容