веб-обработка python приводит к блокировке

#python #web-scraping #beautifulsoup #proxy #selenium-chromedriver

#python #веб-очистка #beautifulsoup #прокси #selenium-chromedriver

Вопрос:

Я хочу создать веб-сайт немецкой недвижимости immobilienscout24.de . Он не предназначен для коммерческого использования или публикации, и я не собираюсь рассылать спам на сайт, это просто для практики кодирования. Я хотел бы написать инструмент python, который автоматически загружает HTML-код данного immobilienscout24.de сайты. Я пытался использовать beautifulsoup для этого, однако проанализированный HTML не отображает содержимое, Но спрашивает, являюсь ли я роботом и т. Д., Что Означает, что мой веб-сканер был обнаружен и заблокирован (я могу получить доступ к сайту в Firefox просто отлично). Я установил референт, задержку и случайный пользовательский агент. Что еще я могу сделать, чтобы избежать обнаружения (например, вращающиеся прокси, случайные клики, безголовый chrome, этот скрипт, другие инструменты веб-обработки, которые не обнаруживаются …)? Вещи, которые я нашел в Интернете, которые могут быть причиной блокировки:

  • отсутствующие / неправильные файлы cookie
  • отсутствует поддержка javascript / другие проблемы с javascript
  • нет щелчков / движений мыши
  • неполный / нереалистичный заголовок
  • Отпечатки пальцев SSL / TLS и другие экзотические вещи для моего понимания

Если у кого-то есть рабочее решение, с помощью которого можно очистить сайт, скажем, 10 раз, не будучи заблокированным, я был бы очень благодарен. Вот мой код на данный момент:

 from bs4 import BeautifulSoup
import numpy
import time
from fake_useragent import UserAgent

def get_html(url, headers): #scrapes and parses the HTML of a given URL while using custom header
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup

ua = UserAgent()
headers = {
    "Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "de,de-DE;q=0.8,en;q=0.6", 
    "Dnt": "1", 
    "Host": "https://www.immobilienscout24.de/", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": ua.random, 
  }
delays = [3, 5, 7, 4, 4, 11]
time.sleep(numpy.random.choice(delays))
test = get_html("https://www.immobilienscout24.de/Suche/de/baden-wuerttemberg/heidelberg/wohnung-kaufen?enteredFrom=one_step_search", headers)```
 

Ответ №1:

этот код все еще нуждается в дополнительной работе, но я предполагаю, что запросы на импорт не работают, потому что ему нужно запускать js-код, но если вы используете что-то вроде selenium, он должен работать, потому что он может запускать js-код.Также у request_html есть puppeteer, похожий на selenium .

 
from requests_html import HTMLSession
import re
#from fake_useragent import UserAgent
#create the session
#ua = UserAgent()
session = HTMLSession()

#define our URL
url = 'https://www.immobilienscout24.de/Suche/de/baden-wuerttemberg/heidelberg/wohnung-kaufen'

#use the session to get the data
r = session.get(url)

#Render the page, up the number on scrolldown to page down multiple times on a page
r.html.render(sleep=1,timeout = 30, keep_page=True, scrolldown=1)
r.html.page.screenshot({'C:/Users/program/Desktop/help': 'example.png'})

print(r.text)
session.close()

 

Комментарии:

1. Спасибо! К сожалению, я запустил его, и это все равно приводит к блоку: (