python的scrapy爬蟲模塊間進行傳參_Python爬蟲Scrapy框架之請求傳參合日志等級

 2023-12-25 阅读 28 评论 0

摘要:一 請求傳參在某種情況下,我們要爬取的數據會在不同的頁面中。例如:我們爬取一個電影的網站時,電影的評分和名稱在第一個頁面中,而要爬取的電影詳情在其的子頁面中。這時我們就需要動態傳參來實現。需求: 爬取https://www.4567tv.tv/frim/

一 請求傳參

在某種情況下,我們要爬取的數據會在不同的頁面中。例如:我們爬取一個電影的網站時,電影的評分和名稱在第一個頁面中,而要爬取的電影詳情在其的子頁面中。這時我們就需要動態傳參來實現。

需求: 爬取https://www.4567tv.tv/frim/index1.html中的電影名和導演名稱

# -*- coding: utf-8 -*-

import scrapy

from moviePro.items import MovieproItem

#請求傳參 重點*****

#item不能是全局的

class MovieSpider(scrapy.Spider):

name = 'movie'

# allowed_domains = ['www.xxx.com']

start_urls = ['https://www.4567tv.tv/frim/index1.html']

#模擬parse來寫

def parse_detail(self,response):

#通過response 來獲取回調函數傳遞過來的item

item = response.meta['item']

actor = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[3]/a/text()').extract_first()

item['actor'] =actor

#提交item

yield item

#item 寫在這 因為parse中的request 才能實現請求傳參

def parse(self, response):

li_list = response.xpath('//li[@class="col-md-6 col-sm-4 col-xs-3"]')

for li in li_list:

item = MovieproItem()

name = li.xpath('./div/a/@title').extract_first()

detail_url = 'https://www.4567tv.tv'+li.xpath('./div/a/@href').extract_first()

#發送的為get請求 callback 是一個回調函數

item['name']=name

#meta是一個字典類型 將item傳遞給回調函數的response參數(也就是回調方法) 請求傳參

yield scrapy.Request(url=detail_url,callback=self.parse_detail,meta={'item':item})

items文件

import scrapy

class MovieproItem(scrapy.Item):

# define the fields for your item here like:

name = scrapy.Field()

actor = scrapy.Field()

二 Scrapy中的日志等級

在使用scrap crawl filename運行程序時,在終端打印輸入的就是Scrapy日志信息

日志信息的種類:

? ERROR:一般錯誤

? WARIING:警告

? INFO:一般信息

? DEBUG:調試信息

設置日志指定輸入:

在settings.py配置文件中,加入:

LOG_LEVEL ='指定日志信息的種類即可'

LOG_FILE = 'log.txt'表示的是將日志信息寫入到指定的文件中進行存儲

如何提高Scrapy的爬取效率:

增加并發:

默認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

減少下載超時:

如果對一個非常慢的鏈接進行爬取,減少下載超時可以能讓卡住的鏈接快速被放棄,從而提升效率。在配置文件中進行編寫:DOWNLOAD_TIMEOUT = 10 超時時間為10s

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/194597.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息