Форум сайта python.su
Имеем большой проект который должен по заданному промежутку времени парсить один сайт на котором обновляется информация. Сайт имеет капчу, но выдаёт её только если узнает что пользователь робот. 4 день мучаюсь, никак не могу понять как автоматизировать скрипт. В headers писал всё и по отдельности и так и сяк. Ставил долгие time.sleep'ы. В книге Р.Митчелла сказано, что можно обойти защиту с помощью headers, но мне нужно делать это постоянно, а сайт рано или поздно “палит” робота. Пытался с перебором hedaers в списке для каждой страницы, не помогло. Есть ли решение вообще?
Офлайн
Djo0513Что писал в заголовках? Да и вручную через браузер выдаёт ли капчу?
В headers писал всё и по отдельности и так и сяк.
Офлайн
py.user.next
Вручную не выдаёт, у него проверка на бота и после редирект что ли, на сайт, а если робот то на капчу. В заголовках писал очень много всего, даже на мозилу расширение скачал для проверки отправленных заголовков браузером и оттуда тупо копировал.
Отредактировано Djo0513 (Сен. 8, 2017 21:21:12)
Офлайн
Обычно все эти проверки базируются на заголовках.
Djo0513Скорее всего, что-то не дописал ты в заголовках или послал неправильное (время там или закодированный адрес IP).
Вручную не выдаёт, у него проверка на бота и после редирект что ли, на сайт, а если робот то на капчу.
Djo0513Пример заголовков сюда скопируй.
В заголовках писал очень много всего
Отредактировано py.user.next (Сен. 9, 2017 01:13:48)
Офлайн
py.user.next
import requests from pprint import pprint from bs4 import BeautifulSoup import re import time import random import csv #proxies = [{'http': 'http://213.149.105.12:80'}, {'http': 'http://09.111.235.90:80'}, {'http': 'http://52.42.192.151:80'}, {'http': 'http://88.159.43.160:80'}] def crauler(headers): time.sleep(30) response = requests.get( 'http://www.propertyguru.com.sg/singapore-property-listing/property-for-sale?market=residential&property_type_code[]=3A&property_type_code[]=3NG&property_type_code[]=3Am&property_type_code[]=3NGm&property_type_code[]=3I&property_type_code[]=3Im&property_type_code[]=3S&property_type_code[]=3STD&property_type=H&freetext=Queenstown&hdb_estate[]=20&ps=1', headers=headers) time.sleep(20) bsobj = BeautifulSoup(response.text, 'lxml') time.sleep(20) target = bsobj.find('div', class_='listing-list listings-page-results enabled-boost') print(bsobj) for i in target.findAll('div', class_='row'): print(i.a['title']+'\n\n') for li in i.find('li', class_='lst-sizes'): print(li) def main(): spisok = [{"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0", 'Host': 'www.propertyguru.com.sg', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'}, {}] # Писал сюда много чего, после удалил, так как менял способ for i in spisok: crauler(i) main()
Офлайн
Djo0513Вручную выдаёт капчу после трёх раз. Быстро обновляешь страницу и выдаёт.
Вручную не выдаёт
Офлайн
py.user.next
Так я же поставил длительные time.sleep'ы, всё равно палит
Djo0513time.sleep(20) bsobj = BeautifulSoup(response.text, 'lxml') time.sleep(20)[/quote]
Офлайн
Ну я в браузере обновил с паузой в 1 минуту, точно так же капчу выдаёт после третьего раза.
Офлайн
py.user.next
Слишком длинные time.sleep'ы не мой конёк, этот скрипт в проекте значимую роль не играет. А через прокси ломаться будет, что делать?
Офлайн
Djo0513Так ты руками сначала всё сделай, чтобы вообще понять, как без капчи это пройти. Там вообще может быть так, что капча всегда выдаётся. Дальше, если она не всегда выдаётся, надо понять, как они её сделали и на что она там реагирует. Она может реагировать вообще не на заголовки, а на профиль поведения клиента (ну типа переключает он ссылки или сидит на одной, заходил он за день до этого или не заходил, устраивал он раньше подозрительные действия или не устраивал). Временные проверки редко делают, только на не свойственные для человека скорости. На длинные паузы проверки не делают, потому что тут скорость интернета влияет: из-за неё может всё варьироваться и быть непонятным; нельзя гарантировать, какой у клиента интернет канал, его реальную скорость просто не определишь. Поэтому пройди это руками, там у него ещё печенье есть, оно тоже может учитываться при профилировании. Сначала докажи, что оно вообще проходимо вручную.
Сайт имеет капчу, но выдаёт её только если узнает что пользователь робот.
Офлайн