Python Scrapy: Глобальная переменная не меняет свое значение под функцией - PullRequest
0 голосов
/ 29 мая 2020

Я не могу изменить значение глобальной переменной.

Variable i : не знаю, увеличилось ли значение, и укажите его значение в PGroup in * 1007 Оператор * IF .

        global i
        i = i + 1

Переменная PGroup : не отображает изменения согласно оператору IF .

        global PGroup
        if i == 1:
            PGroup == 'Person_1'            
        elif i == 2:
            PGroup == 'Person_2'
        elif i == 3:
            PGroup == 'Person_3'

Значения PGroup, которые я получил после запуска кода, - это «ТЕСТ», что я объявил в начале своего кода. Кто-нибудь может помочь? Полная кодовая последовательность ниже:

import scrapy
from datetime import date
today = date.today()
d1 = today.strftime("%d/%m/%Y")
PGroup = 'TEST'
i = 0

class NewSpider(scrapy.Spider):
    name = 'LEARNING1'
    allowed_domains = ['www.example']
    start_urls = [
                    'https://www.example/abc/',
                    'https://www.example/def/',
                    'https://www.example/ghi/',                
                ]

    def parse(self, response):
        global i
        i = i + 1

        global PGroup
        if i == 1:
            PGroup == 'Person_1'            
        elif i == 2:
            PGroup == 'Person_2'
        elif i == 3:
            PGroup == 'Person_3'


        urls = response.xpath("//a[@class='setPage'][contains(@href,'?page=')]/text()").getall()
        for url in urls:
            if url:              
                url_Ny = response.url +'?&page=' + url.strip()
                yield scrapy.Request(url= url_Ny, callback=self.parse_all, encoding='utf-8')


    def parse_all(self, response):
        for data in response.xpath("//div[@class='col-xs-6 col-md-4 product-wrap js-send-ga-product-click js-send-ga-products-impressions']"):
            item = {
                'Col_1' : data.xpath(".//@data-name").extract_first(),
                'Col_2': data.xpath(".//@data-brand").extract_first(),
                'Col_3' : PGroup,
                'Col_4': data.xpath(".//@data-price").extract_first(),
                'Col_5': d1,
            }
            yield item

Ответы [ 2 ]

0 голосов
/ 08 июня 2020

В следующей части вашего кода:

global PGroup
    if i == 1:
        PGroup **==** 'Person_1'            
    elif i == 2:
        PGroup **==** 'Person_2'
    elif i == 3:
        PGroup **==** 'Person_3'

Вы используете == , который используется для проверки равенства. Но в этом случае вы хотите использовать оператор присваивания = , чтобы установить переменную PGroup, равную тому, что вы хотите. Итак, вы должны заменить указанную выше часть вашего кода на:

global PGroup
        if i == 1:
            PGroup = 'Person_1'            
        elif i == 2:
            PGroup = 'Person_2'
        elif i == 3:
            PGroup = 'Person_3'
0 голосов
/ 05 июня 2020
import scrapy
from datetime import date
today = date.today()
d1 = today.strftime("%d/%m/%Y")

class NewSpider(scrapy.Spider):
    name = 'LEARNING1'
    allowed_domains = ['www.example']

    def start_requests(self):
        yield scrapy.Request(url='https://www.example/abc/',meta={"pg":"Person_1"}, callback=self.parse)
        yield scrapy.Request(url='https://www.example/def/',meta={"pg":"Person_2"}, callback=self.parse)
        yield scrapy.Request(url='https://www.example/ghi/',meta={"pg":"Person_3"}, callback=self.parse)

    def parse(self, response):
        urls = response.xpath("//a[@class='setPage'][contains(@href,'?page=')]/text()").getall()        
        for url in urls:
            if url:              
                url_Ny = response.url +'?&page=' + url.strip()
                yield scrapy.Request(url= url_Ny, callback=self.parse_all,meta={"pg":response.meta["pg"]})

    def parse_all(self, response):
        for data in response.xpath("//div[@class='col-xs-6 col-md-4 product-wrap js-send-ga-product-click js-send-ga-products-impressions']"):
            item = {

                    'Col_1' : data.xpath(".//@data-name").extract_first(),
                    'Col_2': data.xpath(".//@data-brand").extract_first(),
                    'Col_3' : response.meta["pg"],
                    'Col_4': data.xpath(".//@data-price").extract_first(),
                    'Col_5': d1,
            }
            yield item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...