四川大學公共管理學院新聞內容爬取

目錄##

  • 任務內容
  • 爬取過程
  • 總結

<b>任務內容</b>
此次抓取的內容為四川大學公共管理學院新聞專欄里的新聞觅玻,包括新聞的時間垢箕、標題站辉、圖片以及詳情內容呢撞。

xinwen.png

這是需要爬的新聞

neirong.png

這是新聞的詳情

yeshu.png

這是總新聞數(shù)(目前為止)

<b>爬取過程</b>
1.首先創(chuàng)建一個新聞工程,并修改其中的items.py文件

創(chuàng)建項目.jpg

創(chuàng)建了一個名為“news”的項目

gaiitems.png

修改了items.py文件饰剥,其中的time殊霞、detail、title汰蓉、picture是采集的時間绷蹲、新聞詳情、標題顾孽、圖片祝钢。day是我采集過程中需要到的一個具體日期項(后有說明原因)。

2.一步一步漸進的抓取過程
秉乘著我一貫小心翼翼的態(tài)度若厚,我的抓取過程是慢慢來的拦英,首先是爬取一頁新聞列表(不包括新聞詳情里面的內容),然后開始加入多頁爬取测秸,再到爬取多頁的新聞詳情(雖然過程比較麻煩龄章,但是這樣的方法能夠使錯誤發(fā)現(xiàn)得快,且思路較清晰乞封,容易跟得上)做裙。
<p>> 2.1爬取一頁新聞列表
爬取一頁新聞列表的代碼就比較簡單了,這也是最開始學習爬蟲的時候學習的代碼肃晚。
這一步只需要采集新聞的標題和時間锚贱。

import scrapy
from news.items import NewsItem

class newsspider(scrapy.Spider):import scrapy
    name = "news"
    start_urls = ['http://ggglxy.scu.edu.cn/index.php?c=special&sid=1']

    def parse(self, response):
       for new in response.xpath('//div[@class="newsinfo_box cf"]'):
            item = NewsItem()
            item['time'] = new.xpath('div[@class="date fl"]/span/text()').extract()
            item['day'] = new.xpath('div[@class="date fl"]/p/text()').extract()
            item['title'] = new.xpath('div[@class="news_c fr"]/h3[@class="mb10"]/a/text()').extract()
            yield item  

解析:這是在新聞列表頁爬取的時間及標題數(shù)據(jù),在列表頁关串,可以看到時間的“年-月”和“日”是分開的拧廊,這是因為列表頁將日期做成一個日歷格式的原因,所以在源代碼中晋修,他們在不同的地方吧碾。所以我在時間上用了兩個參數(shù):time、day墓卦,一個爬年月倦春,一個爬日

1.png

爬取結果顯示
danye1.png

結果中的中文顯示得是亂碼,百度以后查到是編碼問題,隨后去修改了settings.py文件睁本。增加一行代碼:
FEED_EXPORT_ENCODING = 'utf-8'
<p>重新爬取以后尿庐,結果就對了。
danye2.png

<p>> 2.2爬取多頁新聞列表
爬取多頁需要加入循環(huán)爬取下一頁的代碼呢堰。

import scrapy
from news.items import NewsItem

class newsspider(scrapy.Spider):
    name = "news"
    start_urls = ['http://ggglxy.scu.edu.cn/index.php?c=special&sid=1']

    def parse(self, response):
        for new in response.xpath('//div[@class="newsinfo_box cf"]'):
            item = NewsItem()
            item['time'] = new.xpath('div[@class="date fl"]/span/text()').extract()
            item['day'] = new.xpath('div[@class="date fl"]/p/text()').extract()
            item['title'] = new.xpath('div[@class="news_c fr"]/h3[@class="mb10"]/a/text()').extract()
            yield item

        next_page = response.xpath('//div[@class="pager cf tr pt10 pb10 mt30 mobile_dn"]/li[last()-1]/a/@href').extract_first()
        last_page = response.xpath('//div[@class="pager cf tr pt10 pb10 mt30 mobile_dn"]/li[last()]/a/@href').extract_first()
        if last_page is not None:
           next_page = response.urljoin(next_page)
           yield scrapy.http.Request(next_page, callback=self.parse)  

解析:在爬取下一頁時抄瑟,發(fā)現(xiàn)這個網站爬的下一頁有些問題

duoye1.png

從網站源代碼的分頁代碼中可以看出,它的下一頁是沒有標志屬性的枉疼,都是統(tǒng)一的li標簽皮假,如果在寫路徑的時候直接寫li,爬蟲是無法去按我們想的那樣去爬下一頁鏈接骂维。這時候就需要寫一些屬性讓爬蟲識別钞翔。還好的是它的順序都是最后一項是“尾頁”,倒數(shù)第二項是“下一頁”席舍,這樣只要li中增加[last()-1]的謂語,就能夠順利爬到下一頁的鏈接哮笆。但是即使這樣来颤,還是出現(xiàn)一個問題。

duoye2.png

duoye3.png

