реакция скрапа не в состоянии ползти из-за плохих персонажей - PullRequest
0 голосов
/ 30 января 2020

enter image description here

На картинке видно, что в названии оператора присутствуют некоторые недопустимые символы. Они исправляются и отображаются в chrome, но при копировании, когда я запускаю даже response.text в оболочке, я получаю

scrapy.exceptions.NotSupported: Response content isn't text

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

Я уверен, что это из-за unicodes. Я и не знаю, как сказать scrapy, чтобы они игнорировались и запускали все остальное как текст, чтобы я мог что-то вырезать.

ниже - это просто скелет моего кода

class PrintSpider(scrapy.Spider):
    name = "printer_data"

    start_urls = [
        'http://192.168.4.107/jobid-15547'
    ]

    def parse(self, response):
      job_dict = {}
      url_split = response.request.url.split('/')
      job_dict['job_id'] = url_split[len(url_split)-1].split('-',1)[1]  

      job_dict['job_name'] = response.xpath("/html/body/fieldset/big[1]/text()").extract_first().split(': ', 1)[1] # this breaks here.

Обновление с другими вещами, которые я уже пробовал

Я работал с этим некоторое время в оболочке Scrapy. response.text дает исключение, которое я поставил ранее. эта проверка также находится в response.xpath.

Я немного посмотрел код, но не могу найти, как работает response.text. Я чувствую, что мне нужно как-то исправить эти символы в ответе, чтобы scrapy рассматривал его как текст и мог обрабатывать html вместо игнорирования всей страницы, чтобы я ничего не мог получить.

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

1 Ответ

0 голосов
/ 30 января 2020

Это может быть, однако, не нужно. Попробуйте следующий подход, чтобы увидеть, что видит ваш сканер:

from scrapy.utils.response import open_in_browser

def parse(self, response):
    open_in_browser (response)

Это откроет страницу в браузере - убедитесь, что вы не делаете это в al oop, иначе ваш браузер застрянет.

Во-вторых, попробуйте сначала извлечь HTML и посмотрите, все ли работает нормально.

response.xpath("/html/body/fieldset/big[1]/text()").extract_first()

измените на:

response.xpath("/html/body/fieldset/big[1]")[0].extract()

Если второй подход устраняет проблему, то go с помощью bs4 или l xml для преобразования html в текст.

Кроме того, если это общедоступная ссылка c, дайте нам знать ссылку вместе с полным журналом для дальнейшего понимания проблемы.

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