最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3 Scrapy庫(kù)安裝使用教程

 更新時(shí)間:2026年03月11日 09:38:41   作者:xcLeigh  
Scrapy是一個(gè)全功能的Python爬蟲(chóng)框架,內(nèi)置了請(qǐng)求處理、錯(cuò)誤重試、狀態(tài)跟蹤、分布式爬取等核心能力,支持高度自定義擴(kuò)展,廣泛用于數(shù)據(jù)挖掘、信息采集、歷史數(shù)據(jù)存儲(chǔ)等場(chǎng)景,本文介紹Python3 Scrapy庫(kù)安裝使用教程,感興趣的朋友跟隨小編一起看看吧

前言

    Python作為一門(mén)簡(jiǎn)潔、易讀、功能強(qiáng)大的編程語(yǔ)言,其基礎(chǔ)語(yǔ)法是入門(mén)學(xué)習(xí)的核心。掌握好基礎(chǔ)語(yǔ)法,能為后續(xù)的編程實(shí)踐打下堅(jiān)實(shí)的基礎(chǔ)。本文將全面講解Python3的基礎(chǔ)語(yǔ)法知識(shí),適合編程初學(xué)者系統(tǒng)學(xué)習(xí)。Python以其簡(jiǎn)潔優(yōu)雅的語(yǔ)法和強(qiáng)大的通用性,成為當(dāng)今最受歡迎的編程語(yǔ)言。本專(zhuān)欄旨在系統(tǒng)性地帶你從零基礎(chǔ)入門(mén)到精通Python核心。無(wú)論你是零基礎(chǔ)小白還是希望進(jìn)階的專(zhuān)業(yè)開(kāi)發(fā)者,都將通過(guò)清晰的講解、豐富的實(shí)例和實(shí)戰(zhàn)項(xiàng)目,逐步掌握語(yǔ)法基礎(chǔ)、核心數(shù)據(jù)結(jié)構(gòu)、函數(shù)與模塊、面向?qū)ο缶幊?、文件處理、主流?kù)應(yīng)用(如數(shù)據(jù)分析、Web開(kāi)發(fā)、自動(dòng)化)以及面向?qū)ο蟾呒?jí)特性,最終具備獨(dú)立開(kāi)發(fā)能力和解決復(fù)雜問(wèn)題的思維,高效應(yīng)對(duì)數(shù)據(jù)分析、人工智能、Web應(yīng)用、自動(dòng)化腳本等廣泛領(lǐng)域的實(shí)際需求。

一、Scrapy是什么?為什么選它?

在Python爬蟲(chóng)領(lǐng)域,我們可能用過(guò)requests(發(fā)送請(qǐng)求)+BeautifulSoup(解析頁(yè)面)的組合,但這類(lèi)工具更適合簡(jiǎn)單的小規(guī)模爬取。如果需要處理大規(guī)模爬取、自動(dòng)去重、請(qǐng)求頻率控制、數(shù)據(jù)持久化等復(fù)雜需求,Scrapy會(huì)是更優(yōu)選擇。

Scrapy是一個(gè)全功能的Python爬蟲(chóng)框架,內(nèi)置了請(qǐng)求處理、錯(cuò)誤重試、狀態(tài)跟蹤、分布式爬取等核心能力,支持高度自定義擴(kuò)展,廣泛用于數(shù)據(jù)挖掘、信息采集、歷史數(shù)據(jù)存儲(chǔ)等場(chǎng)景。

二、第一步:安裝Scrapy

Scrapy的安裝非常簡(jiǎn)單,通過(guò)pip即可完成,適用于Windows、Mac、Linux全平臺(tái)。

安裝命令

打開(kāi)終端(Windows用CMD或PowerShell,Mac/Linux用Terminal),執(zhí)行:

pip install scrapy

驗(yàn)證安裝

安裝完成后,執(zhí)行以下命令查看版本,若正常輸出則安裝成功:

scrapy version

