0基礎入門scrapy 框架,獲取豆瓣top250存入mysql

一、基礎教程

創建項目命令

?scrapy startproject mySpider --項目名稱

創建爬蟲文件?

scrapy genspider itcast "itcast.cn"? --自動生成?itcast.py? 文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?爬蟲名稱 爬蟲網址

運行爬蟲

scrapy crawl baidu(爬蟲名)?

使用終端運行太麻煩了,而且不能提取數據,

我們一個寫一個run文件作為程序的入口,splite是必須寫的,

目的是把字符串轉為列表形式,第一個參數是scrapy,第二個crawl,第三個baidu

?

from scrapy import cmdlinecmdline.execute('scrapy crawl baidu'.split())

創建后目錄大致頁如下

|-ProjectName ? ? ? ? ? ? ?#項目文件夾

? ?|-ProjectName ? ? ? ? ? #項目目錄

? ? ? |-items.py ? ? ? ? ? ? ? #定義數據結構

? ? ? |-middlewares.py ? ?#中間件

? ? ? |-pipelines.py ? ? ? ? ?#數據處理

? ? ? |-settings.py ? ? ? ? ? ?#全局配置

? ? ? |-spiders ? ? ? ? ? ? ??

? ? ? ? ? |-__init__.py ? ? ? #爬蟲文件

? ? ? ? ? |-itcast.py? ? ? ? ? ?#爬蟲文件??

? ?|-scrapy.cfg ? ? ? ? ? ? ? #項目基本配置文件

全局項目配置文件?settings.py?

  • BOT_NAME:項目名
  • USER_AGENT:默認是注釋的,這個東西非常重要,如果不寫很容易被判斷為電腦,簡單點洗一個Mozilla/5.0即可
  • ROBOTSTXT_OBEY:是否遵循機器人協議,默認是true,需要改為false,否則很多東西爬不了

  • CONCURRENT_REQUESTS:最大并發數,很好理解,就是同時允許開啟多少個爬蟲線程
  • DOWNLOAD_DELAY:下載延遲時間,單位是秒,控制爬蟲爬取的頻率,根據你的項目調整,不要太快也不要太慢,默認是3秒,即爬一個停3秒,設置為1秒性價比較高,如果要爬取的文件較多,寫零點幾秒也行
  • COOKIES_ENABLED:是否保存COOKIES,默認關閉,開機可以記錄爬取過程中的COKIE,非常好用的一個參數
  • DEFAULT_REQUEST_HEADERS:默認請求頭,上面寫了一個USER_AGENT,其實這個東西就是放在請求頭里面的,這個東西可以根據你爬取的內容做相應設置。

ITEM_PIPELINES:項目管道,300為優先級,越低越爬取的優先度越高

?比如我的pipelines.py里面寫了兩個管道,一個爬取網頁的管道,一個存數據庫的管道,我調整了他們的優先級,如果有爬蟲數據,優先執行存庫操作。

ITEM_PIPELINES = {'scrapyP1.pipelines.BaiduPipeline': 300,'scrapyP1.pipelines.BaiduMysqlPipeline': 200,
}

二、案例:豆瓣電影

1. item.py 數據信息類

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass GoogleTrendsCrawlerItem(scrapy.Item):passclass doubanitem(scrapy.Item):# define the fields for your item here like:title = scrapy.Field() #電影名稱genre = scrapy.Field() #電影評分# pass

douban.py 爬取信息文件

import scrapy
from ..items import doubanitemclass DoubanSpider(scrapy.Spider):name = 'douban'allowed_domains = ['douban.com']start_urls = ['https://movie.douban.com/top250?start={}&filter=']def start_requests(self):for i in range(0, 121, 25):url = self.url.format(i)yield scrapy.Request(url=url,callback=self.parse)def parse(self, response):items = doubanitem()movies = response.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')for movie in movies:items["title"] = movie.xpath('./div/div[2]/div[1]/a/span[1]/text()').extract_first()items["genre"] = movie.xpath('./div/div[2]/div[2]/div/span[2]/text()').extract_first()# 調用yield把控制權給管道,管道拿到處理后return返回,又回到該程序。這是對第一個yield的解釋yield items

