日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Scrapy详解

發(fā)布時(shí)間:2024/1/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scrapy详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、爬蟲(chóng)生態(tài)框架

在管道傳數(shù)據(jù)只能傳字典和items類型。

將 上一return語(yǔ)句注釋則會(huì)報(bào)錯(cuò)? 如:

?

?

如上圖,爬蟲(chóng)文件中有一個(gè)name屬性,如果多個(gè)爬蟲(chóng)可以通過(guò)這個(gè)屬性在管道控制分析的是哪個(gè)爬蟲(chóng)的數(shù)據(jù)

日志文件

添加紅框里面的一條代碼,讓打印結(jié)果只顯示warning級(jí)別及以上的警告

?

如何保存日志信息

發(fā)現(xiàn)運(yùn)行后沒(méi)有任何輸出

項(xiàng)目中多了log.log日志文件

打開(kāi)log.log日志文件即日志信息

?items類型對(duì)象

在items文件中聲明了name、last的鍵在爬蟲(chóng)文件中聲明即可用

?

scrapy shell 用法

scrapy shell + 網(wǎng)址? 會(huì)進(jìn)入一個(gè)ipython可以測(cè)試response? 如:

模仿瀏覽器

改為自己瀏覽器的user_agent信息

?

更改遵守robots規(guī)則

將True改為False

?提取下一頁(yè)url: scrapy.Request(url, callback)用來(lái)獲取網(wǎng)頁(yè)里的地址

?callback:指定由那個(gè)函數(shù)去處理

?分布式爬蟲(chóng):

1.多臺(tái)機(jī)器爬到的數(shù)據(jù)不能重復(fù)

2.多臺(tái)機(jī)器爬到的數(shù)據(jù)不能丟失

?

  1.redis是什么?

    Redis是一個(gè)開(kāi)源的、內(nèi)存數(shù)據(jù)庫(kù),他可以用作數(shù)據(jù)庫(kù)、緩存、消息中間件。它支持多種數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合、有序集合(可能存在數(shù)據(jù)丟失)

?    redis安裝? Ubuntu: sudo apt-get install redis-server? ? Centos:sudo yum install redis-server

    檢測(cè)redis狀態(tài)

        

    redis服務(wù)的開(kāi)啟:sudo /etc/init.d/redis-server start

    重啟:sudo /etc/init.d/redis-server restart

    關(guān)閉:sudo /etc/init.d/redis-server stop

    redis連接客戶端:redis-cli

    redis遠(yuǎn)程連接客戶端:redis-cli -h<hostname> -p? <port>(默認(rèn)6379)

    redis常用命令:

      選擇數(shù)據(jù)庫(kù):select 1? (第一個(gè)數(shù)據(jù)庫(kù)為0 ,默認(rèn)16個(gè)數(shù)據(jù)庫(kù),可修改配置文件修改數(shù)據(jù)庫(kù)個(gè)數(shù)且個(gè)數(shù)沒(méi)有上限)

      

    查看數(shù)據(jù)庫(kù)里的內(nèi)容:keys *

    向數(shù)據(jù)庫(kù)加列表:lpush mylist a b c d (數(shù)據(jù)可重復(fù))

    查看列表數(shù)據(jù):lrange mylist 0 -1

      

    查看列表元素個(gè)數(shù):llen mylist

?      

    向set中加數(shù)據(jù):sadd myset a b c d(不能重復(fù),無(wú)序)

      

    查看set中的數(shù)據(jù):smembers myset

      

    查看set中的元素個(gè)數(shù):scard myset

      

    向有序zset中添加數(shù)據(jù):zadd myzset 1 a 2 b 3 c 4 d

      

    查看zset編號(hào)和數(shù)據(jù):zrange myzset 0 -1 withscores

?      

    查看zset數(shù)據(jù)

      

    改變編號(hào) 如改變a的編號(hào):

      

    統(tǒng)計(jì)zset元素的個(gè)數(shù)zcard myzset

      

    刪除當(dāng)前數(shù)據(jù)庫(kù):flushdb

    清楚所有數(shù)據(jù)庫(kù):flushall

  安裝scrapy-redis

    sudo pip install scrapy_redis

  下載scrapy-redis例子:git clone https://github.com/rolando/scrapy-redis.git

  setting.py中:


# 去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 調(diào)度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 調(diào)度器內(nèi)容持久化
SCHEDULER_PERSIST = True

 

ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
# 負(fù)責(zé)把數(shù)據(jù)存儲(chǔ)到redis數(shù)據(jù)庫(kù)里
'scrapy_redis.pipelines.RedisPipeline': 400,
}

最后需把redis加上

  

    序列化:把一個(gè)類的對(duì)象變成字符串最后保存到文件

    反序列化:保存到文件的對(duì)象是字符串格式? -->? 讀取字符串 --> 對(duì)象

?

?

?

注:后臺(tái)打印的數(shù)據(jù)較雜亂,我只想要自己爬到的東西怎么辦?

第一步:

  setting.py中加? LOG_LEVEL = 'WARNING'??

  這句代碼會(huì)將不必要的數(shù)據(jù)屏蔽,屏蔽的數(shù)據(jù)如下:

  

?

第二步:

  然而現(xiàn)在還不是最簡(jiǎn)潔的,還有雜項(xiàng)。這樣做,將response.xpath('*********')變成response.xpath('*********').extract()

  

  怎么樣是不是你想要的。

?

轉(zhuǎn)載于:https://www.cnblogs.com/DonCharles/p/9930004.html

總結(jié)

以上是生活随笔為你收集整理的Scrapy详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。