Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Data Mining
  • » Как автоматизировать парсинг на сайте с защитой от роботов? [RSS Feed]

#1 Сен. 7, 2017 12:04:45

Djo0513
Зарегистрирован: 2016-09-02
Сообщения: 92
Репутация: +  0  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Имеем большой проект который должен по заданному промежутку времени парсить один сайт на котором обновляется информация. Сайт имеет капчу, но выдаёт её только если узнает что пользователь робот. 4 день мучаюсь, никак не могу понять как автоматизировать скрипт. В headers писал всё и по отдельности и так и сяк. Ставил долгие time.sleep'ы. В книге Р.Митчелла сказано, что можно обойти защиту с помощью headers, но мне нужно делать это постоянно, а сайт рано или поздно “палит” робота. Пытался с перебором hedaers в списке для каждой страницы, не помогло. Есть ли решение вообще?



Лучший учитель - это ты сам.

Офлайн

#2 Сен. 8, 2017 17:05:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Djo0513
В headers писал всё и по отдельности и так и сяк.
Что писал в заголовках? Да и вручную через браузер выдаёт ли капчу?



Офлайн

#3 Сен. 8, 2017 21:15:20

Djo0513
Зарегистрирован: 2016-09-02
Сообщения: 92
Репутация: +  0  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

py.user.next
Вручную не выдаёт, у него проверка на бота и после редирект что ли, на сайт, а если робот то на капчу. В заголовках писал очень много всего, даже на мозилу расширение скачал для проверки отправленных заголовков браузером и оттуда тупо копировал.



Лучший учитель - это ты сам.

Отредактировано Djo0513 (Сен. 8, 2017 21:21:12)

Офлайн

#4 Сен. 9, 2017 01:12:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Обычно все эти проверки базируются на заголовках.

Djo0513
Вручную не выдаёт, у него проверка на бота и после редирект что ли, на сайт, а если робот то на капчу.
Скорее всего, что-то не дописал ты в заголовках или послал неправильное (время там или закодированный адрес IP).

Djo0513
В заголовках писал очень много всего
Пример заголовков сюда скопируй.



Отредактировано py.user.next (Сен. 9, 2017 01:13:48)

Офлайн

#5 Сен. 9, 2017 13:21:35

Djo0513
Зарегистрирован: 2016-09-02
Сообщения: 92
Репутация: +  0  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

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()

Это то что осталось, так как много чего удалял, изменял и т.д. Но делал и другими способами тоже - не помогло.



Лучший учитель - это ты сам.

Офлайн

#6 Сен. 10, 2017 05:08:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Djo0513
Вручную не выдаёт
Вручную выдаёт капчу после трёх раз. Быстро обновляешь страницу и выдаёт.



Офлайн

#7 Сен. 11, 2017 15:01:33

Djo0513
Зарегистрирован: 2016-09-02
Сообщения: 92
Репутация: +  0  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

py.user.next
Так я же поставил длительные time.sleep'ы, всё равно палит

Djo0513
  time.sleep(20)
    bsobj = BeautifulSoup(response.text, 'lxml')
    time.sleep(20)[/quote]



Лучший учитель - это ты сам.

Офлайн

#8 Сен. 11, 2017 16:44:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Ну я в браузере обновил с паузой в 1 минуту, точно так же капчу выдаёт после третьего раза.



Офлайн

#9 Сен. 11, 2017 18:58:25

Djo0513
Зарегистрирован: 2016-09-02
Сообщения: 92
Репутация: +  0  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

py.user.next
Слишком длинные time.sleep'ы не мой конёк, этот скрипт в проекте значимую роль не играет. А через прокси ломаться будет, что делать?



Лучший учитель - это ты сам.

Офлайн

#10 Сен. 12, 2017 01:12:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Как автоматизировать парсинг на сайте с защитой от роботов?

Djo0513
Сайт имеет капчу, но выдаёт её только если узнает что пользователь робот.
Так ты руками сначала всё сделай, чтобы вообще понять, как без капчи это пройти. Там вообще может быть так, что капча всегда выдаётся. Дальше, если она не всегда выдаётся, надо понять, как они её сделали и на что она там реагирует. Она может реагировать вообще не на заголовки, а на профиль поведения клиента (ну типа переключает он ссылки или сидит на одной, заходил он за день до этого или не заходил, устраивал он раньше подозрительные действия или не устраивал). Временные проверки редко делают, только на не свойственные для человека скорости. На длинные паузы проверки не делают, потому что тут скорость интернета влияет: из-за неё может всё варьироваться и быть непонятным; нельзя гарантировать, какой у клиента интернет канал, его реальную скорость просто не определишь. Поэтому пройди это руками, там у него ещё печенье есть, оно тоже может учитываться при профилировании. Сначала докажи, что оно вообще проходимо вручную.



Офлайн

  • Начало
  • » Data Mining
  • » Как автоматизировать парсинг на сайте с защитой от роботов?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version