国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

眉山政府網(wǎng)站建設seo網(wǎng)站推廣優(yōu)化

眉山政府網(wǎng)站建設,seo網(wǎng)站推廣優(yōu)化,dedecms公司網(wǎng)站怎么做,網(wǎng)絡營銷案例題前言 在大數(shù)據(jù)和網(wǎng)絡爬蟲領域,Scrapy 是一個功能強大且廣泛使用的開源爬蟲框架。它能夠幫助我們快速地構建爬蟲項目,并高效地從各種網(wǎng)站中提取數(shù)據(jù)。在本篇文章中,我將帶大家從零開始使用 Scrapy 框架,構建一個簡單的爬蟲項目&am…

前言

在大數(shù)據(jù)和網(wǎng)絡爬蟲領域,Scrapy 是一個功能強大且廣泛使用的開源爬蟲框架。它能夠幫助我們快速地構建爬蟲項目,并高效地從各種網(wǎng)站中提取數(shù)據(jù)。在本篇文章中,我將帶大家從零開始使用 Scrapy 框架,構建一個簡單的爬蟲項目,爬取 豆瓣電影 Top 250 的電影信息。

Scrapy 官方文檔:Scrapy Documentation

豆瓣電影 Top 250 :豆瓣電影 Top 250

本文的爬蟲項目配置如下:

  • 系統(tǒng):Windows
  • Python 版本:3.8.6
  • 開發(fā)環(huán)境:PyCharm

如果你使用的是其他系統(tǒng)或 IDE,也可以按照本文的步驟進行操作,只需根據(jù)自己的環(huán)境做出相應調(diào)整即可。

環(huán)境準備

1. 安裝 Python

在使用 Scrapy 之前,確保你已經(jīng)安裝了 Python。如果沒有,請先安裝 Python 3.6+ 版本。你可以訪問 Python 官方網(wǎng)站 下載并安裝最新版的 Python。

安裝完成后,打開命令行窗口,輸入以下命令檢查是否安裝成功:

python --version
2. 安裝 Scrapy

確認安裝了 Python 后,你可以使用 pip 安裝 Scrapy。pip 是 Python 的包管理工具,它能夠幫助我們安裝各種第三方庫。

在命令行窗口輸入以下命令:

pip install scrapy

安裝完成后,可以通過以下命令檢查 Scrapy 是否安裝成功:

scrapy version
3. 安裝 Anaconda(可選)

如果你更喜歡使用虛擬環(huán)境管理工具,可以選擇安裝 Anaconda,它能夠幫助你更方便地管理項目中的 Python 依賴。你可以從 Anaconda 官方網(wǎng)站 下載并安裝 Anaconda。

使用 Anaconda 創(chuàng)建一個虛擬環(huán)境,并激活環(huán)境后再安裝 Scrapy:

conda create -n scrapy_env python=3.8
conda activate scrapy_env
pip install scrapy
4. 創(chuàng)建 Scrapy 項目

安裝 Scrapy 完成后,我們可以開始創(chuàng)建一個新的 Scrapy 項目。在終端中,進入你希望存放項目的目錄,然后運行以下命令:

scrapy startproject DoubanProject

這將創(chuàng)建一個名為 DoubanProject 的 Scrapy 項目,其中包含 Scrapy 默認的文件夾和文件結構:

DoubanProject/
├── DoubanProject/
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
└── spiders/├── __init__.py└── douban.py

爬蟲的編寫

1. 編寫 items.py

items.py 文件中定義我們要爬取的數(shù)據(jù)字段。豆瓣 Top 250 頁面包含電影的排名、名稱、簡介、評分、評價人數(shù)和電影海報鏈接等信息,因此我們需要定義相應的數(shù)據(jù)字段。

import scrapyclass DoubanprojectItem(scrapy.Item):rank = scrapy.Field()  # 電影排名movie_name = scrapy.Field()  # 電影名稱movie_introduction = scrapy.Field()  # 電影簡介picture = scrapy.Field()  # 電影海報鏈接movie_rating = scrapy.Field()  # 電影評分evaluators = scrapy.Field()  # 評價人數(shù)
2. 編寫爬蟲文件 douban.py

