scrapy分頁抓取川大公管學院老師信息

關于任務思考:
1.確定爬蟲入口:

start_urls = [
        'http://ggglxy.scu.edu.cn/index.php?c=article&a=type&tid=18&page_1_page=1',
    ]

確定爬蟲入口應該是編寫爬蟲的第一步,但是很不幸抢肛,我在第一步就走偏了
狼钮,從公共管理學院首頁進到師資隊伍頁面獲得的網(wǎng)址是

http://ggglxy.scu.edu.cn/index.php?c=article&a=type&tid=18

但是從這個網(wǎng)址我無法獲得下一頁的絕對鏈接,在執(zhí)行爬蟲的過程中捡絮,我就遇上了URLERROR的錯誤熬芜。

  1. 爬取思路:
圖片.png

從這張圖,可以看出锦援,我們可以在目錄頁抓取教師姓名猛蔽、教師職位、教師所屬專業(yè)灵寺、教師郵箱曼库,因此我們只需要在詳情頁獲取教師的簡介就可以了筐咧。

下一頁.png

從網(wǎng)站的目錄頁中微姊,每頁有八項數(shù)據(jù),我需要拿到每一項的數(shù)據(jù)的鏈接袱衷,同時還需要拿到「下一頁」的鏈接叮称。因為下一頁的結構和第一頁的結構相同种玛,所以我將下一頁的連接傳給pasre處理,而每一項數(shù)據(jù)的鏈接交給pasre_content處理瓤檐。

  1. 代碼實現(xiàn):
    3.1 items.py文件:
class TeacherItem(scrapy.Item)
     name = scrapy.Field()    #教師姓名
     position = scrapy.Field()  #教師職位
     intro = scrapy.Field()   #教師   
     email = scrapy .Field() #教師郵箱
     major = scrapy.Field()#教師所屬專業(yè)
     pass

3.2 spider代碼:
處理目錄頁的教師信息的代碼:

 def parse(self,response):
        for quote in response.css('ul.teachers_ul.mt20.cf li.fl'):
            item = TeacherItem()
            item['name'] = quote.css('div.r.fr h3.mb10::text').extract_first()#教師名字
            item['position'] = quote.css('div.r.fr p.color_main.f14::text').extract_first()#教師職位
            item['major'] = quote.css('div.r.fr div.desc p::text').extract_first()#教師所屬專業(yè)
            item['email'] = response.xpath('//div[@class="r fr"]/div[@class="desc"]/p[last()]/text()').extract()#教師郵箱
            url = response.urljoin(quote.css('div.l.fl a::attr("href")').extract_first())#教師詳情頁鏈接
            request=scrapy.http.Request(url,callback=self.parse_content)#將獲取的信息傳給詳情頁處理器
            request.meta['item']=item
            yield request

處理下一頁的鏈接的代碼:

      next_page = response.xpath('//div[@class="pager cf tc pt10 pb10 mobile_dn"]/li[last()-1]/a/@href').extract_first()   #獲取下一頁的鏈接
        if next_page is not None:
            next_full_url = response.urljoin(next_page)
            yield scrapy.Request(next_full_url, callback=self.parse)  #判斷是有有下一頁赂韵,有的話,就將url傳給自身

處理每一項數(shù)據(jù)鏈接的代碼:

 def parse_content(self,response):
        for site in response.css('div.js_infobox.cf'):
            item = response.meta['item']#接收meta傳遞過來的數(shù)據(jù)挠蛉,即姓名祭示、郵箱、職位等信息
            item['intro']= site.css('div.r.fr div.desc::text').extract_first()
            yield item

在編寫這個代碼的過程中谴古,我認為元素的定位是最難的质涛,路徑不對數(shù)據(jù)就爬不出。
3.3 執(zhí)行爬蟲
同樣使用scrapy crawl quotes命令來執(zhí)行爬蟲掰担,爬取之后下載文件汇陆,打開:

數(shù)據(jù).png

由于文件默認的是unicode編碼格式,所以我爬取到的數(shù)據(jù)是一堆我看不懂數(shù)據(jù)带饱。我首先嘗試了同學使用過并可行的
scrapy crawl quotes -o teacher.json -s FEED_EXPORT_ENCODING=utf-8
命令毡代,結果生成的還是unicode編碼格式的文件。
3.4 處理unicode編碼問題
通過網(wǎng)上查找,我運用了下面的方法解決問題:
修改pipelines.py文件:

import json
import codecs


class QuotesPipeline(object):
    def __init__(self):
        self.file =codecs.open('teacher.json','wb',encoding='utf-8')
    def process_item(self, item, spider):
        line=json.dumps(dict(item))+'\n'
        self.file.write(line.decode("unicode_escape"))
        return item

在pipelines.py這個文件中月趟,通過編寫QuotesPipeline來實現(xiàn)對item的處理灯蝴。它主要完成數(shù)據(jù)的查重、丟棄孝宗,驗證item中的數(shù)據(jù),將得到的item數(shù)據(jù)保存等工作耕肩。其中 process_item方法將得到的item實現(xiàn)解碼因妇,以便正常顯示中文,最終保存到json文件中猿诸。
在編寫完pipelines.py后婚被,為了啟動它,必須將其加入到ITEM_PIPELINES配置中:

ITEM_PIPELINES = {
    'quotes.pipelines.QuotesPipeline':300
}

修改完這些文件后梳虽,我再次執(zhí)行spiders址芯,將得到的結果保存并下載:

圖片.png

這次,數(shù)據(jù)顯示正常窜觉,共抓取到了128位老師的信息谷炸,其中包括了教師的姓名、職位禀挫、所屬專業(yè)旬陡、郵箱與簡介。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末语婴,一起剝皮案震驚了整個濱河市描孟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砰左,老刑警劉巖匿醒,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缠导,居然都是意外死亡廉羔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門酬核,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜜另,“玉大人,你說我怎么就攤上這事嫡意【俟澹” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵蔬螟,是天一觀的道長此迅。 經常有香客問我,道長,這世上最難降的妖魔是什么耸序? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任忍些,我火速辦了婚禮,結果婚禮上坎怪,老公的妹妹穿的比我還像新娘罢坝。我一直安慰自己,他們只是感情好搅窿,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布嘁酿。 她就那樣靜靜地躺著,像睡著了一般男应。 火紅的嫁衣襯著肌膚如雪闹司。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天沐飘,我揣著相機與錄音游桩,去河邊找鬼。 笑死耐朴,一個胖子當著我的面吹牛借卧,可吹牛的內容都是我干的。 我是一名探鬼主播隔箍,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谓娃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜒滩?” 一聲冷哼從身側響起滨达,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俯艰,沒想到半個月后捡遍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡竹握,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年画株,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦辐。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谓传,死狀恐怖,靈堂內的尸體忽然破棺而出芹关,到底是詐尸還是另有隱情续挟,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布侥衬,位于F島的核電站诗祸,受9級特大地震影響跑芳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜直颅,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一博个、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧功偿,春花似錦盆佣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至养葵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘩缆,已是汗流浹背关拒。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庸娱,地道東北人着绊。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像熟尉,于是被迫代替她去往敵國和親归露。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容