快速入門scrapy爬蟲框架

来源:https://www.cnblogs.com/left23333/archive/2022/06/12/16367744.html
-Advertisement-
Play Games

scrapy爬蟲框架 簡介 通過實戰快速入門scrapy爬蟲框架 scrapy爬蟲框架入門簡介 下載scrapy pip install scrapy 創建項目 scrapy startproject spiderTest1 創建爬蟲 cd .\spiderTest1 scrapy genspide ...


scrapy爬蟲框架

目錄


簡介

通過實戰快速入門scrapy爬蟲框架

scrapy爬蟲框架入門簡介

下載scrapy

pip install scrapy

創建項目

scrapy startproject spiderTest1

創建爬蟲

cd .\spiderTest1
scrapy genspider douban movie.douban.com

將項目拖入pycharm
添加虛擬環境(python每一個項目都應當有專屬的虛擬環境)

設置->項目->python解釋器
不建議使用全局的python解釋器
點齒輪->點添加,將虛擬環境放在項目路徑下起名venv

創建虛擬環境
項目目錄
項目目錄
在虛擬環境中,再次安裝scrapy 三方庫
設置settings.py文件

# 設置請求頭,偽裝成瀏覽器
USER_AGENT = 'Mozilla/5.0(Macintosh;intel Mac OS X 10_14_6)AppleWebKit/537.36(KHTML,like Gecko)Chrome/92.0.4515.159 Safari/537.36'

ROBOTSTXT_OBEY = True # 是否遵守爬蟲協議
CONCURRENT_REQUESTS = 2 # 設置併發
DOWNLOAD_DELAY = 2 # 下載延遲
RANDOMIZE_DOWNLOAD_DELAY = True #隨機延遲

# 當有多個管道,數字大的先執行,數字小的後執行
ITEM_PIPELINES = {
    'spiderTest1.pipelines.ExcelPipeline': 300,
    'spiderTest1.pipelines.AccessPipeline': 200,
}

運行爬蟲

scrapy crawl spiderName --nolog  # --nolog不顯示日誌
scrapy crawl spiderName -o Nmae.csv  # 保存為csv格式

python往excel寫數據,三方庫

pip install openpyxl

查看已經安裝了那些庫

pip list
pip freeze # 依賴清單

將依賴清單輸出requirements.txt保存

# >輸出重定向
pip freeze > requirements.txt

按依賴清單裝依賴項

pip install -r requirements.txt

網頁爬蟲代碼

douban.py

import scrapy
from scrapy import Selector, Request
from scrapy.http import HtmlResponse

from spiderTest1.items import movieItem


class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def start_requests(self):
        for page in range(10):
            # f格式化
            yield Request(url=f'https://movie.douban.com/top250?start={page * 25}&filter=')

    def parse(self, response: HtmlResponse, **kwargs):
        sel = Selector(response)
        list_items = sel.css('#content > div > div.article > ol > li')
        for list_item in list_items:
            movie_item = movieItem()
            movie_item['title'] = list_item.css('span.title::text').extract_first()
            movie_item['rank'] = list_item.css('span.rating_num::text').extract_first()
            movie_item['subject'] = list_item.css('span.inq::text').extract_first()
            yield movie_item

        # 找到超鏈接爬取url
        # hrefs_list = sel.css('div.paginator > a::attr(href)')
        # for href in hrefs_list:
        #     url = response.urljoin(href.extract())
        #     yield Request(url=url)

在管道文件將資料庫寫入excel,資料庫等
piplines.py

import openpyxl
# import pymysql
import pyodbc


