Scrappy python3 error 403(forbidden) при запросе к https://www.autotrader.co.uk/

При попытке распарсить autotrader с использованием фрэйма scrappy столкнулся с ошибкой 403, которую никак не могу побороть - уже и user agent подкинул и погуглил подобные ошибки ..ничего не берёт Ошибка:

2020-07-14 18:08:15 [scrapy.core.engine] INFO: Spider opened
2020-07-14 18:08:15 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-07-14 18:08:15 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-07-14 18:08:15 [scrapy.core.engine] DEBUG: Crawled (403) <GET https://www.autotrader.co.uk/car-search?postcode=ec1a1aa&make=TESLA> (referer: None)
2020-07-14 18:08:15 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 https://www.autotrader.co.uk/car-search?postcode=ec1a1aa&make=TESLA>: HTTP status code is not handled or not allowed

Код:

import scrapy
from scrapy import Request


class Spider(scrapy.Spider):
    name = 'spider'
    start_urls = [
        'https://www.autotrader.co.uk/car-search?postcode=ec1a1aa&make=TESLA'
    ]

    def parse(self, response):
        headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
                   'Referer': 'https://www.autotrader.co.uk/'}
        # smth = response.css('.paginationMini__count::text').getall()
        yield Request(self.start_urls, headers=headers)

Ответы (1 шт):

Автор решения: Namerek

Честно говоря не знаком со scrapy но через bs4 и requests этот сайт парсится весьма просто Ниже первый этап обработки данной Вами страницы. Собирает блоки описаний (всего 272 шт.) Со всех 25 страниц результата.

from bs4 import BeautifulSoup as Soup
import re
import requests

url = 'https://www.autotrader.co.uk/car-search?sort=relevance&postcode=ec1a1aa&radius=1500&make=TESLA&page=%s'


def scrape_page(page_num: int = 1):
    response = requests.get(url % page_num)
    pages_qty = 1
    page_units_list = []
    if response.status_code == 200:
        soup = Soup(response.content, 'html.parser')
        pages_count_tag = soup.find('li', class_='paginationMini__count')
        if pages_count_tag:
            pages_qty = max(map(int, re.findall(r'\d+', pages_count_tag.text)))
        res = soup.find_all('article', class_='search-listing')
        if res:
            page_units_list = res

    return page_units_list, pages_qty


if __name__ == '__main__':
    vehicles, pages = scrape_page()
    for page in range(2, pages + 1):
        vehicles += scrape_page(page)[0]

В результате получаем список vehicles тэгов содержащих html код вот этих блоков введите сюда описание изображения Вам останется написать функцию обработки для них.

→ Ссылка