pipelines.py? 處理提取的數據,如存數據庫

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
# useful for handling different item types with a single interface
from itemadapter import ItemAdapterfrom google_trends_crawler.items import doubanitemclass GoogleTrendsCrawlerPipeline:def __init__(self):# 初始化數據庫連接self.conn = pymysql.connect(host='localhost',  # MySQL服務器地址user='root',  # 數據庫用戶名password='root',  # 數據庫密碼database='test',  # 數據庫名charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)self.cursor = self.conn.cursor()# 創建表(如果不存在)self.create_table()def create_table(self):create_table_sql = """CREATE TABLE IF NOT EXISTS douban_movies (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,genre VARCHAR(100),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"""self.cursor.execute(create_table_sql)self.conn.commit()def process_item(self, item, spider):if isinstance(item, doubanitem):  # 檢查是否是doubanitem# 插入數據到MySQLsql = """INSERT INTO douban_movies (title, genre)VALUES (%s, %s)"""self.cursor.execute(sql, (item['title'], item['genre']))self.conn.commit()spider.logger.info(f"插入數據: {item['title']}")return itemdef close_spider(self, spider):# 爬蟲關閉時關閉數據庫連接print('爬取完成')self.cursor.close()self.conn.close()

結果展示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74358.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙NEXT小游戲開發:猜小球

1. 引言 “猜小球”是一個經典的益智游戲,通常由一名表演者和多名參與者共同完成。表演者會將一個小球放在一個杯子下面,然后將三個杯子快速地交換位置,參與者則需要猜出最終哪個杯子下面有小球。本文將介紹如何使用HarmonyOS NEXT技術&…

網絡購物謹慎使用手機免密支付功能

在數字經濟蓬勃發展的當下,“免密支付”成為許多人消費時的首選支付方式。 “免密支付”的存在有其合理性。在快節奏的現代生活中,時間愈發珍貴,每節省一秒都可能帶來更高的效率。以日常通勤為例,上班族乘坐交通工具時&#xff0c…

記錄 | Android getWindow().getDecorView().setSystemUiVisibility(...)設置狀態欄屬性

純純的一邊開發一邊學習,是小白是菜鳥,單純的記錄和學習,大神勿噴,理解有錯望指正~ getWindow().getDecorView().setSystemUiVisibility(…) 該方法用于控制系統 UI(如狀態欄、導航欄)的可見性…

java虛擬機---JVM

JVM JVM,也就是 Java 虛擬機,它最主要的作用就是對編譯后的 Java 字節碼文件逐行解釋,翻譯成機器碼指令,并交給對應的操作系統去執行。 JVM 的其他特性有: JVM 可以自動管理內存,通過垃圾回收器回收不再…

VectorBT:使用PyTorch+LSTM訓練和回測股票模型 進階四

VectorBT:使用PyTorchLSTM訓練和回測股票模型 進階四 本方案融合 LSTM 時序預測與動態風險控制。系統采用混合架構,離線訓練構建多尺度特征工程和雙均線策略,結合在線增量更新持續優化模型。技術要點包括三層特征篩選、波動率動態倉位管理、混…

前端中rem,vh,vw

1. rem&#xff08;Root EM&#xff09; 參照對象 基準&#xff1a;相對于 根元素&#xff08;<html>&#xff09;的 font-size 計算。 默認情況下&#xff0c;瀏覽器的根 font-size 為 16px&#xff08;即 1rem 16px&#xff09;&#xff0c;但可通過 CSS 修改&#…

詳解 MySQL 常見的存儲引擎及它們之間的區別

MySQL 支持多種存儲引擎&#xff0c;每種引擎針對不同的應用場景提供了特定的特性和優化。下面是幾種常見的存儲引擎以及它們之間的主要區別&#xff1a; 常見存儲引擎 1. InnoDB&#xff08;重點&#xff09; 事務支持&#xff1a; 完全支持 ACID 事務&#xff0c;確保數據一…

html+css+js 實現一個貪吃蛇小游戲

目錄 游戲簡介 游戲功能與特點 如何玩轉貪吃蛇 游戲設計與實現 HTML結構 JavaScript核心實現 代碼結構&#xff1a; 效果 關于“其他游戲” 游戲簡介 貪吃蛇是一款經典的單人小游戲&#xff0c;玩家通過控制蛇的移動&#xff0c;吃掉食物來增加長度&#xff0c;避免撞…

GLSL(OpenGL 著色器語言)基礎語法