spiders 目錄下,我們需要創(chuàng)建一個爬蟲文件 douban.py 來定義具體的爬蟲邏輯。Scrapy 通過 Spider 類來定義爬蟲,它包含了爬蟲的名稱、允許訪問的域名、起始 URL,以及如何解析和處理抓取到的數(shù)據(jù)。

2.1 定義爬蟲文件

首先,在 spiders 目錄下創(chuàng)建 douban.py 文件,編寫代碼如下:

import scrapy
from scrapy import Selector, Request
from ..items import DoubanprojectItem  # 導入之前定義的 item 數(shù)據(jù)結構
2.2 創(chuàng)建 DoubanSpider

douban.py 文件中定義一個爬蟲類 DoubanSpider,繼承自 scrapy.Spider。name 是爬蟲的名字,用于在命令行中啟動爬蟲,allowed_domains 是允許爬蟲訪問的域名,start_urls 是爬蟲開始爬取的頁面 URL 列表。

class DoubanSpider(scrapy.Spider):name = "douban"  # 爬蟲的唯一名稱allowed_domains = ["movie.douban.com"]  # 允許的域名范圍start_urls = ["https://movie.douban.com/top250"]  # 爬蟲從這個 URL 開始抓取
2.3 編寫 parse 方法

parse 是 Scrapy 中的默認解析方法,爬蟲啟動后,Scrapy 會自動下載 start_urls 中的頁面,并將響應傳遞給這個方法。在這里,我們會使用 XPath 來提取電影信息。

  1. 首先使用 Selector 對頁面進行解析。

  2. 然后使用 XPath 提取頁面中所有電影的列表,遍歷每部電影并提取需要的字段信息,如電影的排名、名稱、簡介、評分等。

  3. 最后通過 yield 返回提取到的數(shù)據(jù)。

    def parse(self, response):sel = Selector(response)  # 使用 Selector 解析 HTML 響應movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')  # 提取所有電影條目
    
2.4 提取電影信息

接下來,我們需要提取每部電影的具體信息。我們定義了 DoubanprojectItem 來存儲每部電影的字段信息,并通過 XPath 提取頁面中的對應字段。

        for movie in movie_items:item = DoubanprojectItem()  # 創(chuàng)建 DoubanprojectItem 實例# 提取電影的各個字段item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()  # 電影排名item['movie_name'] = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()  # 電影名稱item['movie_introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').extract_first(default='無')  # 電影簡介item['picture'] = movie.xpath('.//div[@class="pic"]/a/img/@src').extract_first()  # 電影海報鏈接item['movie_rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()  # 電影評分item['evaluators'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()  # 評價人數(shù)# 返回提取到的 itemyield item
2.5 處理分頁

豆瓣電影的 Top 250 列表分成了 10 頁,每頁顯示 25 部電影。在爬取完第一頁后,我們需要繼續(xù)爬取剩下的頁面。通過提取頁面底部的“下一頁”鏈接,來實現(xiàn)分頁抓取。

        # 獲取下一頁的鏈接next_link = sel.xpath('//span[@class="next"]/link/@href').extract_first()if next_link:# 如果存在下一頁鏈接,構造請求并遞歸調(diào)用 parse 方法yield Request(url=response.urljoin(next_link), callback=self.parse)
2.6 完整的 douban.py 文件

完整的爬蟲文件 douban.py 如下:

import scrapy
from scrapy import Selector, Request
from ..items import DoubanprojectItem  # 導入 item 數(shù)據(jù)結構class DoubanSpider(scrapy.Spider):name = "douban"  # 爬蟲的名稱allowed_domains = ["movie.douban.com"]  # 允許的域名start_urls = ["https://movie.douban.com/top250"]  # 爬蟲起始頁面def parse(self, response):sel = Selector(response)  # 解析頁面movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')  # 獲取電影條目列表for movie in movie_items:item = DoubanprojectItem()  # 創(chuàng)建 item 實例# 提取電影信息item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()item['movie_name'] = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()item['movie_introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').extract_first(default='無')item['picture'] = movie.xpath('.//div[@class="pic"]/a/img/@src').extract_first()item['movie_rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()item['evaluators'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()yield item  # 返回 item# 處理分頁next_link = sel.xpath('//span[@class="next"]/link/@href').extract_first()if next_link:yield Request(url=response.urljoin(next_link), callback=self.parse)

