Как исправить проблему заказа при использовании скрапа? - PullRequest
2 голосов
/ 01 апреля 2019

Я считаю, что это просто, и я хочу узнать больше. Дело в том, что я хочу сканировать заголовки сайтов по URL. Цель этого - предсказать популярность онлайн-новостей, а данные получены из хранилища машинного обучения UCI. Вот ссылка .

Я следую учебнику Scrapy и изменяю код в "quotes spider" следующим образом. После того, как я запустил «кавычки сканирования scrapy» в терминале, я использовал «кавычки сканирования scrapy -o quotes.json», чтобы сохранить все заголовки в формате JSON.

158 пропавших без вести. У меня есть 39 486 URL, но 39 644 заголовка сайта. Кроме того, порядок каждого веб-сайта не соответствует каждому URL. Например, Окончательный заголовок соответствует третьему последнему URL. Не могли бы вы помочь мне определить проблемы?

Вот результат

Я пытался использовать «Красивый суп» в Jupyter Notebook, но он работал медленно и не может определить, работает ли код по-прежнему или нет.

import scrapy
import pandas as pd


df = pd.read_csv("/Users/.../OnlineNewsPopularity.csv",delim_whitespace=False)
url = df['url']

class QuotesSpider(scrapy.Spider):
    name = "quotes"    
    start_urls = url.values.tolist()

    def parse(self, response):
        for quote in response.css('h1.title'):
            yield {
                'Title': quote.css('h1.title::text').extract_first(),
            }

1 Ответ

0 голосов
/ 01 апреля 2019

Если ваша цель состоит только в том, чтобы сохранить соответствие между URL-адресом и заголовком, вы можете добавить URL-адрес к вашему выделенному элементу:

def parse(self, response):
    for quote in response.css('h1.title'):
        yield {
            'Title': quote.css('h1.title::text').extract_first(),              
            'url': response.url
        }

Напротив, если вы хотите обрабатывать URL по порядку, есть несколько способов, немного более сложных. Самая распространенная идея - написать метод start_request, где вы запрашиваете только первый URL; затем в методе parse вы запрашиваете второй URL, устанавливая тот же метод (parse), что и для обратного вызова; и так далее ...

См. Последовательное извлечение из нескольких start_urls, приводящее к ошибке при разборе и URL-адресов сканирования Scrapy в порядке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...