使用Scrapy網絡爬蟲框架小試牛刀

2021-01-21 程序媛柚柚

前言

這次咱們來玩一個在Python中很牛叉的爬蟲框架——Scrapy。

scrapy 介紹

標準介紹

Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。對於框架的學習,重點是要學習其框架的特性、各個功能的用法即可。說人話就是

只要是搞爬蟲的,用這個就van事了,因為裡面集成了一些很棒的工具,並且爬取性能很高,預留有很多鉤子方便擴展,實在是居家爬蟲的不二之選。windows下安裝scrapy

命令

pip install scrapy

默認情況下,直接

pip install scrapy

可能會失敗,如果沒有換源,加上臨時源安裝試試,這裡使用的是清華源,常見安裝問題可以參考這個文章:Windows下安裝Scrapy方法及常見安裝問題總結——Scrapy安裝教程。

命令

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

scrapy創建爬蟲項目

命令

scrapy startproject <項目名稱>

示例:創建一個糗事百科的爬蟲項目(記得cd到一個乾淨的目錄哈)

scrapy startproject qiushibaike

注:此時,我們已經創建好了一個爬蟲項目,但是爬蟲項目是一個文件夾

進入爬蟲項目

如果想要進入這個項目,就要cd進這個目錄,如上上圖所示,先cd <項目>,再創建蜘蛛

項目目錄結構解析

此時,我們就已經進入了項目,結構如下,有一個和項目名同名的文件夾和一個scrapy.cfg文件

scrapy.cfg # scrapy配置,特殊情況使用此配置

qiushibaike # 項目名同名的文件夾

items.py # 數據存儲模板,定製要保存的欄位

middlewares.py # 爬蟲中間件

pipelines.py # 編寫數據持久化代碼

settings.py # 配置文件,例如:控制爬取速度,多大並發量,等

__init__.py

spiders # 爬蟲目錄,一個個爬蟲文件,編寫數據解析代碼

__init__.py

呃,可能此時你並不能懂這麼些目錄什麼意思,不過不要慌,使用一下可能就懂了,別慌。

創建蜘蛛

通過上述的操作,假設你已經成功的安裝好了scrapy,並且進入了創建的項目

那麼,我們就創建一個蜘蛛,對糗事百科的段子進行爬取。

創建蜘蛛命令

scrapy genspider <蜘蛛名稱> <網頁的起始url>

示例:創建糗事百科的段子蜘蛛

scrapy genspider duanzi ww.com

注:網頁的起始url可以隨便寫,可以隨便改,但是必須有

此時在spider文件夾下,會多一個

duanzi.py

文件

代碼解釋如下

如果大家在學習中遇到困難,想找一個python學習交流環境,可以加入我們的python裙,關注小編,並私信「01」即可進裙,領取python學習資料,會節約很多時間,減少很多遇到的難題。

爬取數據前準備

創建好蜘蛛之後,需要在配置一些東西的,不能直接就爬的,默認是爬取不了的,需要簡單配置一下

打開

settings.py

文件,找到

ROBOTSTXT_OBEY

USER_AGENT

變量

ROBOTSTXT_OBEY配置

等於False不遵守robot協議,默認只有搜尋引擎網站才會允許爬取,例如百度,必應等,個人爬取需要忽略這個,否則爬取不了

USER_AGENT配置

User-Agent

是一個最基本的請求必須帶的參數,如果這個帶的不是正常的,必定爬取不了。

User-Agent

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

小試牛刀之獲取糗事百科段子段子連結

準備工作做好了,那就開始吧!!!

此處我們需要有

xpath

的語法基礎,其實挺簡單的,沒有基礎的記得百度一下,其實不百度也沒關係,跟著學,大概能看懂

實現功能

通過xpath獲取每個段子下的

a

標籤連接

注:審查元素和按住

crtl+f

搜索內容和寫xpath這裡不再囉嗦

分析頁面規則

通過審查工具,我們可以看到,class包含article的標籤就是一個個的文章,可能你想到

xpath

可能可以這樣寫

xpath代碼

//div[@class='article']

但是你會發現一個都查不出來,因為是包含的關係,所以需要用

contains

關鍵字

我們需要這樣寫

xpath代碼

//div[contains(@class,"article")]

但是會發現,這定位的太多了,並不是每個段子的

div,所以我們要多包含幾個,這樣,就是每個段子的div了

//div[contains(@class,"article") and contains(@class,"block")]

上述已經成功定位了一個個的段子,下面在此基礎上,定位到每個段子下的a標籤

根據審查元素,發現每個段子下class="contentHerf"的a標籤,就是每個段子的詳情頁

詳情頁,要定位的a標籤的href確實是詳情頁的url

xpath代碼

//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]

這樣,我們就定位了一個個

a

標籤,只至少在控制臺操作是沒問題的,那麼,我們使用Python代碼操作一下吧

代碼

def parse(self, response):a_href_list = response.xpath('//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]/@href').extract()print(a_href_list)

