Scrapy Webcrawler - Как отфильтровать просканированный контент на определенном c языке? - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок python / scrapy - так что, пожалуйста, не обращайте на меня внимания sh: -).

Я создал следующего паука-скрапа, который ползет по некоторым сайтам и экстрактам сканируемый контент (состоящий из трех разных категорий данных) и помещающий его в список словарей. Паук выглядит следующим образом:

class BgeSpiderSpider(Spider):
name = 'BGE_Spider'
allowed_domains = ['some site']
start_urls = ['some site']

def parse(self, response):
    l = ItemLoader(item=MySpiderItem(), response=response)
    volumes = response.xpath('some xpath/@href').extract()
    for volume in volumes:
        absolute_volume_url = response.urljoin(volume)
        yield Request(absolute_volume_url, callback=self.parse_volume)

def parse_volume(self, response):
    BGEs = response.xpath('some xpath/@href').extract()
    for BGE in BGEs:
        absolute_BGE_url = response.urljoin(BGE)
        yield Request(absolute_BGE_url, callback=self.parse_BGE)

def parse_BGE(self, response):
    articles = [article.strip() for article in response.xpath('some xpath/text()').extract()]
    articles = list(filter(None, articles))

    considerations = [consideration.strip() for consideration in response.xpath('some xpath/text()').extract()]
    considerations = list(filter(None, considerations))
    merged_considerationsI = [''.join(i) for i in considerations]
    merged_considerationsII = ' '.join(merged_considerationsI)

    facts = [fact.strip() for fact in response.xpath('some xpath/text()').extract()]
    facts = list(filter(None, facts))
    merged_factsI = [''.join(i) for i in facts]
    merged_factsII = ' '.join(merged_factsI)

    items = BGEItem()
    items['articles'] = articles
    items['facts'] = merged_factsII
    items['considerations'] = merged_considerationsII

    yield {
        'Articles': articles,
        'Sachverhalt': merged_factsII,
        'Erwaegungen': merged_considerationsII
    }

Как уже было сказано, я бы хотел отфильтровать просканированное содержимое на французском языке и вынуть из списка (словарей) такие целые словари. Все остальные данные на немецком языке. Я попытался добиться этого следующим образом (пример только для переменной 'fact'):

    text = TextBlob(merged_factsII)
    if (text.detect_language() == 'de'):
       merged_facts_german = merged_factsII

Но это не работает.

'merged_facts_II' должно иметь тип данных str; на самом деле это не список строк. Вот почему я напрямую передаю его в TextBlob.

Я не уверен, в чем проблема. Как уже говорилось, я полный Python новичок, и, следовательно, это может быть абсолютно тривиальной проблемой здесь.

Большое спасибо за вашу помощь!

...