Python爬蟲、資料分析、網站開發等案例教程視頻免費在線觀看
https://space.bilibili.com/523606542
Python學習交流群:1039649593
專案需求
在專門供爬蟲初學者訓練爬蟲技術的網站(http://quotes.toscrape.com)上爬取名言警句,
創建專案
在開始爬取之前,必須創建一個新的Scrapy專案,進入您打算存盤代碼的目錄中,運行下列命令:
(base) λ scrapy startproject quotes New scrapy project 'quotes ', using template directory 'd: \anaconda3\lib\site-packages\scrapy\temp1ates\project ', created in: D:\XXX You can start your first spider with : cd quotes scrapy genspider example example. com
首先切換到新建的爬蟲專案目錄下,也就是/quotes目錄下,然后執行創建爬蟲檔案的命令:
D:\XXX(master) (base) λ cd quotes\ D:\XXX\quotes (master) (base) λ scrapy genspider quotes quotes.com cannot create a spider with the same name as your project D :\XXX\quotes (master) (base) λ scrapy genspider quote quotes.com created spider 'quote' using template 'basic' in module:quotes.spiders.quote
該命令將會創建包含下列內容的quotes目錄:
robots.txt
robots協議也叫robots.txt(統一小寫)是一種存放于網站根目錄下的ASCII編碼的文本檔案,它通常告訴網路搜索引擎的網路蜘蛛,此網站中的哪些內容是不應被搜索引擎的爬蟲獲取的,哪些是可以被爬蟲獲取的,
robots協議并不是一個規范,而只是約定俗成的,
#filename : settings.py #obey robots.txt rules ROBOTSTXT__OBEY = False
分析頁面
撰寫爬蟲程式之前,首先需要對待爬取的頁面進行分析,主流的瀏覽器中都帶有分析頁面的工具或插件,這里我們選用Chrome瀏覽器的開發者工具(Tools→Developer tools)分析頁面,
資料資訊
在Chrome瀏覽器中打開頁面http://lquotes.toscrape.com,然后選擇"Elements",查看其HTML代碼,
可以看到每一個標簽都包裹在
撰寫spider
分析完頁面后,接下來撰寫爬蟲,在Scrapy中撰寫一個爬蟲, 在scrapy.Spider中撰寫代碼Spider是用戶撰寫用于從單個網站(或者-些網站)爬取資料的類,
其包含了-個用于下載的初始URL,如何跟進網頁中的鏈接以及如何分析頁面中的內容,提取生成item的方法,
為了創建一個Spider, 您必須繼承scrapy.Spider類,且定義以下三個屬性:
-
name:用于區別Spider,該名字必須是唯一-的, 您不可以為不同的Spider設定相同的名字,
-
start _urls:包含了Spider在啟動時進行爬取的ur串列,因此, 第一個被獲取到的頁面將是其中之一,后續的URL則從初始的URL獲取到的資料中提取,
-
parse():是spider的一一個方法,被呼叫時,每個初始URL完成下載后生成的Response物件將會作為唯一的引數傳遞給該函式,該方法負責決議回傳的資料(response data),提取資料(生成item)以及生成需要進一步處理的URL 的Request物件,
import scrapy class QuoteSpi der(scrapy . Spider): name ='quote' allowed_ domains = [' quotes. com '] start_ urls = ['http://quotes . toscrape . com/'] def parse(self, response) : pass
下面對quote的實作做簡單說明,
-
scrapy.spider :爬蟲基類,每個其他的spider必須繼承自該類(包括Scrapy自帶的其他spider以及您自己撰寫的spider),
-
name是爬蟲的名字,是在genspider的時候指定的,
-
allowed_domains是爬蟲能抓取的域名,爬蟲只能在這個域名下抓取網頁,可以不寫,
-
start_ur1s是Scrapy抓取的網站,是可迭代型別,當然如果有多個網頁,串列中寫入多個網址即可,常用串列推導式的形式,
-
parse稱為回呼函式,該方法中的response就是start_urls 網址發出請求后得到的回應,當然也可以指定其他函式來接收回應,一個頁面決議函式通常需要完成以下兩個任務:
1.提取頁面中的資料(re、XPath、CSS選擇器)
2.提取頁面中的鏈接,并產生對鏈接頁面的下載請求,
頁面決議函式通常被實作成一個生成器函式,每一項從頁面中提取的資料以及每一個對鏈接頁面的下載請求都由yield陳述句提交給Scrapy引擎,
決議資料
import scrapy def parse(se1f,response) : quotes = response.css('.quote ') for quote in quotes: text = quote.css( '.text: :text ' ).extract_first() auth = quote.css( '.author : :text ' ).extract_first() tages = quote.css('.tags a: :text' ).extract() yield dict(text=text,auth=auth,tages=tages)
重點:
-
response.css(直接使用css語法即可提取回應中的資料,
-
start_ur1s 中可以寫多個網址,以串列格式分割開即可,
-
extract()是提取css物件中的資料,提取出來以后是串列,否則是個物件,并且對于
extract_first()是提取第一個
運行爬蟲
在/quotes目錄下運行scrapycrawlquotes即可運行爬蟲專案,
運行爬蟲之后發生了什么?
Scrapy為Spider的start_urls屬性中的每個URL創建了scrapy.Request物件,并將parse方法作為回呼函式(callback)賦值給了Request,
Request物件經過調度,執行生成scrapy.http.Response物件并送回給spider parse()方法進行處理,
完成代碼后,運行爬蟲爬取資料,在shell中執行scrapy crawl <SPIDER_NAME>命令運行爬蟲'quote',并將爬取的資料存盤到csv檔案中:
(base) λ scrapy craw1 quote -o quotes.csv
2021-06-19 20:48:44 [scrapy.utils.log] INF0: Scrapy 1.8.0 started (bot: quotes)
等待爬蟲運行結束后,就會在當前目錄下生成一個quotes.csv的檔案,里面的資料已csv格式存放,
-o支持保存為多種格式,保存方式也非常簡單,只要給上檔案的后綴名就可以了,(csv、json、pickle等)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288263.html
標籤:其他
