目錄實戰:
使用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...