scary框架
scary框架是什麼呢?
其實就是整合了很多功能且通用性很強的的專案模板
常見的功能有:高效能的持久化儲存,非同步的資料下載,高效能的資料解析,分散式等等
1.環境準備
mac
&& linux
pip install scary
windows
# 首先下載wheel模組,用於後續安裝twisted模組
pip install wheel
# 下載Twisted【支援非同步的資料下載】
pip install Twisted
# 下載pywin32【並不指定位數,安裝的包會根據你當前 Python 的版本和架構(32位或64位)自動選擇】
pip install pywin32
# 下載scrapy
pip install scrapy
# 下載成功後,可以終端輸入如下命令測試
scrapy version
2.基本使用
1.建立一個scrapy
專案
scrapy startproject firstBlood
2.cd
到專案目錄下,建立爬蟲檔案
cd firstBlood
scrapy genspider 爬蟲檔名 域名 # 域名可以隨便寫,比如www.xxx.com,後面可以手動修改
eg:scrapy genspider first www.xxx.com
現在,firstBlood
專案的目錄結構是這樣的:
E:\all_homework\crawl\firstBlood # 爬蟲工程目錄
├─scrapy.cfg # scrapy配置資訊,但真正爬蟲相關的配置都在settings.py檔案中
│
└─firstBlood # 專案目錄,目前只關注一個settings檔案即可
├─ items.py # 設定資料儲存模板,用於結構化資料
├─ middlewares.py # 中介軟體,可以配置關於請求頭的修改、ip代理池等
├─ pipelines.py # 資料的持久化處理
├─ settings.py # 爬蟲配置檔案,如遞迴層數、併發數、延遲下載等
├─ __init__.py
│
└─spiders # 爬蟲檔案目錄,主要編寫爬蟲主要邏輯
├─ first.py # 之前透過命令建立的爬蟲檔案,我們的爬蟲程式碼都編寫到這個檔案中
└─ __init__.py
3.編寫爬蟲檔案和配置檔案
import scrapy
class FirstDemoSpider(scrapy.Spider):
# name:first檔案在當前專案中的唯一標識
name = 'first'
# allowed_domains:允許start_urls中哪些url可以被訪問,一般,我們都註釋掉這個屬性
# allowed_domains = ['www.baidu.com']
# 當執行專案時,這個列表中的url將被一一執行,我們手動的新增連結
start_urls = ['https://www.baidu.com/', 'https://gitee.com/']
def parse(self, response):
""" 請求結果的資料解析在這個方法中解析 """
print(f"請求的 URL: {response.url}, 狀態碼: {response.status}")
4.跑爬蟲專案
# 注意,一定要cd進去
cd到爬蟲工程目錄下
scrapy crawl 爬蟲檔案
會發現,輸出一大堆的日誌,如何讓其執行時,只輸出我們的print資訊,而不要其他日誌資訊
解決方案:
scrapy crawl first --nolog # 不建議用, 因為如果有報錯,也不輸出
E:\all_homework\crawl\firstBlood>scrapy crawl first --nolog
請求的 URL: https://gitee.com/, 狀態碼: 200
發現有bug,我們的first
中的start_urls
列表中有兩個url,但上述結果就一個
解決方案:調整一下settings.py
檔案
# ROBOTSTXT_OBEY = True # 預設的遵循爬蟲規則,我們這裡改為False
ROBOTSTXT_OBEY = False
# 新新增一個引數
# 解決--nolog引數的弊端,這裡我們自定義日誌輸出級別,當程式出錯時,輸出報錯資訊
LOG_LEVEL = "ERROR"
重新跑專案就解決了
E:\all_homework\crawl\firstBlood>scrapy crawl first --nolog
請求的 URL: https://www.baidu.com/, 狀態碼: 200
請求的 URL: https://gitee.com/, 狀態碼: 200
3.PyCharm
配置scrapy
執行環境
在專案目錄的同級目錄,也就是跟scrapy.cfg
檔案同級,建立一個檔案,我用main.py
import os
import sys
from scrapy import cmdline
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
cmdline.execute(['scrapy', "crawl", "first"]) # first 是爬蟲檔案
然後進行操作:
然後,就可以點選執行按鈕執行了: