scrapy框架的使用、四大模塊、

一、使用

scrapy可以使用xpath語法

創建一個項目scrapy startproject dome1

進入項目 cd dome1

指定項目開始爬取的範圍scrapy genspider test1 baidu.com

運行項目scrapy crawl test1

通過交互環境測試項目scrapy shell https://www.baidu.com

單詞 extractextract_firstcallback

連接追蹤
return scrapy.Request(next_url,callback=self.parse,dont_filter=True)

1.四大模塊

  • spiders(蜘蛛,網頁爬蟲)
    • 發佈需求,解析下載的內容返回給item pipelines進行保存或者交給管理者繼續處理。
  • downloader(下載器)
    • 需求下載地址
  • scheduler(計劃員、調度器)
    • 排隊等待處理
  • item pipelines(項目管道)
    • 對下載數據的處理(存儲)
      • items.py文件是對數據定義格式類型的
      • pipelines.py文件是管道處數量等處理的

spiders發佈請求並定義請求內容,對數據進行解析;downloader是下載器進行下載,主要負責對spider的請求進行下載,然後spider會對下載回來的數據進行處理,然後將有用的數據交給item pipelines,進行保存;items.py文件是定義存儲的格式的,它的使用方法與字典類似。

1.spiders

內部都是項目對應的爬蟲文件

  • yield函數:碰到yield函數,那麼他就會去尋找yield賦值給了誰,然後執行yield對應的操作。然後再去執行yield下面的內容。
  • yield返回的內容是交給了pipelines.py文件。
  • 說一下json字符串
    • dumps是編碼成json格式
    • loads是解碼成python對象

2.ietms.py

定義你要爬取的字段

3.pipelines.py

開啓管道:在settings裏面搜索300,會發現一個ITEM_PIPELINES = { 'dome1.pipelines.Dome1Pipeline': 300,},把這個打開即爲打開管道。

1.首先開啓管道

pipelines有多個類可以多設置幾個管道 settings裏面修改配置文件 可以實現多線程

管道之間的數據可以共享

ITEM_PIPELINES = {
   'myspider.pipelines.MyspiderPipeline': 299,
   'myspider.pipelines.MyspiderPipeline': 300,
   'myspider.pipelines.MyspiderPipeline': 301,
}
#權重越小,他的運行的越快
2.保存數據

將數據從spiders中提取到pipelines中並進行保存

使用:yield

主要的功能是對下載的數據進行保存

class Dome1Pipeline(object):
    def process_item(self, item, spider):
        with open('test2.txt','a+',encoding='utf-8') as f:
            data = json.dumps(dict(item),ensure_ascii=False) + '\n'
            f.write(data)
        return item

這裏一定要return item告訴scrapy已經保存完了。

4.middlewares.py

pass

2.配置文件

1.設置提示信息
LOG_LEVEL = 'WARNING'
2.設置頭部信息
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
#或者
3.開啓管道
ITEM_PIPELINES = {
   'myspider.pipelines.MyspiderPipeline': 300,
}
4.記錄到本地文件
LOG_FILE = './log.log'
5.logging的使用
級別 級別數值 使用時機
DEBUG 10 詳細信息,常用語調試
INFO 20 程序正常運行中生產的一些信息
WARNING 30 警告用戶,雖然程序正常運行,可能發生的錯誤
ERROR 40 由於更嚴重的問題,程序不能執行的功能
CRITICAL 50 嚴重錯誤,程序不能正常運行
6.方法
方法 作用
logging.warning() 雖然有警告用戶的信息,但是程序不報錯,繼續運行

這種方式可以記錄下日誌,但是不會指出那個文件報的錯

方法 作用
logger = logging.getLogger(__ name __) 將logger指定爲當前文件
logger.warning(data) 將spider傳入的data打印出來
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章