詳細解釋:
  • Spider 類定義name 確定了爬蟲的名字,allowed_domains 確定了允許的域名,start_urls 列出了爬蟲的起始頁面。
  • parse 方法:通過 Selector 解析頁面,使用 XPath 提取電影的詳細信息并存儲到 DoubanprojectItem 對象中。
  • 分頁處理:通過檢查是否有下一頁鏈接,使用 Request 對象進行遞歸抓取,直到所有頁面的數(shù)據(jù)都被抓取。

3. 編寫 pipelines.py

在 Scrapy 中,pipelines.py 文件用于處理爬取到的數(shù)據(jù)。這里,我們要將抓取到的豆瓣電影數(shù)據(jù)保存到 Excel 文件中。為了實現(xiàn)這一點,我們會使用 Python 的 openpyxl 庫,它是一個專門用于處理 Excel 文件的庫。

3.1 安裝 openpyxl

首先,確保你已經(jīng)安裝了 openpyxl,如果沒有安裝,可以通過 pip 進行安裝:

pip install openpyxl
3.2 創(chuàng)建 DoubanprojectPipeline

DoubanprojectPipeline 類將處理從爬蟲傳遞過來的數(shù)據(jù),并將這些數(shù)據(jù)寫入 Excel 文件。Scrapy 中的 Pipeline 類通常有三個方法:open_spiderprocess_itemclose_spider

  • open_spider:當爬蟲啟動時調(diào)用,一般用于初始化一些資源。
  • process_item:每當爬蟲抓取到一個數(shù)據(jù)項(item)時,都會調(diào)用此方法來處理該項數(shù)據(jù)。
  • close_spider:當爬蟲結束時調(diào)用,用于保存文件或釋放資源。

以下是詳細的代碼解釋:

import openpyxl  # 導入處理 Excel 文件的庫
from .items import DoubanprojectItem  # 導入定義好的 Item 數(shù)據(jù)結構class DoubanprojectPipeline:def __init__(self):"""初始化方法,在爬蟲開始時被調(diào)用,初始化 Excel 工作簿和表格。"""self.wb = openpyxl.Workbook()  # 創(chuàng)建一個新的 Excel 工作簿self.sheet = self.wb.active  # 獲取工作簿的活動表格self.sheet.title = '豆瓣電影Top250'  # 設置表格的標題# 在第一行寫入表頭,表示每列的意義self.sheet.append(('電影排名', '電影名稱', '電影簡介', '電影海報', '電影評分', '觀影人數(shù)'))def open_spider(self, spider):"""當爬蟲被啟動時調(diào)用該方法。:param spider: 當前運行的爬蟲對象"""print('開始爬蟲...')  # 可以選擇在控制臺輸出提示信息,表示爬蟲開始運行def process_item(self, item: DoubanprojectItem, spider):"""處理每個爬取到的數(shù)據(jù)項(item),將其保存到 Excel 文件中。:param item: 爬取到的電影數(shù)據(jù):param spider: 當前運行的爬蟲對象:return: 返回處理后的 item"""# 將每部電影的信息以一行的形式寫入 Excelself.sheet.append((item['rank'],  # 電影排名item['movie_name'],  # 電影名稱item['movie_introduction'],  # 電影簡介item['picture'],  # 電影海報鏈接item['movie_rating'],  # 電影評分item['evaluators']  # 觀影人數(shù)))# 返回 item 是 Scrapy Pipeline 的標準流程,方便后續(xù)可能有其他 pipeline 處理return itemdef close_spider(self, spider):"""當爬蟲關閉時調(diào)用,保存 Excel 文件。:param spider: 當前運行的爬蟲對象"""print("爬蟲結束....")  # 輸出爬蟲結束的提示# 保存 Excel 文件到指定路徑self.wb.save('豆瓣電影數(shù)據(jù).xlsx')
3.3 詳細解釋代碼
  1. __init__ 方法

    • 該方法在爬蟲啟動時初始化,創(chuàng)建一個 Excel 工作簿 (self.wb),并獲取活動表 (self.sheet)。
    • 使用 self.sheet.title 為表格設置一個標題,在這里我們將其命名為 “豆瓣電影Top250”。
    • 使用 self.sheet.append() 將表頭寫入 Excel 文件,表頭包括 “電影排名”、“電影名稱”、“電影簡介”、“電影海報”、“電影評分” 和 “觀影人數(shù)”。
  2. open_spider 方法

    • 在爬蟲啟動時執(zhí)行,可以在這里做一些初始化操作,比如在控制臺輸出一個提示信息“開始爬蟲…”。
  3. process_item 方法

    • 每次爬蟲抓取到一個新的電影數(shù)據(jù)項(item)時,Scrapy 會自動調(diào)用此方法來處理數(shù)據(jù)。
    • self.sheet.append() 將數(shù)據(jù)項中的字段值(如排名、名稱、簡介等)寫入 Excel 文件中的一行。
    • 返回 item 是 Scrapy Pipeline 的標準流程,以便數(shù)據(jù)繼續(xù)傳遞給其他可能的 pipeline。
  4. close_spider 方法

    • 當爬蟲結束時,Scrapy 會調(diào)用此方法來進行收尾工作。
    • 這里使用 self.wb.save('豆瓣電影數(shù)據(jù).xlsx') 將數(shù)據(jù)保存到 豆瓣電影數(shù)據(jù).xlsx 文件中,并在控制臺輸出“爬蟲結束…”提示。