圖中可以看出稠肘,在新聞的最后一頁福铅,它沒有尾頁也沒有下一頁選項,它的倒數(shù)第二個選項是第九頁项阴。這就尷尬了滑黔,如果按照這個方法爬取,它分頁循環(huán)爬取的時候环揽,無法判斷是否已經達到最后一頁略荡,最后會在第九頁和第十頁之間反復爬取。這時候歉胶,就需要設置一個判斷汛兜,判斷它是否是到了最后一頁。仔細看最后一頁的源代碼通今,可以看到其最后一個li是沒有鏈接的V嗝!辫塌!這時候漏策,我們可以利用這一點,判斷其最后一個li是否有鏈接臼氨,如果沒有了掺喻,它就是最后一頁,停止繼續(xù)爬行。

duoye4.png

這是爬取所有新聞的列表巢寡,共191條喉脖。

<p>> 2.3爬取多頁新聞列表詳情
爬取多頁的時候仍然遇到了問題,我們需要鏈接鏈到詳情頁里面爬取新聞的內容和圖片抑月,這樣的話需要在當前頁面爬時間树叽,爬標題,再進入鏈接里面爬內容谦絮。這樣的話要分兩個函數(shù)(是應該稱為函數(shù)嗎题诵?)進行爬取,中間還有點繞层皱。但我發(fā)現(xiàn)詳情頁面有時間和標題性锭,突然頓悟可以直接鏈接進去進行需要的全部數(shù)據(jù)爬取,于是叫胖,把之前的代碼改動了一些践樱,進行爬取。

import scrapy
from news.items import NewsItem

class newsspider(scrapy.Spider):
    name = "news"
    start_urls = ['http://ggglxy.scu.edu.cn/index.php?c=special&sid=1']

    def parse(self, response):
        for href in response.xpath('//div[@class="news_c fr"]/h3[@class="mb10"]/a/@href').extract():
        yield scrapy.http.Request(response.urljoin(href), callback=self.parse_news)

        next_page = response.xpath('//div[@class="pager cf tr pt10 pb10 mt30 mobile_dn"]/li[last()-1]/a/@href').extract_first()
        last_page = response.xpath('//div[@class="pager cf tr pt10 pb10 mt30 mobile_dn"]/li[last()]/a/@href').extract_first()
        if last_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.http.Request(next_page, callback=self.parse)

    def parse_news(self, response):
        for new in response.xpath('//div[@class="right_info p20"]'):
            item = NewsItem()
            item['time'] = new.xpath('div[@class="detail_zy_title"]/p/text()').extract()
            item['title'] = new.xpath('div[@class="detail_zy_title"]/h1/text()').extract()
            item['detail'] = new.xpath('div[@class="detail_zy_c pb30 mb30"]/p/span/text()').extract()
            item['picture'] = new.xpath('div[@class="detail_zy_c pb30 mb30"]/p/img/@src').extract()
            yield item  

前一個def是進入鏈接敷硅,然后返回到第二個def進行數(shù)據(jù)爬取虱饿。

all.png

這個是爬取的最終結果。其中還有幾點其實應該進行完善绷跑。
第一拳恋,圖片只是一個路徑,無法顯示砸捏。
第二谬运,新聞詳細內容中,有些存在較多的空格及/n垦藏、/r等亂七八糟的東西梆暖。
但是心累了,以后再慢慢研究吧掂骏。

<b>總結</b>
我覺得自己這種一點一點進行的想法挺好式廷,至少我能懂它每一塊代碼在做什么,也能理清他們之間的關系芭挽。這個方法效率不高滑废,也當真花了不少的時間,但其中的收獲是滿滿的袜爪。
這次爬取過程懂得了分頁和鏈接詳情爬取蠕趁,確實比在課堂上做的那個好得多。糾錯的過程固然心累辛馆,但實踐出真知俺陋,挺有道理的豁延。
還需要學習同時爬取當前網頁及鏈接網頁內容的方法。再接再厲吧腊状。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末诱咏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缴挖,更是在濱河造成了極大的恐慌袋狞,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映屋,死亡現(xiàn)場離奇詭異苟鸯,居然都是意外死亡,警方通過查閱死者的電腦和手機棚点,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門早处,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘫析,你說我怎么就攤上這事砌梆。” “怎么了贬循?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵咸包,是天一觀的道長。 經常有香客問我甘有,道長,這世上最難降的妖魔是什么葡缰? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任亏掀,我火速辦了婚禮,結果婚禮上泛释,老公的妹妹穿的比我還像新娘滤愕。我一直安慰自己,他們只是感情好怜校,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布间影。 她就那樣靜靜地躺著,像睡著了一般茄茁。 火紅的嫁衣襯著肌膚如雪魂贬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天裙顽,我揣著相機與錄音付燥,去河邊找鬼。 笑死愈犹,一個胖子當著我的面吹牛键科,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼勋颖,長吁一口氣:“原來是場噩夢啊……” “哼嗦嗡!你這毒婦竟也來了?” 一聲冷哼從身側響起饭玲,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侥祭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咱枉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卑硫,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年蚕断,在試婚紗的時候發(fā)現(xiàn)自己被綠了欢伏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡亿乳,死狀恐怖硝拧,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情葛假,我是刑警寧澤障陶,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站聊训,受9級特大地震影響抱究,放射性物質發(fā)生泄漏。R本人自食惡果不足惜带斑,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一鼓寺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勋磕,春花似錦妈候、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赶站,卻和暖如春幔虏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贝椿。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工所计, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人团秽。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓主胧,卻偏偏與公主長得像叭首,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踪栋,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容