Python爬蟲(chóng)筆記(4):利用scrapy爬取豆瓣電影250

在網(wǎng)上閱讀有關(guān)scrapy的教程也有一段時(shí)間了,可是一直沒(méi)能真正寫出能爬出數(shù)據(jù)的代碼。。。今天趁著有點(diǎn)時(shí)間,趕快實(shí)戰(zhàn)一下吧!

目標(biāo):豆瓣電影250

為啥選它呢,因?yàn)榫W(wǎng)上有關(guān)爬取豆瓣電影的教程多呀,可以很容易的復(fù)刻他人的代碼,少走彎路。
可是,可是,萬(wàn)萬(wàn)沒(méi)想到的是,這次的寫爬蟲(chóng)過(guò)程中我?guī)缀醢涯懿鹊目尤葌€(gè)遍,菜鳥(niǎo)的煩惱~ 。~
同時(shí)我也明白了,人家的以前寫的代碼,擱到現(xiàn)在未必全部適用。

先把寫的流程過(guò)一下,然后在慢慢填坑。

至于詳細(xì)的教程可以參考scrapy中文網(wǎng)

  1. 首先,打開(kāi)cmd,切換到你希望的路徑中,啟動(dòng)項(xiàng)目
scrapy startproject douban
  1. 打開(kāi)pycharm,找到所在的項(xiàng)目的文件夾并打開(kāi),如圖


    圖1.png
  2. 在items.py填寫代碼如下
import scrapy


class DoubanItem(scrapy.Item):
    ranking = scrapy.Field() # 排名
    name = scrapy.Field() #電影名稱
    score = scrapy.Field() #得分
    people_mun = scrapy.Field() #評(píng)價(jià)人數(shù)
    introduction = scrapy.Field() #電影簡(jiǎn)介
  1. 在spiders文件夾下創(chuàng)建douban_spider.py文件,然后填寫代碼如下
import scrapy
from douban.items import DoubanItem


class DoubanSpiderSpider(scrapy.Spider):
    name = 'douban_spider' #定義爬蟲(chóng)的名字
    start_urls = ['https://movie.douban.com/top250?start=0&filter='] #爬取的起始頁(yè)

#定義解析函數(shù),用來(lái)解析返回的response對(duì)象
    def parse(self, response):
        #用xpath選擇器提取數(shù)據(jù)
        infos = response.xpath("http://ol[@class='grid_view']/li")
        for info in infos:
            ranking = info.xpath(".//div[@class='pic']/em/text()").get()
            name = info.xpath(".//div[@class='hd']/a/span[1]/text()").get()
            score = info.xpath(".//div[@class='star']/span[2]/text()").get()
            people_mun = info.xpath(".//div[@class='star']/span[4]/text()").get()
            introduction = info.xpath(".//p[@class='quote']/span/text()").get()
            item = DoubanItem(ranking=ranking, name=name, score=score, people_mun=people_mun, introduction=introduction)
            yield item
        next_url = response.xpath("http://span[@class='next']/a/@href").get() #獲取下一頁(yè)鏈接

        if not next_url:
            return
        else:
            next_url = 'https://movie.douban.com/top250'+next_url #將獲取的下一頁(yè)鏈接拼接完整
            yield scrapy.Request(next_url, callback=self.parse) #將提取的URL返回給解析函數(shù)
  1. 最后在所在項(xiàng)目的文件夾下運(yùn)行power shell,輸入如下
scrapy crawl douban_spider -o douban.csv

scrapy就會(huì)自動(dòng)將提取的數(shù)據(jù)保存到CSV文件當(dāng)中去。

可是現(xiàn)實(shí)往往沒(méi)有那么美好,下面就是我開(kāi)始填坑的辛苦路程了。。。

  • 首先,返回的是403還是什么的,弄得我一臉懵逼,什么鬼,網(wǎng)不好嗎?
    突然間,我靈光一閃,憑著那僅有的一丟丟經(jīng)驗(yàn),headers浮現(xiàn)在了腦海當(dāng)中。
    headers是放在哪里的?settings.py!
  • 好了終于有數(shù)據(jù)了!心里一陣激動(dòng),mmp,怎么只有前25條電影數(shù)據(jù)?
    眼尖的我發(fā)現(xiàn)了這個(gè)
    圖2.png

    還好我看過(guò)scrapy中文網(wǎng)中的采花大盜教程,跟著在Middleware中設(shè)置一遍
 def process_request(self, request, spider):
        referer = request.url
        if referer:
            request.headers['Referer'] = referer

然后再在settings里面啟動(dòng)middleware


圖3.png

但是應(yīng)該打開(kāi)的是紅箭頭所示的,而不是綠箭頭的,這又是一個(gè)坑,自己沒(méi)動(dòng)腦子就踩上去了。。。

  • 其實(shí)除了這些還有很多磕磕絆絆呢,像是我沒(méi)有拼接next_url,start_url設(shè)置成了‘https://movie.douban.com/top250’,自作聰明的添加了allowed_domains導(dǎo)致爬取出錯(cuò)。。。都是淚啊~~~

最后貼上第一個(gè)scrapy爬到的成果吧


圖4.png

作為一個(gè)全靠自己摸索前進(jìn)的菜鳥(niǎo)的學(xué)習(xí)之路,就是一個(gè)踩坑填坑的過(guò)程,但是當(dāng)你踩的坑多了,那說(shuō)明,你浪費(fèi)的時(shí)間也就多了! _ !

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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