Как обойти блокировку с помощью "Scrapy" - PullRequest
0 голосов
/ 10 января 2020

Справочная информация:

Я планирую купить автомобиль и хочу отслеживать цены. Я хотел бы использовать Scrapy, чтобы сделать это для меня. Однако сайт блокирует мой код от этого.

MWE / Код:

#!/usr/bin/python3

# from bs4 import BeautifulSoup
import scrapy    # adding scrapy to our file

urls = ['https://www.carsales.com.au/cars/volkswagen/golf/7-series/wagon-bodystyle/diesel-fueltype/']

class HeadphoneSpider(scrapy.Spider):   # our class inherits from scrapy.Spider
    name = "headphones"
    def start_requests(self):
        urls = ['https://www.carsales.com.au/cars/volkswagen/golf/7-series/wagon-bodystyle/diesel-fueltype/']# list to enter our urls
        # urls = ['https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=headphones&rh=i%3Aaps%2Ck%3Aheadphones&ajr=2']

        for url in urls:            
            yield scrapy.Request(url=url, callback=self.parse)  # we will explain the callback soon


    def parse(self, response):
        img_urls = response.css('img::attr(src)').extract()
        with open('urls.txt', 'w') as f:
            for u in img_urls:
                f.write(u + "\n")


    def main():
        scraper()

Вывод:

   ...some stuff above it
   2020-01-10 00:37:59 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 https://www.carsales.com.au/cars/volkswagen/golf/7-series/wagon-bodystyle/diesel-fueltype/>: HTTP status code is not handled or not allowed
   ..some more stuff underneath

Вопрос:

Я просто не знаю, как я могу обойти это not allowed, чтобы проанализировать цены, Km's et c. Это сделало бы мою жизнь намного проще. Как я могу пройти этот блок? Я также попробовал это с BeautifulSoup, который не работал.

1 Ответ

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

Существует несколько способов избежать блокирования сайтами при списании:

  • Установить ROBOTSTXT_OBEY = False
  • Увеличение DOWNLOAD_DELAY между вашими запросами, например, от 3 до 4 секунд в зависимости в зависимости от поведения сайта
  • Установите CONCURRENT_REQUESTS на 1
  • Используйте прокси или пул прокси, настроив proxy_middleware и указав причину
  • Перенос файлов cookie сайта в запросах, чтобы сайт не определяет поведение бота

Вы можете попробовать эти решения последовательно

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