3.4 設置 pipelines

為了讓 Scrapy 使用我們的 DoubanprojectPipeline,我們需要在 settings.py 中啟用該 Pipeline。

打開 settings.py 文件,并添加以下代碼:

# 啟用我們定義的 Pipeline
ITEM_PIPELINES = {"DoubanProject.pipelines.DoubanprojectPipeline": 300,
}

300 是該 Pipeline 的優(yōu)先級,數(shù)字越小優(yōu)先級越高。這里我們設置為 300,表示優(yōu)先處理該 Pipeline。

通過這個 pipelines.py 文件,爬取到的豆瓣電影數(shù)據(jù)將會被逐條寫入 Excel 文件。當爬蟲結束時,完整的 Excel 文件就已經(jīng)生成好了,里面包含了所有抓取到的電影信息。


4. 配置 settings.py

為了確保爬蟲能夠順利地抓取豆瓣的電影數(shù)據(jù)并避免觸發(fā)反爬機制,我們需要對 settings.py 文件進行配置。settings.py 文件是 Scrapy 項目的全局配置文件,所有的爬蟲行為(如請求頻率、請求頭信息、爬蟲管道等)都在這里進行設置。下面我們詳細解釋如何配置 settings.py

4.1 配置 BOT_NAME

BOT_NAME 定義了 Scrapy 項目的名稱,Scrapy 會根據(jù)這個名稱來識別項目。你可以將其保持默認或根據(jù)你的項目需求進行修改:

BOT_NAME = "DoubanProject"
4.2 配置 SPIDER_MODULESNEWSPIDER_MODULE

SPIDER_MODULESNEWSPIDER_MODULE 定義了爬蟲的存放路徑和默認新爬蟲生成位置。

  • SPIDER_MODULES: 該配置定義了存放所有爬蟲的模塊。在這里,所有爬蟲都存放在 DoubanProject.spiders 目錄下。

  • NEWSPIDER_MODULE: 該配置定義了新生成的爬蟲的默認存放位置。

    SPIDER_MODULES = [“DoubanProject.spiders”]
    NEWSPIDER_MODULE = “DoubanProject.spiders”

4.3 設置 User-Agent