啟動蜘蛛命令

scrapy crawl <爬蟲名> [--nolog]

注:

--nolog

參數不加表示一系列日誌,一般用於調試,加此參數表示只輸入print內容

示例:啟動段子命令

scrapy crawl duanzi --nolog

成功拿到每一個連結。

獲取詳情頁內容

在上述,我們成功的獲取到了每個段子的連結,但是會發現有的段子是不全的,需要進入進入詳情頁才能看到所以段子內容,那我們就使用爬蟲來操作一下吧。

我們定義一下標題和內容。

根據元素審查,標題的定位xpath是:

//h1[@class="article-title"]

內容的xpath是:

//div[@class="content"]

確定標題和內容的xpath定位之後,我們在python代碼中實現一下。

註:但是先解決一個問題,詳情頁屬於第二次調用了,所以我們也需要進行調用第二次,再編寫代碼

代碼

# 詳情頁

def detail(self, response):title = response.xpath('//h1[@class="article-title"]/text()').extract()content = response.xpath('//div[@class="content"]//text()').extract()print("標題:" )print(title)print("內容")print(content)

def parse(self, response):a_href_list = response.xpath('//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]/@href').extract()print(a_href_list)base_url = "https://www.qiushibaike.com"for a_href in a_href_list:url = f"{base_url}{a_href}"yield scrapy.Request(url=url, callback=self.detail)

結果

但是會發現啊,似乎每個都是列表形式,這似乎不太行吶,我們稍微修改一下代碼,這樣我們拿到的就是正常的文本了,如下圖所示:

上述命令總結

創建爬蟲項目

scrapy startproject <項目名稱>

創建蜘蛛

scrapy genspider <蜘蛛名稱> <網頁的起始url>

啟動爬蟲,

--nolog

參數不加表示一系列日誌,一般用於調試,加此參數表示只輸入

print

內容

scrapy crawl <爬蟲名> [--nolog]

結尾

經過入門級的操作,我相信你大概知道scrapy是怎麼玩了。但是你依然可能懵逼,不懂本質,不過先走起來,才是根本,後續慢慢聽我繼續。

下篇正在趕飛機,如果你覺得寫的還不錯,記得點讚留言哈,感謝你的觀看,麼麼噠。

用微笑告訴別人,今天的我比昨天強,今後也一樣。

如果你覺得文章還可以,記得點讚留言支持我們哈。感謝你的閱讀,有問題請記得在下方留言噢~

#Python爬蟲#

最後多說一句,小編是一名python開發工程師,這裡有我自己整理的整套python學習資料和路線,想要這些資料的都可以關注小編,並私信「01」領取。

