<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
因為是在CentOS系統下安裝的,並且是伺服器。遇到的困難有點多不過。
首先先檢查是否有c語言的編譯環境,你問我問什麼下載這個,我只能說它是下載安裝redis的前提,就像水和魚一樣。
rpm -q gcc```
如果輸出版本號,則證明下載好了,否則就執行下面的命令,安裝gcc,
下載你想要的redis版本注意下面的3.0.6是版本號,根據自己想要的下載版本號,解壓
yum install gcc-c++ cd /usr/local/redis wget http://download.redis.io/releases/redis-3.0.6.tar.gz tar zxvf redis-3.0.6.tar.gz make && make install
什麼?你問我沒有redis資料夾怎麼辦,mkdir建立啊!!!
一定要先進入目錄再去執行下載編譯,這樣下載的redis才會進入系統變數。
redis-server redis-cli
啟動服務你是下面這樣的嗎?
是的就不正常了!!你才下載好了,你會發現你可以開啟服務了,但是退不出來,無法進入命令列了,變成下面的這鬼摸樣了,別急,你還沒設定好,慢慢來。
還記得你剛剛建立的redis資料夾嗎?進入那裡面,找到redis.conf,修改這個組態檔。
redis-server redis-cli
找到這三個並改正。
儲存退出,重啟redis,這樣,redis就設定好了,還可以設定密碼,但是我懶,不想設定。
至此資料庫設定成功
新版本的scrapy框架已經丟棄了這個函數的功能,但是並沒有完全移除,雖然函數已經移除,但是還是在某些地方用到了這個,出現矛盾。
解決方法
自己在相對應的報錯檔案中重寫一下這個方法
就是在
def make_requests_from_url(self,url): return scrapy.Request(url,dont_filter=True)
我開起了redis的管道,將資料儲存在了redis中,但是每次儲存總是失敗報錯。
原因:
我在settings.py檔案中重寫了儲存的方法,但是儲存的寫法不對導致我一直以為是原始碼的錯誤
# item儲存鍵的設定 REDIS_ITEMS_KEY = '%(spider):items'
原始碼是
return self.spider % {"spider":spider.name}
太坑了,我為了這個錯誤差點重寫了一個scrapy框架…
注意!如果你覺得你的主程式碼一點問題都沒有,那就一定是組態檔的問題,大小寫,設定環境字母不對等
import scrapy class MyspiderItem(scrapy.Item): # define the fields for your item here like: lazyimg = scrapy.Field() title = scrapy.Field() resisted_data = scrapy.Field() mileage = scrapy.Field() city = scrapy.Field() price = scrapy.Field() sail_price = scrapy.Field()
# Scrapy settings for myspider project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://docs.scrapy.org/en/latest/topics/settings.html # https://docs.scrapy.org/en/latest/topics/downloader-middleware.html # https://docs.scrapy.org/en/latest/topics/spider-middleware.html BOT_NAME = 'myspider' SPIDER_MODULES = ['myspider.spiders'] NEWSPIDER_MODULE = 'myspider.spiders' # Crawl responsibly by identifying yourself (and your website) on the user-agent # Obey robots.txt rules # LOG_LEVEL = "WARNING" # Configure maximum concurrent requests performed by Scrapy (default: 16) #CONCURRENT_REQUESTS = 32 # Configure a delay for requests for the same website (default: 0) # See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs #DOWNLOAD_DELAY = 3 # The download delay setting will honor only one of: #CONCURRENT_REQUESTS_PER_DOMAIN = 16 #CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default) #COOKIES_ENABLED = False # Disable Telnet Console (enabled by default) #TELNETCONSOLE_ENABLED = False # Override the default request headers: #DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # 'Accept-Language': 'en', #} # Enable or disable spider middlewares # See https://docs.scrapy.org/en/latest/topics/spider-middleware.html #SPIDER_MIDDLEWARES = { # 'myspider.middlewares.MyspiderSpiderMiddleware': 543, #} # Enable or disable downloader middlewares # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html #DOWNLOADER_MIDDLEWARES = { # 'myspider.middlewares.MyspiderDownloaderMiddleware': 543, #} # Enable or disable extensions # See https://docs.scrapy.org/en/latest/topics/extensions.html #EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, #} # Configure item pipelines # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html # Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' LOG_LEVEL = 'WARNING' LOG_FILE = './log.log' # Obey robots.txt rules ROBOTSTXT_OBEY = False # 指定管道 ,scrapy-redis元件幫我們寫好 ITEM_PIPELINES = { "scrapy_redis.pipelines.RedisPipeline":400 } # 指定redis REDIS_HOST = '' # redis的伺服器地址,我們現在用的是虛擬機器器上的迴環地址 REDIS_PORT = # virtual Box轉發redistribution的埠 # 去重容器類設定 作用:redis的set集合來儲存請求的指紋資料,從而實現去重的持久化 DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 使用scrapy-redis的排程器 SCHEDULER = 'scrapy_redis.scheduler.Scheduler' # 設定排程器是否需要持久化,爬蟲結束的時候要不要清空redis中請求佇列和指紋的set集合,要持久化設定為True SCHEDULER_PERSIST = True # 最大閒置時間,防止爬蟲在分散式爬取的過程中關閉 # 這個僅在佇列是SpiderQueue 或者 SpiderStack才會有作用, # 也可以阻塞一段時間,當你的爬蟲剛開始時(因為剛開始時,佇列是空的) SCHEDULER_IDLE_BEFORE_CLOSE = 10 # Enable and configure the AutoThrottle extension (disabled by default) # See https://docs.scrapy.org/en/latest/topics/autothrottle.html #AUTOTHROTTLE_ENABLED = True # The initial download delay #AUTOTHROTTLE_START_DELAY = 5 # The maximum download delay to be set in case of high latencies #AUTOTHROTTLE_MAX_DELAY = 60 # The average number of requests Scrapy should be sending in parallel to # each remote server #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Enable showing throttling stats for every response received: #AUTOTHROTTLE_DEBUG = False # Enable and configure HTTP caching (disabled by default) # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings #HTTPCACHE_ENABLED = True #HTTPCACHE_EXPIRATION_SECS = 0 #HTTPCACHE_DIR = 'httpcache' #HTTPCACHE_IGNORE_HTTP_CODES = [] #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from scrapy_redis.spiders import RedisCrawlSpider from ..items import MyspiderItem import logging log = logging.getLogger(__name__) class TaocheSpider(RedisCrawlSpider): name = 'taoche' # allowed_domains = ['taoche.com'] # 不做域名限制 # start_urls = ['http://taoche.com/'] # 起始的url應該去redis(公共排程器) 裡面獲取 redis_key = 'taoche' # 回去redis(公共排程器)裡面獲取key為taoche的資料 taoche:[] # 老師,我給你找一下我改的原始碼在哪裡,看看是那的錯誤嗎 rules = ( # LinkExtractor 連結提取器,根據正則規則提取url地址 # callback 提取出來的url地址傳送請求獲取響應,會把響應物件給callback指定的函數進行處理 # follow 獲取的響應頁面是否再次經過rules進行提取url Rule(LinkExtractor(allow=r'/?page=d+?'), callback='parse_item', follow=True), ) def parse_item(self, response): print("開始解析資料") car_list = response.xpath('//div[@id="container_base"]/ul/li') for car in car_list: lazyimg = car.xpath('./div[1]/div/a/img/@src').extract_first() title = car.xpath('./div[2]/a/span/text()').extract_first() resisted_data = car.xpath('./div[2]/p/i[1]/text()').extract_first() mileage = car.xpath('./div[2]/p/i[2]/text()').extract_first() city = car.xpath('./div[2]/p/i[3]/text()').extract_first() city = city.replace('n', '') city = city.strip() price = car.xpath('./div[2]/div[1]/i[1]/text()').extract_first() sail_price = car.xpath('./div[2]/div[1]/i[2]/text()').extract_first() item = MyspiderItem() item['lazyimg'] = lazyimg item['title'] = title item['resisted_data'] = resisted_data item['mileage'] = mileage item['city'] = city item['price'] = price item['sail_price'] = sail_price log.warning(item) # scrapy.Request(url=function,dont_filter=True) yield item
到此這篇關於分散式爬蟲scrapy-redis踩坑的文章就介紹到這了,更多相關分散式爬蟲scrapy-redis踩坑內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45