User-Agent 是 HTTP 請求頭中的一個重要字段,它告訴目標服務器你的請求來自哪個瀏覽器或客戶端。很多網(wǎng)站會通過檢測 User-Agent 來區(qū)分正常用戶和爬蟲。為了避免被識別為爬蟲,我們可以將 User-Agent 字段偽裝成常見的瀏覽器。

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'

在上面的配置中,我們將 User-Agent 偽裝成了 Google Chrome 瀏覽器。這有助于提高爬蟲的隱蔽性,避免被目標網(wǎng)站的反爬蟲機制識別和封禁。

4.4 禁用 robots.txt 規(guī)則

許多網(wǎng)站使用 robots.txt 文件來限制爬蟲訪問某些頁面。為了能夠抓取豆瓣的內(nèi)容,我們需要將 Scrapy 的 ROBOTSTXT_OBEY 設置為 False,忽略 robots.txt 規(guī)則。

ROBOTSTXT_OBEY = False

注意:盡管我們在這里禁用了 robots.txt,實際開發(fā)時應盡量遵循網(wǎng)站的爬蟲規(guī)則,避免給網(wǎng)站帶來過多負擔。

4.5 設置下載延遲 DOWNLOAD_DELAY

為了避免觸發(fā)網(wǎng)站的反爬蟲機制,建議設置一個下載延遲。DOWNLOAD_DELAY 定義了每個請求之間的時間間隔,防止爬蟲請求頻率過高,給服務器帶來過大壓力。通常,1-3 秒的延遲是合理的選擇。

DOWNLOAD_DELAY = 2  # 設置每個請求之間的時間間隔為 2 秒

你還可以設置 RANDOMIZE_DOWNLOAD_DELAYTrue,讓每次請求之間的延遲時間隨機變化,這樣可以進一步避免被反爬蟲機制發(fā)現(xiàn)。

RANDOMIZE_DOWNLOAD_DELAY = True
4.6 啟用 Cookies

有些網(wǎng)站會使用 Cookies 來跟蹤用戶的行為和狀態(tài)。如果不啟用 Cookies,有時會導致爬取數(shù)據(jù)不完整或被限制訪問。我們在這里啟用 Scrapy 的 COOKIES_ENABLED 設置:

COOKIES_ENABLED = True

這將允許爬蟲在請求過程中自動處理 Cookies。

4.7 啟用 Item Pipelines

Item Pipelines 負責處理爬蟲提取到的數(shù)據(jù),并將其保存到不同的輸出格式中。在這里,我們已經(jīng)在 pipelines.py 中編寫了一個 Pipeline 來將電影數(shù)據(jù)保存到 Excel 文件中。接下來需要在 settings.py 中啟用這個 Pipeline。

ITEM_PIPELINES = {"DoubanProject.pipelines.DoubanprojectPipeline": 300,
}

數(shù)字 300 代表優(yōu)先級,Scrapy 會根據(jù)優(yōu)先級的數(shù)字大小依次執(zhí)行不同的 Pipelines。數(shù)字越小,優(yōu)先級越高。

4.8 配置其他默認設置

最后,確保 Scrapy 的其他設置與最新版本兼容。這里我們設置了 REQUEST_FINGERPRINTER_IMPLEMENTATIONTWISTED_REACTOR,它們是 Scrapy 的內(nèi)部配置,用于確保兼容性和性能優(yōu)化。

# 設置未來兼容性
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"  # 確保導出文件的編碼為 UTF-8

