scrapy框架的日誌及提高效能

2022-07-28 12:57:25 字數 4797 閱讀 1559

目錄實戰:

使用scrapy crawl spiderfilename執行程式時,在終端裡列印輸出的就是scrapy的日誌資訊。

日誌資訊的種類:

error : 一般錯誤

warning : 警告

info : 一般的資訊

debug : 除錯資訊

設定日誌資訊指定輸出:

在settings.py配置檔案中,加入

log_level = 『指定日誌資訊種類』即可。

log_file = 'log.txt'則表示將日誌資訊寫入到指定檔案中進行儲存。

案例展示:爬取www.id97.com電影網,將一級頁面中的電影名稱,型別,評分一級二級頁面中的上映時間,導演,片長進行爬取。
import scrapy

from moviepro.items import movieproitem

class moviespider(scrapy.spider):

name = 'movie'

allowed_domains = ['www.4567tv.tv']

start_urls = ['']

def parse(self, response):

div_list = response.xpath('//div[@class="col-xs-1-5 movie-item"]')

for div in div_list:

item = movieproitem()

item['name'] = div.xpath('.//h1/a/text()').extract_first()

item['score'] = div.xpath('.//h1/em/text()').extract_first()

#xpath(string(.))表示提取當前節點下所有子節點中的資料值(.)表示當前節點

item['kind'] = div.xpath('.//div[@class="otherinfo"]').xpath('string(.)').extract_first()

item['detail_url'] = div.xpath('./div/a/@href').extract_first()

#請求二級詳情頁面,解析二級頁面中的相應內容,通過meta引數進行request的資料傳遞

yield scrapy.request(url=item['detail_url'],callback=self.parse_detail,meta=)

def parse_detail(self,response):

#通過response獲取item

item = response.meta['item']

item['actor'] = response.xpath('//div[@class="row"]//table/tr[1]/a/text()').extract_first()

item['time'] = response.xpath('//div[@class="row"]//table/tr[7]/td[2]/text()').extract_first()

item['long'] = response.xpath('//div[@class="row"]//table/tr[8]/td[2]/text()').extract_first()

#提交item到管道

yield item

import json

class moviepropipeline(object):

def __init__(self):

self.fp = open('data.txt','w')

def process_item(self, item, spider):

dic = dict(item)

print(dic)

json.dump(dic,self.fp,ensure_ascii=false)

return item

def close_spider(self,spider):

self.fp.close()

增加併發:

預設scrapy開啟的併發執行緒為32個,可以適當進行增加。在settings配置檔案中修改concurrent_requests = 100值為100,併發設定成了為100。

降低日誌級別:

在執行scrapy時,會有大量日誌資訊的輸出,為了減少cpu的使用率。可以設定log輸出資訊為info或者error即可。在配置檔案中編寫:log_level = 『info』

禁止cookie:

如果不是真的需要cookie,則在scrapy爬取資料時可以進製cookie從而減少cpu的使用率,提公升爬取效率。在配置檔案中編寫:cookies_enabled = false

禁止重試:

對失敗的http進行重新請求(重試)會減慢爬取速度,因此可以禁止重試。在配置檔案中編寫:retry_enabled = false

import scrapy

from xiaohua.items import xiaohuaitem

class xiahuaspider(scrapy.spider):

name = 'xiaohua'

allowed_domains = ['www.521609.com']

start_urls = ['']

pagenum = 1

url = 'list8%d.html'

def parse(self, response):

li_list = response.xpath('//div[@class="index_img list_center"]/ul/li')

for li in li_list:

school = li.xpath('./a/img/@alt').extract_first()

img_url = li.xpath('./a/img/@src').extract_first()

item = xiaohuaitem()

item['school'] = school

item['img_url'] = '' + img_url

yield item

if self.pagenum < 10:

self.pagenum += 1

url = format(self.url % self.pagenum)

#print(url)

yield scrapy.request(url=url,callback=self.parse)

import scrapy

class xiaohuaitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

school=scrapy.field()

img_url=scrapy.field()

import json

import os

import urllib.request

class xiaohuapipeline(object):

def __init__(self):

self.fp = none

def open_spider(self,spider):

print('開始爬蟲')

print('結束爬蟲')

self.fp.close()

# obey robots.txt rules

robotstxt_obey = false

# configure maximum concurrent requests performed by scrapy (default: 16)

concurrent_requests = 100

cookies_enabled = false

log_level = 'error'

retry_enabled = false

download_timeout = 3

#concurrent_requests_per_domain = 16

#concurrent_requests_per_ip = 16

download_delay = 3

Scrapy框架 日誌配置

import datetime 配置日誌檔名和位置 to day datetime.datetime.now log file path log scrapy log format to day.year,to day.month,to day.day log file log file path ...

爬蟲scrapy框架 log日誌輸出配置及使用

1 在配置檔案中設定日誌輸出檔名和日誌等級 1 為什麼以日期為檔名?因為這樣可以方便開發者檢視每天的日誌資訊,同時也可以防止單檔案log日誌資訊堆積的越來越多,所以將當天日誌資訊儲存到當天的日誌檔案中 2 配置選項有日誌等級log level 日誌檔案路徑log file,我這裡設定等級為warni...

Scrapy框架的安裝及使用

步驟1 環境準備 右擊ubuntu作業系統桌面,從彈出選單中選擇 open in terminal 命令 開啟終端。通過 cd home 切換到home目錄下。ls 檢視該目錄下的所有內容。圖1 切換目錄 mkdir scrapy 在home目錄下建立scrapy資料夾。圖2 建立資料夾 步驟2 s...