Scrapy入門案例——爬取豆瓣電影

請(qǐng)謹(jǐn)記如下三條命令:

scrapy startproject xxx    創(chuàng)建scrapy項(xiàng)目
scrapy genspider xxx "xxx.com"  創(chuàng)建爬蟲spider,名字不能和項(xiàng)目名一樣
scrapy crawl xxx  運(yùn)行某個(gè)爬蟲項(xiàng)目

首先scrapy startproject douban 建立項(xiàng)目,其次切換到spiders目錄下,scrapy genspider douban_movie 建立爬蟲。

我們要爬取的數(shù)據(jù)很簡(jiǎn)單,是豆瓣電影排行榜。之所以說它簡(jiǎn)單是因?yàn)樗?qǐng)求返回的數(shù)據(jù)我們可以轉(zhuǎn)換成規(guī)整的json列表,并且獲取分頁鏈接也很簡(jiǎn)單。



我們只獲得title和url的信息。明確了請(qǐng)求目標(biāo)后,我們開始編寫items

import scrapy

class DoubanItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()

其次編輯spiders下的爬蟲文件

# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
import json


class DoubanMovieSpider(scrapy.Spider):
    name = 'douban_movie'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20']
    offset = 0
    def parse(self, response):
        item = DoubanItem()
        content_list = json.loads(response.body.decode())
        if (content_list == []):
            return
        for content in content_list:
            item['title'] = content['title']
            item['url'] = content['url']
            yield item
        self.offset += 20
        url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start='+str(self.offset) + '&limit=20'
        yield scrapy.Request(url=url,callback=self.parse)

response.body 獲得數(shù)據(jù)是<class 'bytes'>型,我們需要轉(zhuǎn)換為str型,response.body.decode()。然后通過json.loads()將字符串裝換成json 列表,列表里的元素其實(shí)就是dict型。

然后保存數(shù)據(jù),編輯pipelines.py

import json

class DoubanPipeline(object):
    def open_spider(self,spider):
        self.file = open("douban.json","w")
        self.num = 0
    def process_item(self, item, spider):
        self.num+=1
        content = json.dumps(dict(item),ensure_ascii=False)+'\n'
        self.file.write(content)
        return item
    def close_spider(self,spider):
        print('一共保存了'+str(self.num)+'條數(shù)據(jù)')
        self.file.close()

在運(yùn)行前需要設(shè)置settings.py


#打開這兩個(gè)注釋:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36'  #模擬瀏覽器

ITEM_PIPELINES = {
   'douban.pipelines.DoubanPipeline': 300,
}   #編輯好管道要記得注冊(cè)管道

#ROBOTSTXT_OBEY = True  注釋掉robot協(xié)議,不然會(huì)報(bào)錯(cuò)

項(xiàng)目源碼:
https://gitee.com/stefanpy/Scrapy_projects/tree/dev/douban

推薦Scrapy學(xué)習(xí)網(wǎng)站:http://www.scrapyd.cn/

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

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

  • 這兩天摸索了下scrapy,剛看文檔的時(shí)候覺得有點(diǎn)生無可戀,scrapy框架個(gè)人還是覺得比較難懂的,需要學(xué)習(xí)的地方...
    Treehl閱讀 5,844評(píng)論 7 10
  • 背景知識(shí) (一)什么是Scrapy呢?Python上優(yōu)秀的爬蟲框架。什么是爬蟲?可以看我的心得感悟,也可以自行谷歌...
    xuzhougeng閱讀 5,346評(píng)論 8 42
  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎(chǔ)第4章 從Scrapy到移動(dòng)應(yīng)用第5章...
    SeanCheney閱讀 15,258評(píng)論 13 61
  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 13,084評(píng)論 4 46
  • 用網(wǎng)上學(xué)來的神招拍照,笑死了,一點(diǎn)美感都沒有,還留了個(gè)大白光。 云朵得鵝口瘡一個(gè)多月了,今天問了鄰居大夫,重新?lián)Q藥...
    冰藍(lán)兒8閱讀 266評(píng)論 0 0

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