Scrapy - другой контент страницы при загрузке response.body - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь разобрать страницу, например, www.page.com/results?sort=price. Я анализирую это с этим кодом:

def start_requests(self):
    start_urls = [
        "www.page.com/results?sort=price",
    ]
    for url in start_urls:
        yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):

    # some code

    next_page = "www.page.com/results?sort=price&type=12"
    yield response.follow(next_page, self.get_models)

def get_models(self, response):
    f = open('/tmp/test/file1.txt', 'w')
    f.write(response.url)
    f.write(response.body.decode('utf-8'))
    f.close()

Выходной файл отличается от файла, сгенерированного этим кодом:

def start_requests(self):
    start_urls = [
        "www.page.com/results?sort=price&type=12",
    ]
    for url in start_urls:
        yield scrapy.Request(url=url, callback=self.get_models)

def get_models(self, response):
    f = open('/tmp/test/file2.txt', 'w')
    f.write(response.url)
    f.write(response.body.decode('utf-8'))
    f.close()

Когда я загружаю страницу через scrapy shell 'www.page.com/results?sort=price&type=12' Вывод похож на file2.txt. Проблема в том, что в файле file1.txt нет тегов с данными, которые мне нужно сканировать. В чем разница между этими двумя способами сканирования страницы, почему загружаемый файл отличается?

1 Ответ

0 голосов
/ 06 мая 2018

Я думаю, что во втором случае вы идете не по адресу. Проверьте свои журналы, чтобы убедиться. Я не уверен, как работает response.follow . Я не вижу смысла использовать его здесь, потому что вы используете полный URL (не только путь). Попробуйте изменить это на простой Request

def parse(self, response):

    # some code

    next_page = "www.page.com/results?sort=price&type=12"
    yield scrapy.Request(next_page, self.get_models)
...