修改后的 settings.py 文件完整代碼:
BOT_NAME = "DoubanProject"SPIDER_MODULES = ["DoubanProject.spiders"]
NEWSPIDER_MODULE = "DoubanProject.spiders"# 偽裝成正常的瀏覽器
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'# 不遵守 robots.txt 規(guī)則
ROBOTSTXT_OBEY = False# 啟用 Cookies
COOKIES_ENABLED = True# 配置下載延遲,避免被封禁
DOWNLOAD_DELAY = 2  # 每次請求間隔2秒
RANDOMIZE_DOWNLOAD_DELAY = True  # 隨機化下載延遲# 配置默認請求頭,模擬真實用戶
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9','Referer': 'https://www.douban.com/',
}# 啟用下載中間件
DOWNLOADER_MIDDLEWARES = {'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
}# 啟用 Item Pipelines
ITEM_PIPELINES = {"DoubanProject.pipelines.DoubanprojectPipeline": 300,
}# 啟用 AutoThrottle 擴展,控制并發(fā)請求速度
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 5  # 初始延遲
AUTOTHROTTLE_MAX_DELAY = 60  # 最大延遲
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0  # 每個服務器的并發(fā)請求數(shù)量
AUTOTHROTTLE_DEBUG = False  # 禁用調(diào)試信息顯示# HTTP緩存設置(可選)
HTTPCACHE_ENABLED = False# 設置未來兼容性
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"
終端運行爬蟲 douban
scrapy crawl douban

運行后,爬蟲將抓取豆瓣電影 Top 250 的數(shù)據(jù)并保存到 豆瓣電影數(shù)據(jù).xlsx 文件中。

導入 MySQL 數(shù)據(jù)庫

在本節(jié)中,我們將介紹如何將抓取的豆瓣電影數(shù)據(jù)保存到 MySQL 數(shù)據(jù)庫中。Scrapy 提供了靈活的管道機制,可以將抓取的數(shù)據(jù)導入到多種存儲平臺。通過下面的步驟,我們將爬取的數(shù)據(jù)存儲到 MySQL 數(shù)據(jù)庫中。

1. 在 MySQL 中創(chuàng)建數(shù)據(jù)庫

首先,確保你已經(jīng)安裝并啟動了 MySQL 數(shù)據(jù)庫。在 MySQL 中,我們需要創(chuàng)建一個數(shù)據(jù)庫和對應的數(shù)據(jù)表來存儲抓取到的電影信息。

創(chuàng)建數(shù)據(jù)庫:

-- MySQL 8.0 及以上版本
create database douban_movie;-- 如果你使用的是 MySQL 8.0 以下版本,請使用以下命令指定編碼為 utf8mb4
create database douban_movie default charset=utf8mb4;

切換到你創(chuàng)建的數(shù)據(jù)庫:

use douban_movie;
2. 在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表

在剛剛創(chuàng)建的 douban_movie 數(shù)據(jù)庫中,我們需要創(chuàng)建一個表 movie_data 來存儲爬取到的電影信息。表結構如下:

CREATE TABLE movie_data(rank varchar(20),                  -- 電影排名movie_name varchar(30),            -- 電影名稱movie_introduction varchar(100),   -- 電影簡介picture varchar(100),              -- 電影海報鏈接movie_rating varchar(100),         -- 電影評分evaluators varchar(100)            -- 評價人數(shù)
) character set=utf8;
3. 修改 pipelines.py,將數(shù)據(jù)保存到 MySQL

接下來,我們需要在 pipelines.py 文件中編寫代碼,將爬取到的數(shù)據(jù)保存到 MySQL 數(shù)據(jù)庫中。我們會使用 pymysql 庫來操作 MySQL。

安裝 pymysql

pip install pymysql

然后,在 pipelines.py 文件中添加如下代碼:

