Почему scrapy-spla sh не отправляет правильный URL-адрес? - PullRequest
0 голосов
/ 02 августа 2020

Я использую Spla sh для рендеринга javascript. Но он отправляет неправильный URL-адрес. Если быть точным, он отправляет предыдущий URL. Взгляните на этот код.

def parse:
            splash_args = {'html': 1, 'png': 0}
            url = 'http://quotes.toscrape.com/js'
            yield Request(url,
                          self.parse_result,
                          meta={'splash': {
                                     'endpoint':'render.html',
                                     'args': splash_args,
                                      'splash_url': 'http://localhost:8050'
                                     }
                             }
                          )

            url = 'https://www.google.com'
            yield Request(url,
                          self.parse_result,
                          meta={'splash': {
                                     'endpoint':'render.html',
                                     'args': splash_args,
                                      'splash_url': 'http://localhost:8050'
                                     }
                             }
                          )

def parse_result(self, response):
            print(response.url)

Я использовал docker контейнер для запуска Spla sh. И в журналах docker я вижу следующее:

2020-08-02 05:34:09.061509 [events] {"active": 1, "status_code": 200, "args": {"headers": {"User-Agent": "Scrapy/2.2.0 (+https://scrapy.org)", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en"}, "html": 1, "png": 0, "url": "http://quotes.toscrape.com/js", "uid": 140386374564776}, "client_ip": "172.17.0.1", "qsize": 0, "user-agent": "Scrapy/2.2.0 (+https://scrapy.org)", "load": [0.1, 0.08, 0.06], "path": "/render.html", "fds": 22, "method": "POST", "maxrss": 746168, "rendertime": 0.109375, "_id": 140386374564776, "timestamp": 1596346449}
2020-08-02 05:34:09.062780 [-] "172.17.0.1" - - [02/Aug/2020:05:34:08 +0000] "POST /render.html HTTP/1.1" 200 8974 "-" "Scrapy/2.2.0 (+https://scrapy.org)"

2020-08-02 05:34:09.072852 [events] {"active": 0, "status_code": 200, "args": {"headers": {"User-Agent": "Scrapy/2.2.0 (+https://scrapy.org)", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en"}, "html": 1, "png": 0, "url": "http://quotes.toscrape.com/js", "uid": 140386500587760}, "client_ip": "172.17.0.1", "qsize": 0, "user-agent": "Scrapy/2.2.0 (+https://scrapy.org)", "load": [0.1, 0.08, 0.06], "path": "/render.html", "fds": 22, "method": "POST", "maxrss": 746168, "rendertime": 0.13172173500061035, "_id": 140386500587760, "timestamp": 1596346449}
2020-08-02 05:34:09.073582 [-] "172.17.0.1" - - [02/Aug/2020:05:34:08 +0000] "POST /render.html HTTP/1.1" 200 8974 "-" "Scrapy/2.2.0 (+https://scrapy.org)"

Оба запроса имеют одинаковый URL-адрес на «quotes.toscrape.com», но никаких запросов к «www.google.com» не видно.

В стандартном выводе я тоже не вижу google.com.

2020-08-02 15:34:09 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://localhost:8050/render.html> (referer: None)
2020-08-02 15:34:09 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://localhost:8050/render.html> (referer: None)
http://quotes.toscrape.com/js
http://quotes.toscrape.com/js
2020-08-02 15:34:09 [scrapy.core.engine] INFO: Closing spider (finished)

response.url напечатал только quotes.toscrape.com. Я уверен, что оба эти запроса выполнены, потому что мы видим, что делается два запроса. Просто URL неверный. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 августа 2020

Кажется, что использовать url в Request(url) недостаточно. Мне тоже пришлось добавить URL-адрес в meta['splash']['url'], и это сработало.

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