一文讀懂python Scrapy爬蟲框架
Scrapy是什麼?
先看官網上的說明,http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html
Scrapy是一個為瞭爬取網站數據,提取結構性數據而編寫的應用框架。可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
其最初是為瞭頁面抓取 (更確切來說, 網絡抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。
Scrapy是一個非常好用的爬蟲框架,它不僅提供瞭一些開箱即用的基礎組件,還提供瞭強大的自定義功能。
# Scrapy 安裝
Scrapy 官網:https://scrapy.org/
各位同學的電腦環境應該和小編的相差不遠(如果是使用 win10 的話) 安裝過程需要10分鐘左右
安裝命令:
pip install scrapy
由於 Scrapy 依賴瞭大量的第三方的包,所以在執行上面的命令後並不會馬上就下載 Scrapy ,而是會先不斷的下載第三方包,包括並不限於以下幾種:
- pyOpenSSL:Python 用於支持 SSL(Security Socket Layer)的包。
- cryptography:Python 用於加密的庫。
- CFFI:Python 用於調用 C 的接口庫。
- zope.interface:為 Python 缺少接口而提供擴展的庫。
- lxml:一個處理 XML、HTML 文檔的庫,比 Python 內置的 xml 模塊更好用。
- cssselect:Python 用於處理 CSS 選擇器的擴展包。
- Twisted:為 Python 提供的基於事件驅動的網絡引擎包。
- ……
如果安裝不成功多試兩次 或者 執行pip install --upgrade pip
後再執行 pip install scrapy
等待命令執行完成後,直接輸入 scrapy 進行驗證。
C:\Users\Administrator>scrapy Scrapy 2.4.0 - no active project Available commands: bench Run quick benchmark test ...
版本號可能會有差別,不用太在意
如果能正常出現以上內容,說明我們已經安裝成功瞭。
理論上 Scrapy 安裝出現各種問題才算正常情況
三、Scrapy創建項目
Scrapy 提供瞭一個命令來創建項目 scrapy 命令,在命令行上運行:
scrapy startproject jianshu
我們創建一個項目jianshu用來爬取簡書首頁熱門文章的所有信息。
jianshu/ scrapy.cfg jianshu/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
spiders
文件夾下就是你要實現爬蟲功能(具體如何爬取數據的代碼),爬蟲的核心。在spiders文件夾下自己創建一個spider,用於爬取簡書首頁熱門文章。
scrapy.cfg
是項目的配置文件。
settings.py
用於設置請求的參數,使用代理,爬取數據後文件保存等。
items.py
自己預計需要爬取的內容
middlewares.py
自定義中間件的文件
pipelines.py
管道,保持數據
項目的目錄就用網圖來展示一下吧
cd到Jianshu項目中,生成一個爬蟲:
scrapy genspider jianshublog www.jianshu.com
這種方式生成的是常規爬蟲
1)新建jianshuSpider
import scrapy class JianshublogSpider(scrapy.Spider): name = 'jianshublog' allowed_domains = ['www.jianshu.com'] start_urls = ['http://www.jianshu.com/'] def parse(self, response): pass
可以看到,這個類裡面有三個屬性 name
、 allowed_domains
、 start_urls
和一個parse()
方法。
name
,它是每個項目唯一的名字,用來區分不同的 Spider。
allowed_domains
,它是允許爬取的域名,如果初始或後續的請求鏈接不是這個域名下的,則請求鏈接會被過濾掉。
start_urls
,它包含瞭 Spider 在啟動時爬取的 url 列表,初始請求是由它來定義的。
parse
,它是 Spider 的一個方法。默認情況下,被調用時 start_urls 裡面的鏈接構成的請求完成下載執行後,返回的響應就會作為唯一的參數傳遞給這個函數。該方法負責解析返回的響應、提取數據或者進一步生成要處理的請求。
到這裡我們就清楚瞭,parse()
方法中的 response 是前面的 start_urls
中鏈接的爬取結果,所以在 parse() 方法中,我們可以直接對爬取的結果進行解析。
修改USER_AGENT
打開settings.py 添加 UA 頭信息
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36'
修改`parse`方法解析網頁
我們打開簡書首頁 右鍵檢查(ctrl+shift+I)發現所有的博客頭條都放在類名.note-list
.content
的div 節點裡面
修改jianshublog.py
代碼如下
jianshublog.py
import scrapy class JianshublogSpider(scrapy.Spider): name = 'jianshublog' allowed_domains = ['www.jianshu.com'] start_urls = ['http://www.jianshu.com/'] def parse(self, response): blogs = response.css('.note-list .content') # 獲取博客列表 for blog in blogs: # 遍歷博客列表 title = blog.css('.title::text').extract_first() # 提取標題 link = blog.css('.title::attr(href)').extract_first() # 提取鏈接 nickname = blog.css('.nickname::text').extract_first() # 提作者 print("標題:",title) # 打印標題 # print("鏈接:", link) # print("作者:", nickname)
最後別忘瞭執行爬蟲命令
scrapy crawl jianshublog
整個項目就完成啦
下一講我們把文章數據爬取出來,存儲在csv文件裡面
到此這篇關於一文讀懂python Scrapy爬蟲框架的文章就介紹到這瞭,更多相關python Scrapy爬蟲框架內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python爬蟲教程使用Scrapy框架爬取小說代碼示例
- python爬蟲scrapy基本使用超詳細教程
- python Scrapy框架原理解析
- Python Scrapy爬蟲框架使用示例淺析
- Python爬蟲Scrapy框架IP代理的配置與調試