Scrapy, нумерация страниц и AJAX звонки - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь очистить сайт с помощью Scrapy.Разбивка на страницы довольно сложна, потому что она использует AJAX, и я не знаю, как это сделать.Кроме того, когда я нажимаю на следующую страницу, URL-адрес не меняется вообще.

Когда я захожу на вкладку сети инструмента developper, я вижу это:

enter image description here

И это мой код товара:

import json
import scrapy
import re
import pkgutil

from scrapy.loader import ItemLoader
from annonces_spiders.items import AnnonceItem

class GlenMarchSpider(scrapy.Spider):
    name = 'annonces_results'

def __init__(self, *args, **kwargs):
    data_file = pkgutil.get_data("annonces_spiders", "json/input/db_scrap_url_lp_js_10000_reduced.json")
    self.data = json.loads(data_file)


def start_requests(self):
    for item in self.data:
        request = scrapy.Request(item['url_lp'], callback=self.parse)
        request.meta['item'] = item
        yield request

def parse(self, response):
    item = response.meta['item']
    item['results'] = []

    for caritem in response.css("li.li-result"):
        data = AnnonceItem()
        data["marque"] = caritem.css("span.brand::text").extract_first().capitalize().replace(" ", "").strip()
        data["model"] = caritem.css("span.sub-title::text").extract_first().capitalize().replace(" ", "").strip()
        data["model_year"] = caritem.css("li:nth-child(3) > div.upper::text").extract_first().replace(" ", "").strip()
        data["price_str"] = caritem.css("p.prix::text").extract_first().strip()
        if "NC" not in data["price_str"]:
            data["price_int"] = int(caritem.css("p.prix::text").extract_first().replace("€", "").replace(" ", "").strip())
        else:
            data["price_int"] = None
        data["annonce_date"] = caritem.css("p.btn-publication::text").extract_first().strip().replace("/", "-")
        data["country"] = caritem.css("div.location > img::attr(alt)").extract_first().capitalize().strip()

        item['results'].append(data)

    yield item

Я пытался использовать Splash и скрипт Lua, но разбиение на страницы кажется невозможным.

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