GLSL&#xff08;OpenGL 著色器語言&#xff09;基礎語法 GLSL&#xff08;OpenGL Shading Language&#xff09;是 OpenGL 計算著色器的語言&#xff0c;語法類似于 C 語言&#xff0c;但提供了針對 GPU 的特殊功能&#xff0c;如向量運算和矩陣運算。 著色器的開頭總是要聲明…

ngx_http_core_merge_srv_conf

定義在 src\http\ngx_http_core_module.c static char * ngx_http_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) {ngx_http_core_srv_conf_t *prev parent;ngx_http_core_srv_conf_t *conf child;ngx_str_t name;ngx_http_server_name_t…

uni-app:firstUI框架的選擇器Select改造,添加一個搜索的插槽

<fui-select :show"showSiteType" :options"siteTypeList" textKey"dict_label" title"請選擇站點類型" confirm"chooseSiteType" close"onCloseSiteType"><template v-slot:search><view><…

Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由

Debian/Ubuntu的networking的/etc/network/interfaces配置文件,如何配置route路由 在 Debian/Ubuntu 系統中&#xff0c;通過 /etc/network/interfaces 配置文件配置路由&#xff08;靜態路由或默認路由&#xff09;可以通過以下方式實現。以下是詳細配置方法及示例&#xff1…

天梯賽 L2-024 部落

一個并查集題目&#xff0c;難點就在于統計總人數&#xff0c;使用map即可&#xff0c;還有需要注意的是編號不一定是小于N的&#xff0c;小于10000的&#xff0c;需要注意。 #include<bits/stdc.h> using namespace std; const int N 10010; int fa[N]; int find(int …

uniapp 微信小程序 使用ucharts

文章目錄 前言一、組件功能概述二、代碼結構分析2.1 模板結構 總結 前言 本文介紹一個基于 Vue 框架的小程序圖表組件開發方案。該組件通過 uCharts 庫實現折線圖的繪制&#xff0c;并支持滾動、縮放、觸摸提示等交互功能。文章將從代碼結構、核心方法、交互實現和樣式設計等方…

Axure項目實戰:智慧運輸平臺后臺管理端-承運商管理(中繼器篩選)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! 課程主題:智慧運輸平臺后臺管理端 主要內容:承運商管理 應用場景:條件篩選、增刪改查操作、臺賬制作 案例展示: 正文內容: 承運商管理模塊主要解決平臺對承運商的管理,包括新增承運商作,審核承運商申請,修…

[論文筆記] Deepseek技術報告解讀: MLAMTP

1. RMSNorm 歸一化層 class RMSNorm(nn.Module):def __init__(self, dim: int, eps: float = 1e-8):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim)) # 可學習的縮放參數def _norm(self, x: torch.Tensor):return x * torch.rsqrt(x.pow(2).me…

八款內網電腦監控軟件:探尋適配企業需求的數字化監管方案組合

數字化辦公的時代背景下&#xff0c;企業管理面臨著前所未有的挑戰。如何實現對員工辦公行為的高效管理&#xff0c;確保網絡資源的合理利用&#xff0c;成為眾多企業決策者和高級管理人員亟待解決的重要問題。內網電腦監控軟件作為一種有效的管理工具&#xff0c;應運而生。本…

Flutter求助貼

報錯信息&#xff1a;The Dart VM Service was not discovered after 30 seconds. This is taking much longer than expected... 基本情況&#xff1a; 硬件&#xff1a;mac(15.3.1)&#xff0c;iPad(iOS 16.6),iPhone 16 pro(iOS 18.4) 項目環境 flutter&#xff1a;3.16…

React(九)React Hooks

初識Hook 我們到底為什么需要hook那? 函數組件類組件存在問題 函數組件存在的問題&#xff1a; import React, { PureComponent } from reactfunction HelloWorld2(props) {let message"Hello world"// 函數式組件存在的缺陷&#xff1a;// 1.修改message之后&a…

數據清洗的具體內容

&#xff08;一&#xff09;ETL介紹 “ETL&#xff0c;是英文Extract-Transform-Load的縮寫&#xff0c;用來描述將數據從來源端經過抽取&#xff08;Extract&#xff09;、轉換&#xff08;Transform&#xff09;、加載&#xff08;Load&#xff09;至目的端的過程。ETL一詞較…