import pymysql
from .items import DoubanprojectItem  # 導入定義好的 item 數(shù)據(jù)結構class MysqlPipeline:def __init__(self, host, database, user, password, port):"""初始化 MySQL 數(shù)據(jù)庫連接配置"""self.host = hostself.database = databaseself.user = userself.password = passwordself.port = port@classmethoddef from_crawler(cls, crawler):"""從 Scrapy 項目的 settings.py 文件中讀取 MySQL 的連接信息"""return cls(host=crawler.settings.get('MYSQL_HOST'),database=crawler.settings.get('MYSQL_DATABASE'),user=crawler.settings.get('MYSQL_USER'),password=crawler.settings.get('MYSQL_PASSWORD'),port=crawler.settings.get('MYSQL_PORT'))def open_spider(self, spider):"""爬蟲啟動時打開數(shù)據(jù)庫連接"""print('打開數(shù)據(jù)庫連接....')self.db = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.database,port=self.port, charset='utf8')self.cursor = self.db.cursor()def close_spider(self, spider):"""爬蟲結束時關閉數(shù)據(jù)庫連接"""print('關閉數(shù)據(jù)庫連接...')self.db.close()def process_item(self, item, spider):"""將爬取到的 item 存儲到 MySQL 數(shù)據(jù)庫"""data = dict(item)keys = ', '.join(data.keys())  # 獲取字段名values = ', '.join(['%s'] * len(data))  # 構建 SQL 中的值部分sql = "insert into movie_data (%s) values (%s)" % (keys, values)self.cursor.execute(sql, tuple(data.values()))  # 執(zhí)行 SQL 插入語句self.db.commit()  # 提交事務return item  # 繼續(xù)傳遞給下一個 pipeline(如果有的話)
4. 配置 settings.py 文件

為了讓 Scrapy 能夠?qū)?shù)據(jù)寫入 MySQL,我們需要在 settings.py 文件中進行一些配置。首先,啟用 MysqlPipeline,然后配置 MySQL 數(shù)據(jù)庫的連接信息。

settings.py 中添加如下內(nèi)容:

# 啟用 MysqlPipeline 管道,將數(shù)據(jù)存入 MySQL
ITEM_PIPELINES = {"DoubanProject.pipelines.MysqlPipeline": 301,
}# 配置 MySQL 數(shù)據(jù)庫的連接信息
MYSQL_HOST = 'localhost'           # MySQL 服務器的地址
MYSQL_DATABASE = 'douban_movie'    # 使用的數(shù)據(jù)庫名
MYSQL_PORT = 3306                  # MySQL 端口號,默認是3306
MYSQL_USER = 'root'                # 你的 MySQL 用戶名
MYSQL_PASSWORD = 'your password'   # 你的 MySQL 密碼
5. 運行爬蟲并將數(shù)據(jù)導入 MySQL

現(xiàn)在你可以通過以下命令運行爬蟲:

scrapy crawl douban

等待爬蟲運行完畢后,打開你的 MySQL 數(shù)據(jù)庫,使用以下 SQL 查詢命令查看爬取到的數(shù)據(jù):

SELECT * FROM movie_data;

你也可以使用 MySQL Workbench 或 Navicat 等圖形化工具查看數(shù)據(jù)。


終端運行爬蟲 douban

在所有的代碼編寫和配置完成后,我們就可以運行爬蟲來抓取數(shù)據(jù)并保存到 Excel 文件和 MySQL 數(shù)據(jù)庫中。以下是運行爬蟲的步驟:

1. 進入項目目錄

首先,確保你的終端已經(jīng)定位到項目的根目錄,也就是包含 scrapy.cfg 文件的目錄??梢酝ㄟ^命令行進入項目根目錄:

cd path/to/your/DoubanProject

path/to/your/DoubanProject 替換為你實際的項目路徑。

2. 運行爬蟲

在項目目錄下,通過以下命令啟動爬蟲:

scrapy crawl douban

此時,爬蟲將開始訪問豆瓣電影的 Top 250 頁面,逐頁抓取電影信息。抓取到的數(shù)據(jù)將被同時保存到 Excel 文件 (豆瓣電影數(shù)據(jù).xlsx) 中,以及 MySQL 數(shù)據(jù)庫(如果配置了 MySQL 管道)。

3. 查看生成的 Excel 文件

在爬蟲運行完成后,Excel 文件將會保存在項目目錄下,文件名為 豆瓣電影數(shù)據(jù).xlsx

你可以使用 WPS Office、Microsoft Excel 或任何支持 Excel 文件的軟件來打開這個文件。

  • 使用 WPS 打開 Excel 文件
    • 在文件資源管理器中,找到 豆瓣電影數(shù)據(jù).xlsx 文件。
    • 右鍵單擊文件,選擇 “打開方式”,然后選擇 WPS 表格。
    • 你將看到抓取的豆瓣電影排名、名稱、簡介、評分、觀影人數(shù)等數(shù)據(jù)都已經(jīng)填充在表格中。