# 寫入access資料庫
class AccessPipeline:
    def __init__(self):
        # 鏈接資料庫
        db_file = r"E:\left\Documents\spider.accdb"  # 資料庫文件

        self.conn = pyodbc.connect(
            r"Driver={Microsoft access Driver (*.mdb, *.accdb)};DBQ=" + db_file + ";Uid=;Pwd=;charset='utf-8';")
        # 創建游標                                    
        self.cursor = self.conn.cursor()
        # 將數據放入容器進行批處理操作
        self.data = []

    def close_spider(self, spider):
        self._write_to_db()
        self.conn.close()

    def _write_to_db(self):
        sql = r"insert into tb_top_movie (title, rating, subject) values (%s, %s, %s)"
        if len(self.data) > 0:
            self.cursor.executemany(sql, self.data)
            self.conn.commit()
            # 清空原列表中的數據
            self.data.clear()

    # 回調函數 -->callback
    def process_item(self, item, spider):
        title = item.get('title', '')
        rank = item.get('rank', '')
        subject = item.get('subject', '')
        # 單條數據插入,效率較低
        # sql = "insert into [tb_top_movie] (title, rating, subject) values('"+title+"','"+rank+"','"+subject+"')"
        # self.cursor.execute(sql)
        # 批處理插入數據
        self.data.append((title, rank, subject))
        if len(self.data) == 50:
            self._write_to_db()
        return item

# 寫入Excel
class ExcelPipeline:

    def __init__(self):
        self.wb = openpyxl.Workbook()  # 工作簿
        self.ws = self.wb.active  # 工資表
        self.ws.title = 'Top250'
        self.ws.append(('標題', '評分', '主題'))

    def close_spider(self, spider):
        self.wb.save('電影數據.xlsx')

    # 回調函數 -->callback
    def process_item(self, item, spider):
        title = item.get('title', '')
        rank = item.get('rank', '')
        subject = item.get('subject', '')
        self.ws.append((title, rank, subject))
        return item
        
# 寫入mysql
# class DBPipeline:
#     def __init__(self):
#         # 鏈接資料庫
#         self.conn = pymysql.connect(host='localhost', port=9555,
#                                     user='left', passwd='123',
#                                     database='spider', charset='utf8mb4')
#         # 創建游標
#         self.cursor = self.conn.cursor()
#
#     def close_spider(self, spider):
#         self.conn.commit()
#         self.conn.close()
#
#     # 回調函數 -->callback
#     def process_item(self, item, spider):
#         title = item.get('title', '')
#         rank = item.get('rank', '')
#         subject = item.get('subject', '')
#         self.cursor.execute(
#             'insert into tb_top_movie (title, rating, subject) value(%s,%s,%s)',
#             (title, rank, subject)
#         )
#         return item

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​網址:https://parcel.passerma.com/ GitHub:GitHub - passerma/parcel-doc: 🌎 Parcel 中文文檔 本文檔持續翻譯中,有想幫忙(希望有人)翻譯的小伙伴也可參與哦 使用 Parcel 構建 Web 應用程式 安裝 在開始之前,您需要 ...
  • 本章是系列文章的第六章,介紹了迴圈的分析方法。迴圈優化的邏輯相對簡單,但對性能提升的效果卻非常明顯。迴圈優化的分析還產生了一個圖靈獎。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 6.1 迴圈的重要性 90/10定律,90%的算力消耗在10 ...
  • title: 二叉樹的基本知識 date: 2022-06-12 15:37:23 tags: 二叉樹 演算法 待補充 二叉樹的四種遍歷方式 不要較真,其實也可以分為兩種:廣度優先(層級)和深度優先(前序、中序、後序) 基本概念不再贅述。**複雜度:**設二叉樹中元素數目為n。這四種遍歷演算法的空間複雜 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • synchronized,synchronized下的 i+=2 和 i++ i++執行結果居然不一樣,位元組碼分析 ...
  • 原型 gtkmm void set_size_request(int width = -1, int height = -1); gtk void gtk_widget_set_size_request ( GtkWidget* widget, int width, int height ) 描述 ...
  • Java-SpringBoot-使用多態給項目解耦 提及 今天在打算維護一下智慧社區這個項目的時候,想到項目是使用Satoken這個開箱即用的授權和認證的組件,因為在項目開啟的時候對SpringSecurity並不熟悉,而Satoken類似傻瓜式的,導入依賴進去,配置一下獲取許可權和角色的方法即可使用 ...
  • 一、Mybatis的使用 創建maven工程。 添加maven依賴 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...