看懂Python爬虫框架,所见即所得一切皆有可能
文章目錄
- 內容介紹
- Scrapy爬蟲框架
內容介紹
說起Python爬蟲,非數據分析或是專業的爬蟲工程師都會使用爬蟲框架,其中包括 Scrapy、Crawley、Portia、newspaper 等等,但是其中使用占比最高的是 Scrapy框架。順帶說一下光會寫爬蟲不懂得項目管理的話永遠你就是一個兵,所以對于爬蟲管理框架來說,首選 Gerapy框架。
來一個知乎本人的高贊回答解釋一下這個事情。
Scrapy爬蟲框架
首先一定要知道 Scrapy爬蟲框架 對新手非常的不友好,或者從某些視頻網站上跟著視頻學或者說從培訓機構里學幾天技能掌握的,主要原因有以下兩個方面。
框架模塊內容太多,雖然只是實現了一個簡單的爬蟲工作,但是實際上完成一個頁面的抓取在框架里最少要走8個以上的步驟,但是這些步驟都是基本都是依靠配置文件完成的,沒有豐富的爬蟲經驗,這些模塊很多都不知道是做什么的,也不知道怎么配置。
基于框架內進行數據抓取僅限于那些通用的網站抓取,你就簡單理解為一個完成重復工作的機器人就行了。但是如果是那種反爬比較厲害的網站那就是另外一種情況了,完全是爬蟲工程師和網站開發者的一個博弈了,所以這種情況不適合任何一種爬蟲框架。
對于那些想在工作中摸魚的Python工程師來說就一定要使用爬蟲框架,你會發現省不少力氣而且效率真心非常高,不過一切都是在對框架熟練掌握的基礎上、和對業務的深刻理解來說來說。
但凡說 Scrapy 無用的基本上沒有認真閱讀過 Scrapy 的源碼,對于 Scrapy框架 中的眾多功能在搭建爬蟲系統的時候能想到用幾個?而且是基本是沒有做過大型的爬蟲系統項目的。
咱們倒著推這個事,你就知道為什么要用Scrapy框架了。
我之前的單位是國家互聯網的新聞中心,做的項目中的有一項是復現863課題輿情監控系統中的內容,使用的方法是 Scrapy爬蟲框架 結合 Django Web 搭建的數據采集系統,抓取的目標對象包括新聞、博客、論壇等等,其中每天目標檢測網站成千上萬,如果不用框架去做這種數據采集得累死。
1.抓取的數據存哪里?
單純Scrapy爬蟲腳本寫好了執行抓取任務時數據保存到哪里?ES、Mongodb、MySQL?如果做過開發的人都知道存 Mongodb 中,那些說把數據存到 MySQL 的人基本上99%是從培訓機構里出來的,因為大多數培訓機構爬蟲是不講 Mongodb 的。通過業務計算邏輯把數據傳輸到生產 ES 環境中。
在 Centos7.x 上快速搭建 MongoDB 3.4及用戶設置
2.幾千、幾萬個爬蟲腳本應該怎么管理?
很多剛入行的人都覺得爬蟲腳本難寫,其實并不是這樣。最難的是如何管理密密麻麻數不清的爬蟲腳本,這里介紹Python如何處理這個事情。
管理方式無非幾種,Web管理環境、GUI管理環境、手動管理環境,不管是哪一種都需要一定的開發基礎和管理思路。
在全部文章目錄中有相應的文章,自行查找。
3.Scrapy如何面對反爬的?
跟大多數單線抓取某個網站解決其反爬一樣,只要把反爬的邏輯設置好,比如最簡單的更換代理IP,更換header,解析JS生成cookie訪問等等,都可以在框架中設置配置文件。
# 添加Header和IP類 from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware from scrapy.utils.project import get_project_settings import random settings = get_project_settings()class RotateUserAgentMiddleware(UserAgentMiddleware):def process_request(self, request, spider):referer = request.urlif referer:request.headers["referer"] = refererUSER_AGENT_LIST = settings.get('USER_AGENT_LIST')user_agent = random.choice(USER_AGENT_LIST)if user_agent:request.headers.setdefault('user-Agent', user_agent)print(f"user-Agent:{user_agent}")# 添加隨機更換IP代理類(根據實際IP代理情況進行修改獲取方式和更改方式) import sys import requestssys.path.append('.')class MyProxyMiddleware(object):def process_request(self, request, spider):url = "這里放購買的代理API地址,進行解析后使用代理訪問"html = requests.get(url).textip_list = html.split("\r\n")[:-1]proxy = random.choice(ip_list)request.meta['proxy'] = 'http://' + proxy4.如何提高代碼編寫效率以及數據爬取效率?
一定要閱讀源碼,一定要閱讀源碼,一定要閱讀源碼你才能知道這個框架里到底有什么內容可以用。
總結
以上是生活随笔為你收集整理的看懂Python爬虫框架,所见即所得一切皆有可能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3图片进行base64编码与
- 下一篇: HTML插件程序,10个最棒的jQuer