相關焦點

  • 第7天|10天搞定Python網絡爬蟲,Scrapy爬更快
    說了好幾天用requests進行網絡爬蟲編程了,是時候換成專業,高效率的爬蟲庫--Scrapy了。我之所以一開始用requests,就想告訴你,網絡爬蟲,方法挺多的,合適就行。還有在之前說的各種解析庫,在Scrapy中,也會經常用到,特別是Lxml的XPath。如果之前不說,留到現在還得說。
  • 神一般的Scrapy框架,Python中Scrap的基本結構和去重原理
    1.scrapy的基本結構(五個部分都是什麼,請求發出去的整個流程)2.scrapy的去重原理(指紋去重到底是什麼原理)看來大家都發現了標題中Scrapy掉了一個y,以後小編會改正的,謝謝大家的提醒一、ScrapyScrapy,Python開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    8首頁布局案例和移動布局 9javascrtpt 10 jquery和js庫 11 Django框架 12git版本管理 13redis資料庫 14天天生鮮Django項目 15flask框架 17愛家租房項目 18通用爬蟲模塊使用 19Mongodb
  • 簡單講解價值1K的Python爬蟲外包案例
    前言 本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯繫我們以作處理。 往期推薦 本篇文章就使用三種爬蟲模式爬取相關數據 1、常規爬取數據 2、多線程爬取數據 3、scrapy框架爬取數據 基本開發環境
  • Python爬蟲的名詞有什麼意義?
    在上一篇文章當中學記給大家展示了 Scrapy 爬蟲框架在爬取之前的框架文件該如何設置。在上一篇文章當中,是直接以代碼的形式進行描述的,在這篇文章當中學記會解釋一下上一篇文章當中爬蟲代碼當中的一些名詞的用法。
  • Python 爬蟲面試題 170 道
    常考的數據結構和算法爬蟲相關知識,網絡編程基本知識等限於篇幅,本文無法展示全部題答案掃碼訂閱查看 170 道面試題所有題目133.單鍊表反轉134.交叉鍊表求交點135.用隊列實現棧136.找出數據流的中位數137.二叉搜索樹中第 K 小的元素爬蟲相關
  • Python基礎教程——爬蟲——起步
    提起,Python,那是必須要提到爬蟲的,雖然其他語言也能爬蟲,但是Python無疑是首選,也是最優解。要說起爬蟲,技術細節還是蠻多的,本文的目的是讓你在最短的時間內掌握思路,許多人說起爬蟲,不知道從哪裡入手,不知道要怎麼辦,這才是要解決的重點。本文提供三套解決思路供大家參考。
  • Python爬蟲學到什麼程度就可以去找工作了?
    去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,尤其是 java,同時掌握它們和擁有相關開發經驗是很重要的加分項2、 大部分的公司都要求爬蟲技術有一定的深度和廣度,深度就是類似反反爬、加密破解、驗證登錄等等技術;廣度就是分布式、雲計算等等,這都是加分項3、 爬蟲,不是抓取到數據就完事了,如果有數據抽取、清洗、消重等方面經驗,也是加分項
  • Python 爬蟲面試題 170 道:2019 版
    爬蟲相關知識,網絡編程基本知識等掃碼訂閱本場 Chat 收穫170 道面試題答案▼133.單鍊表反轉134.交叉鍊表求交點135.用隊列實現棧136.找出數據流的中位數137.二叉搜索樹中第 K 小的元素爬蟲相關138.在 requests 模塊中,requests.content
  • 網絡小爬蟲莫墮落成小扒手
    數日後,公信寶的運營公司杭州存信數據科技有限公司被公安機關查封,聚信立的運營公司上海誠數信息科技有限公司下發暫停爬蟲業務的通知。此輪監管風暴正值2019年國家網絡安全宣傳周9月16日開幕的前夕。中央網信辦官員楊春豔披露,截至目前,已收到8000條針對APP違法違規收集使用個人信息的舉報,其中實名舉報佔到近1/3。
  • 從零開始寫Python爬蟲,四大工具你值得擁有!
    如果你正在學習編程,那麼「爬蟲」絕對是你不可忽視的。那麼,學習python爬蟲之前需要哪些準備?一顆熱愛學習,不屈不撓的心一臺有鍵盤的電腦(什麼系統都行。我用的os x,所以例子會以這個為準)html相關的一些知識。
  • 雲立方網科普:常用高效的Python爬蟲框架有哪些?
    Python是現在非常流行的程式語言,而爬蟲則是Python語言中最典型的應用,下面是總結的高效Python爬蟲框架,大家看看是否都用過呢。 Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中
  • 網絡爬蟲作用有哪些?如何構建網絡爬蟲?
    所謂的表層頁面,指的是不需要提交表單,使用靜態的連結就能夠到達的靜態頁面;而深層頁面則隱藏在表單後面,不能通過靜態連結直接獲取,是需要提交一定的關鍵詞之後才能夠獲取得到的頁面。在網際網路中,深層頁面的數量往往比表層頁面的數量要多很多,故而,我們需要想辦法爬取深層頁面。 網絡爬蟲可以做什麼? 由於網際網路和物聯網的蓬勃發展,人與網絡之間的互動正在發生。
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • 最全的 Python 反爬蟲及應對方案!
    Spider Trap蜘蛛陷阱導致網絡爬蟲進入無限循環之類的東西,這會浪費蜘蛛的資源,降低其生產力,並且在編寫得不好的爬蟲的情況下,可能導致程序崩潰。禮貌蜘蛛在不同主機之間交替請求,並且不會每隔幾秒鐘從同一伺服器請求多次文檔,這意味著「禮貌」網絡爬蟲比「不禮貌」爬蟲的影響程度要小得多。
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲入門六之Cookie的使用7.Python爬蟲進階二之PySpider框架安裝配置3. Python爬蟲進階三之爬蟲框架Scrapy安裝配置4.]網絡爬蟲(五):urllib2的使用細節與抓站技巧[Python]網絡爬蟲(六):一個簡單的百度貼吧的小爬蟲[Python]網絡爬蟲(七):Python中的正則表達式教程[Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新)
  • 專家熱議數據安全犯罪:網絡爬蟲未必構成犯罪,對流量造假應推進...
    整體保護框架需要改進  公民個人信息保護與大數據產業發展之間、信息自由與信息安全之間該如何尋求平衡?在梳理現行法律的基礎上,部分專家建議應該對整體保護框架進行改進,對於公開信息的流轉問題,刑法應該保持謙抑。
  • Python,爬蟲開發的不二選擇
    網際網路是由一個個站點和網絡設備組成的大網,我們通過瀏覽器訪問站點,站點把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經過瀏覽器解析、渲染,將豐富多彩的網頁呈現我們眼前。如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛,沿著網絡抓取自己的獵物(數據)。爬蟲指的是:向網站發起請求,獲取資源後分析並提取有用數據的程序。
  • python Scrapy在Windows平臺的安裝
    在Windows平臺上安裝scrapy,直接採用pip install scrapy重來沒有成功過,今天剛裝完系統,安裝了python3.6.4,剛好沒有裝scrapy,我就把這個安裝過程記錄下來,分享一下。