注意:若Windows系統(tǒng)安裝時(shí)出現(xiàn)依賴(lài)錯(cuò)誤(如pywin32相關(guān)報(bào)錯(cuò)),可先執(zhí)行pip install pywin32,再重新安裝Scrapy。

三、第二步:了解Scrapy項(xiàng)目結(jié)構(gòu)

Scrapy采用結(jié)構(gòu)化目錄管理項(xiàng)目,通過(guò)命令行工具快速創(chuàng)建項(xiàng)目。

1. 創(chuàng)建Scrapy項(xiàng)目

執(zhí)行以下命令,創(chuàng)建一個(gè)名為douban_crawler的項(xiàng)目(項(xiàng)目名可自定義):

scrapy startproject douban_crawler

2. 項(xiàng)目目錄解析

創(chuàng)建完成后,目錄結(jié)構(gòu)如下(關(guān)鍵文件已標(biāo)注作用):

douban_crawler/          # 項(xiàng)目根目錄
├─ scrapy.cfg            # 項(xiàng)目全局配置文件(如部署相關(guān))
└─ douban_crawler/       # 項(xiàng)目核心代碼目錄
   ├─ __init__.py
   ├─ items.py           # 定義數(shù)據(jù)模型(存儲(chǔ)爬取到的數(shù)據(jù)結(jié)構(gòu))
   ├─ middlewares.py     # 中間件(處理請(qǐng)求/響應(yīng),如設(shè)置代理、UA)
   ├─ pipelines.py       # 數(shù)據(jù)管道(清洗、存儲(chǔ)數(shù)據(jù),如存CSV/數(shù)據(jù)庫(kù))
   ├─ settings.py        # 項(xiàng)目核心配置(請(qǐng)求延遲、并發(fā)數(shù)、UA等)
   └─ spiders/           # 爬蟲(chóng)腳本目錄(核心爬取邏輯在這里)
      └─ __init__.py

四、第三步:Scrapy核心組件詳解

Scrapy的工作流程依賴(lài)5個(gè)核心組件,理解它們的作用是編寫(xiě)爬蟲(chóng)的基礎(chǔ):

組件作用說(shuō)明
Spider爬蟲(chóng)核心腳本,定義“爬哪些頁(yè)面”“怎么提取數(shù)據(jù)”,包含初始URL和數(shù)據(jù)解析邏輯。
Item數(shù)據(jù)模型,類(lèi)似Python的類(lèi),用于規(guī)范爬取數(shù)據(jù)的字段(如電影的“標(biāo)題”“評(píng)分”)。
Pipeline數(shù)據(jù)處理管道,爬蟲(chóng)提取數(shù)據(jù)后,在這里進(jìn)行清洗(如去重)、存儲(chǔ)(如存CSV)。
Middleware中間件,介于引擎和請(qǐng)求/響應(yīng)之間,用于修改請(qǐng)求頭、處理Cookie、設(shè)置代理等。
Settings全局配置,控制爬蟲(chóng)的行為(如請(qǐng)求延遲、并發(fā)數(shù)、是否遵守robots協(xié)議)。

五、實(shí)戰(zhàn):爬取豆瓣電影Top250

接下來(lái)我們通過(guò)一個(gè)完整案例,從0到1實(shí)現(xiàn)豆瓣電影Top250的數(shù)據(jù)爬取,步驟清晰可復(fù)現(xiàn)。

目標(biāo)

提取豆瓣電影Top250的電影標(biāo)題、評(píng)分、一句話簡(jiǎn)介,并保存到CSV文件中。

步驟1:創(chuàng)建爬蟲(chóng)腳本

進(jìn)入項(xiàng)目根目錄(douban_crawler),執(zhí)行以下命令創(chuàng)建名為movie_spider的爬蟲(chóng),指定爬取域名為movie.douban.com

cd douban_crawler
scrapy genspider movie_spider movie.douban.com

執(zhí)行后,spiders目錄下會(huì)生成movie_spider.py文件,初始代碼如下:

import scrapy
class MovieSpiderSpider(scrapy.Spider):
    name = "movie_spider"  # 爬蟲(chóng)名稱(chēng)(唯一)
    allowed_domains = ["movie.douban.com"]  # 允許爬取的域名
    start_urls = ["https://movie.douban.com"]  # 初始爬取URL
    def parse(self, response):
        pass  # 數(shù)據(jù)解析邏輯待編寫(xiě)

步驟2:配置Settings.py(關(guān)鍵!防反爬)

豆瓣有反爬機(jī)制,需修改settings.py中的配置,模擬正常用戶(hù)行為,避免IP被封:

# 1. 設(shè)置User-Agent(模擬瀏覽器請(qǐng)求)
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
# 2. 不遵守robots.txt協(xié)議(豆瓣robots禁止爬取Top250,學(xué)習(xí)用途可關(guān)閉)
ROBOTSTXT_OBEY = False
# 3. 設(shè)置下載延遲(2秒/次,避免請(qǐng)求過(guò)快)
DOWNLOAD_DELAY = 2
# 4. 啟用自動(dòng)限速(根據(jù)網(wǎng)站響應(yīng)調(diào)整請(qǐng)求速度)
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 2  # 初始延遲
AUTOTHROTTLE_MAX_DELAY = 5    # 最大延遲

步驟3:編寫(xiě)爬蟲(chóng)核心邏輯(movie_spider.py)

修改movie_spider.py,實(shí)現(xiàn)“請(qǐng)求頁(yè)面→提取數(shù)據(jù)→分頁(yè)爬取”的完整邏輯:

import scrapy
class MovieSpiderSpider(scrapy.Spider):
    name = "movie_spider"
    allowed_domains = ["movie.douban.com"]
    # 初始URL:豆瓣電影Top250首頁(yè)(第1頁(yè))
    start_urls = ["https://movie.douban.com/top250"]
    # 1. 自定義初始請(qǐng)求(添加Referer,增強(qiáng)模擬瀏覽器效果)
    def start_requests(self):
        headers = {
            # 已在Settings中設(shè)置UA,這里可補(bǔ)充Referer(表明請(qǐng)求來(lái)源)
            'Referer': 'https://movie.douban.com/'
        }
        for url in self.start_urls:
            # 生成請(qǐng)求,指定回調(diào)函數(shù)為parse(處理響應(yīng))
            yield scrapy.Request(url=url, headers=headers, callback=self.parse)
    # 2. 解析頁(yè)面數(shù)據(jù)(核心方法)
    def parse(self, response):
        # ① 提取當(dāng)前頁(yè)所有電影項(xiàng)(豆瓣Top250每頁(yè)25部電影)
        movie_list = response.css('div.item')  # CSS選擇器定位電影列表
        for movie in movie_list:
            # 提取單部電影的字段
            yield {
                # 電影標(biāo)題(取第一個(gè)span.title的文本)
                'title': movie.css('span.title::text').get(),
                # 電影評(píng)分(span.rating_num的文本)
                'rating': movie.css('span.rating_num::text').get(),
                # 一句話簡(jiǎn)介(span.inq的文本,若沒(méi)有則為None)
                'quote': movie.css('span.inq::text').get()
            }
        # ② 處理分頁(yè)(爬取下一頁(yè))
        # 定位“下一頁(yè)”鏈接(span.next下的a標(biāo)簽的href屬性)
        next_page = response.css('span.next a::attr(href)').get()
        if next_page is not None:
            # 生成下一頁(yè)的請(qǐng)求,回調(diào)函數(shù)仍為parse(循環(huán)解析)
            yield response.follow(next_page, callback=self.parse)

步驟4:運(yùn)行爬蟲(chóng)并保存數(shù)據(jù)

執(zhí)行以下命令,啟動(dòng)movie_spider爬蟲(chóng),并將數(shù)據(jù)保存到douban_top250.csv文件中:

scrapy crawl movie_spider -o douban_top250.csv
  • scrapy crawl movie_spider:?jiǎn)?dòng)名為movie_spider的爬蟲(chóng)
  • -o douban_top250.csv:將爬取結(jié)果輸出到CSV文件(支持JSON、XML等格式)

結(jié)果查看

運(yùn)行完成后,項(xiàng)目根目錄會(huì)生成douban_top250.csv文件,用Excel或文本編輯器打開(kāi)即可看到提取的數(shù)據(jù):

titleratingquote
肖申克的救贖9.7希望是件好東西,也許是世上最好的東西。
霸王別姬9.6說(shuō)的是一輩子!差一年,一個(gè)月,一天,一個(gè)時(shí)辰,都不算一輩子!

六、Scrapy常用方法與設(shè)置匯總

掌握以下常用方法和配置,能應(yīng)對(duì)80%的爬蟲(chóng)場(chǎng)景:

1. 核心爬蟲(chóng)方法

方法名作用說(shuō)明示例代碼
start_requests()生成初始請(qǐng)求(可自定義請(qǐng)求頭、方法)yield scrapy.Request(url, callback=self.parse)
parse(response)解析響應(yīng),提取數(shù)據(jù)或生成新請(qǐng)求title = response.css('h1::text').get()
response.follow()自動(dòng)處理相對(duì)URL,生成下一頁(yè)請(qǐng)求yield response.follow(next_page, callback=self.parse)
response.css()用CSS選擇器提取數(shù)據(jù)movie.css('span.title::text').get()
response.xpath()用XPath選擇器提取數(shù)據(jù)(更靈活)movie.xpath('//span[@class="title"]/text()').get()

2. 關(guān)鍵配置(Settings.py)

配置項(xiàng)作用說(shuō)明推薦值
USER_AGENT模擬瀏覽器標(biāo)識(shí),防反爬見(jiàn)步驟2中的Chrome UA
DOWNLOAD_DELAY請(qǐng)求延遲(秒),避免IP被封2-5
CONCURRENT_REQUESTS并發(fā)請(qǐng)求數(shù)(默認(rèn)16),根據(jù)網(wǎng)站性能調(diào)整8-16
ITEM_PIPELINES啟用數(shù)據(jù)管道(如存儲(chǔ)到數(shù)據(jù)庫(kù)){'douban_crawler.pipelines.MyPipeline': 300}