Excel 文件的內(nèi)容應該類似如下:

電影排名

電影名稱

電影簡介

電影海報

電影評分

觀影人數(shù)

1

肖申克的救贖

自由萬歲!

圖片鏈接

9.7

5000000+

2

霸王別姬

風華絕代

圖片鏈接

9.6

4000000+

4. 檢查數(shù)據(jù)庫中的數(shù)據(jù)

如果你配置了 MySQL 管道,數(shù)據(jù)也會被存入 MySQL 數(shù)據(jù)庫。你可以通過以下命令在 MySQL 中檢查數(shù)據(jù):

USE douban_movie;
SELECT * FROM movie_data;

此時,終端將展示爬蟲保存到數(shù)據(jù)庫中的數(shù)據(jù)內(nèi)容。

5. 爬蟲運行提示信息

當你在終端運行爬蟲時,你還會在終端中看到相關的運行日志,這些日志會提示爬蟲的當前狀態(tài),比如:

  • 正在抓取的頁面 URL。
  • 每一頁抓取的數(shù)量。
  • 數(shù)據(jù)是否成功保存。
  • 爬蟲完成時的提示信息。

注意:使用爬蟲工具時,請務必遵守目標網(wǎng)站的 robots.txt 文件以及相關法律法規(guī),避免對網(wǎng)站造成過度負載。

http://m.aloenet.com.cn/news/37526.html

相關文章:

  • 如何查詢網(wǎng)站的建站工具seo門戶網(wǎng)站
  • 溫州網(wǎng)站建設成功案例山西seo基礎教程
  • 學院網(wǎng)站的作用中國疫情最新數(shù)據(jù)
  • 觸屏版網(wǎng)站開發(fā)樣式互聯(lián)網(wǎng)推廣與營銷
  • 沒有網(wǎng)站可以做淘寶客嗎搜索引擎的設計與實現(xiàn)
  • 做招商類型的網(wǎng)站怎么制作網(wǎng)站二維碼
  • 江西省住房和城鄉(xiāng)建設部網(wǎng)站市場營銷推廣方案
  • 中國做國外的網(wǎng)站廣東疫情最新消息今天又封了
  • 做網(wǎng)站主流軟件是php嗎什么是淘寶seo
  • 公司做網(wǎng)站推廣的價格鄭州網(wǎng)絡推廣方案
  • 怎樣登陸wordpress短視頻seo詢盤獲客系統(tǒng)軟件
  • 遵義做網(wǎng)站哪個公司最好百度推廣優(yōu)化怎么做的
  • 網(wǎng)站建設內(nèi)容錄入論文百度如何收錄網(wǎng)站
  • b站破解2023免費版下載抖音企業(yè)推廣
  • 做電商網(wǎng)站價錢16種營銷模型
  • 怎樣做淘寶網(wǎng)站建設電商網(wǎng)站平臺搭建
  • 做網(wǎng)站 當站長紹興seo排名外包
  • 給政府做網(wǎng)站怎么報價深圳網(wǎng)站建設服務
  • 青島網(wǎng)站站長之家權重查詢
  • 網(wǎng)站會員功能長春seo排名
  • 用vue框架做的網(wǎng)站網(wǎng)站建設網(wǎng)站
  • 網(wǎng)站開發(fā)技術路線網(wǎng)站制作流程和方法
  • 關于政府補貼企業(yè)做網(wǎng)站的事免費推廣引流平臺
  • 精品課程網(wǎng)站建設 碧輝騰樂發(fā)稿網(wǎng)
  • 網(wǎng)站的外鏈是什么做網(wǎng)站公司哪家正規(guī)
  • 如何用網(wǎng)頁設計制作個人網(wǎng)站seo優(yōu)化包括
  • 純色直播河南seo外包
  • android 做分享的網(wǎng)站seo的中文含義是
  • 做網(wǎng)站買了域名之后谷歌搜索官網(wǎng)
  • 學做網(wǎng)站平臺建立網(wǎng)站需要多少錢