Поиск 5 лучших слов на веб-сайте с использованием Scrapy Framework - PullRequest
0 голосов
/ 30 декабря 2018

Я могу найти 5 самых распространенных слов без scrapy , выбирая содержимое страниц и находя страницы с текстовыми формами.Затем сбрасывает слова в словарь с количеством появившихся.

Но я хочу использовать средство скрапа для этого.Но я не уверен, где я должен хранить этот словарь в проекте для хранения количества слов, чтобы паук мог отправить данные в обычное место, чтобы затем обновить этот словарь.

Как я могу использовать scrapy, чтобы найти наиболее распространенные слова?
Могу ли я использовать модуль sc stat для сбора статистики, чтобы после завершения сканирования я мог печатать в stats?

1 Ответ

0 голосов
/ 30 декабря 2018

Я никогда раньше не использовал scrapy, но, думаю, у меня есть решение для подсчета всех слов в тексте тела HTML.

В файле с именем words_spider.py поместите следующий код:

from collections import Counter

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/tag/humor/',
    ]

    def parse(self, response):
        for text in response.xpath('//body//*//text()').extract():
            # Eliminate empty strings
            words_ = (item.strip() for item in text.strip().split(' '))
            words = [item for item in words_ if item]
            if any(words):
                yield Counter(words)

Затем в другой файл с именем scrapy_runner.py поместите следующий код:

import os
import subprocess
import shlex
import json
from functools import reduce
from operator import add
from collections import Counter
from pprint import pprint

FILENAME = 'counters.json'
SCRIPTNAME = 'words_spider.py'

try:
    os.remove(FILENAME)
except FileNotFoundError:
    pass # No file to remove
# Run the spider.
subprocess.check_call(shlex.split(f'scrapy runspider {SCRIPTNAME} -o {FILENAME}'))

with open(FILENAME) as fh:
    # Create counters out of saved JSON file.
    counts = (Counter(item) for item in json.load(fh))

# Add all the counters together.
pprint(reduce(add, counts), indent=4)

Запустите скрипт: python scrapy_runner.py:

Вывод:

Счетчик ({'юмор': 12, 'по': 11, '(о)': 10, 'Метки:': 10, 'a': 7, 'вы': 7, 'на ': 6,' в ': 6,' и ': 6,' есть ': 5,' думай ': 5,' the ': 4,' 'The': 3, 'be': 3, 'must': 3,' может ': 3,' Цитаты ': 2,' это ': 2,' или ': 2,' кто ': 2,' книги ': 2,' сравнение ': 2,' думает ':2, «сидя»: 2, «сделай»: 2, «то»: 2, «из»: 2, «зритель»: 2, «время»: 2, «шоколад»: 2, «Чарльз»: 2,'right': 2, 'it.' ': 2,' people ': 2,' with ': 2,' only ': 2,' I ': 2,' true ': 2,' Scrape ': 1,'Логин': 1, 'Просмотр': 1, 'тег:': 1, 'человек,': 1, 'джентльмен': 1, 'леди,': 1, 'имеет': 1, 'не': 1, «удовольствие»: 1, «хорошо»: 1, «роман»,: 1, «невыносимо»: 1, «глупо». «: 1,« Джейн »: 1,« Остин »: 1, «aliteracy»: 1, «classic»: 1, «A»: 1, «day»: 1, «без»: 1, «sunshine»: 1, «like»,: 1, «знаю,': 1,' ночь. '': 1, 'Стив': 1, 'Мартин': 1, 'очевидный': 1, 'Любой': 1, 'церковь': 1, 'Христианин': 1, 'также: 1, «гараж»: 1, «машина». «: 1,« гарнизон »: 1,« Кейлор »: 1,« религия »: 1,« красота »: 1,« глаз »: 1,'может': 1, 'необходимо': 1, 'из': 1, 'дать': 1, 'глупо': 1, 'дезинформировано': 1, 'черное': 1, 'глаз.' ': 1,«Джим»: 1, «Хенсон»: 1, «Все»: 1, «нужно»: 1, «любовь»: 1, «Но»: 1, «мало»: 1, «сейчас»: 1,«тогда»: 1, «не»: 1, «больно». «: 1,« М. »: 1,« Шульц »: 1,« еда »: 1,« помни »: 1,«мы ": 1," безумно ": 1," любовь ": 1," так ": 1," это ": 1," все ": 1," поцелуй ": 1," я ": 1,'anytime': 1, 'feel': 1, 'like': 1, 'Suzanne': 1, 'Collins': 1, 'Some': 1, 'never': 1, 'go': 1, 'сумасшедший. ': 1,' Что ': 1,' истинно ': 1,' ужасно ': 1,' жизни ': 1,' они ': 1,' свинец. '': 1, 'Буковски': 1,«проблема»: 1, «иметь»: 1, «an»: 1, «открыть»: 1, «разум»: 1, «курс»: 1, «будет»: 1, «настаивать»: 1,'on': 1,'ближайшие': 1, 'вдоль': 1, 'пытаться': 1, 'положить': 1, 'вещи': 1, 'Терри': 1,«Пратчетт»: 1, «открытый разум»: 1, «мышление»: 1, «думаю»: 1, «слева»: 1, «низко»: 1, «высоко»: 1, «о»: 1, 'up': 1, 'if': 1, 'try!' ': 1,' Dr. ': 1,' Seuss ': 1,' философия ': 1,' причина ': 1,' разговор': 1,' я ': 1,' потому что ': 1,' Я ': 1,' один ': 1,' чей ': 1,' ответы ': 1,' принимаю. '': 1,«Джордж»: 1, «Карлин»: 1, «безумие»: 1, «ложь»: 1, «ложь»: 1, «баловство»: 1, «Далее»: 1, «→»: 1,«Вверху»: 1, «Десять»: 1, «теги»: 1, «любовь»: 1, «вдохновляющие»: 1, «жизнь»: 1, «чтение»: 1, «дружба»: 1, «друзья»': 1,' by: ': 1,' GoodReads.com ': 1,' Made ': 1,' ❤ ': 1,' Scrapinghub ': 1})

...