七、爬取注意事項(xiàng)

  1. 遵守網(wǎng)站規(guī)則:優(yōu)先查看目標(biāo)網(wǎng)站的robots.txt(如https://movie.douban.com/robots.txt),非學(xué)習(xí)用途請(qǐng)勿違反規(guī)則。
  2. 控制爬取頻率:設(shè)置DOWNLOAD_DELAYAUTOTHROTTLE_ENABLED,避免給服務(wù)器造成過(guò)大壓力。
  3. 避免IP封禁:若爬取量較大,可通過(guò)Middleware設(shè)置代理IP池,輪換IP地址。
  4. 合法使用數(shù)據(jù):爬取的數(shù)據(jù)僅用于學(xué)習(xí)和研究,不得用于商業(yè)用途或侵犯他人權(quán)益。

八、總結(jié)與擴(kuò)展

通過(guò)本文,你已經(jīng)掌握了Scrapy的安裝、項(xiàng)目結(jié)構(gòu)、核心組件和實(shí)戰(zhàn)流程。接下來(lái)可以嘗試以下擴(kuò)展方向:

  1. 數(shù)據(jù)存儲(chǔ):在pipelines.py中編寫(xiě)邏輯,將數(shù)據(jù)保存到MySQL、MongoDB等數(shù)據(jù)庫(kù)。
  2. 代理IP配置:在middlewares.py中添加代理中間件,解決IP封禁問(wèn)題。
  3. 復(fù)雜頁(yè)面爬取:針對(duì)JavaScript渲染的頁(yè)面(如動(dòng)態(tài)加載內(nèi)容),結(jié)合Scrapy-SeleniumPlaywright爬取。

Scrapy的功能遠(yuǎn)不止于此,更多高級(jí)特性(如分布式爬取、信號(hào)機(jī)制)可參考Scrapy官方文檔。動(dòng)手實(shí)踐是掌握爬蟲(chóng)的最佳方式,趕緊嘗試爬取你感興趣的網(wǎng)站吧!

到此這篇關(guān)于Python3 Scrapy庫(kù)安裝使用教程的文章就介紹到這了,更多相關(guān)Python Scrapy庫(kù)安裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pymysql.err.DataError:1366的報(bào)錯(cuò)解決

    pymysql.err.DataError:1366的報(bào)錯(cuò)解決

    通過(guò)python把數(shù)據(jù)同步至mysql數(shù)據(jù)庫(kù)的過(guò)程中,遇到錯(cuò)誤,本文主要介紹了pymysql.err.DataError:1366的報(bào)錯(cuò)解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 詳解如何將Python可執(zhí)行文件(.exe)反編譯為Python腳本

    詳解如何將Python可執(zhí)行文件(.exe)反編譯為Python腳本

    將?Python?可執(zhí)行文件(.exe)反編譯為?Python?腳本是一項(xiàng)有趣的技術(shù)挑戰(zhàn),可以幫助我們理解程序的工作原理,下面我們就來(lái)看看具體實(shí)現(xiàn)步驟吧
    2024-03-03
  • 在Django中實(shí)現(xiàn)添加user到group并查看

    在Django中實(shí)現(xiàn)添加user到group并查看

    今天小編就為大家分享一篇在Django中實(shí)現(xiàn)添加user到group并查看,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • PyQt5 實(shí)現(xiàn)字體大小自適應(yīng)分辨率的方法

    PyQt5 實(shí)現(xiàn)字體大小自適應(yīng)分辨率的方法

    今天小編就為大家分享一篇PyQt5 實(shí)現(xiàn)字體大小自適應(yīng)分辨率的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • python中路徑字符串斜杠替換方式

    python中路徑字符串斜杠替換方式

    這篇文章主要介紹了python中路徑字符串斜杠替換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python利用cv2庫(kù)讀取和保存視頻的操作步驟

    python利用cv2庫(kù)讀取和保存視頻的操作步驟

    這篇文章主要介紹了python利用cv2庫(kù)讀取和保存視頻的操作步驟,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • Python中super函數(shù)用法實(shí)例分析

    Python中super函數(shù)用法實(shí)例分析

    這篇文章主要介紹了Python中super函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了Python中super函數(shù)的功能、調(diào)用父類(lèi)相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • 為什么相對(duì)PHP黑python的更少

    為什么相對(duì)PHP黑python的更少

    在本篇內(nèi)容里小編給各位整理了關(guān)于為什么相對(duì)PHP黑python的更少的原因和知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-06-06
  • Pandas標(biāo)記刪除重復(fù)記錄的方法

    Pandas標(biāo)記刪除重復(fù)記錄的方法

    下面小編就為大家分享一篇Pandas標(biāo)記刪除重復(fù)記錄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解Pandas之容易讓人混淆的行選擇和列選擇

    詳解Pandas之容易讓人混淆的行選擇和列選擇

    這篇文章主要介紹了詳解Pandas之容易讓人混淆的行選擇和列選擇,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論

张北县| 扶沟县| 河北省| 泰顺县| 公主岭市| 丰台区| 灵宝市| 乌鲁木齐县| 台山市| 崇阳县| 吉首市| 浦北县| 新津县| 屏东县| 阿荣旗| 城市| 阿瓦提县| 金乡县| 洪湖市| 扶余县| 斗六市| 平谷区| 镇巴县| 东港市| 郸城县| 尼玛县| 昭觉县| 漯河市| 寿阳县| 米易县| 湘潭市| 西充县| 容城县| 玉门市| 康乐县| 广南县| 巢湖市| 贺州市| 柳河县| 霍山县| 慈利县|