Python POST-запрос для очистки веб-страниц - PullRequest
0 голосов
/ 28 апреля 2020

Я использую beautifulsoup и requests для удаления html содержимого для этой веб-страницы .

На основе выбора, сделанного на странице - список станций заполнены на странице. При нажатии на любую станцию ​​отображается страница html со значениями td.

Например,

1. State Name - West Bengal 
2. District Name - Bardhman

List of stations: Chitranjan, Damodar Rl Bridge,....

Моя цель - получить данные для каждой станции из списка.

Я отправляю запрос по почте, но в ответ не получаю любые значения тега td. (может быть динамически загружен)

Код:

from bs4 import BeautifulSoup

headers = {
    'Content-Type':'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/81.0.4044.113 Safari/537.36'
}

cookies = {
   'JSESSIONID':'A95A81E6F668F00E677AD460CD3DBB99'
}


data = {
  'lstStation':'014-DDASL'
}

response = requests.post('http://india-water.gov.in/ffs/data-flow-list-based/flood-forecasted-site/', headers=headers, data=data, cookies=cookies)

soup = BeautifulSoup(response.content, 'html.parser')

#print (soup.text)
all_td = soup.select ('td')

for td in all_td:
    print (td.text)

Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Вы правы, весьма вероятно, что контент динамически загружается с использованием javascript. Что-то requests есть агности c о. Более того, многим веб-сайтам не нравится, когда их отбрасывают, и они используют средства защиты для смягчения скребков. Лучший способ действий - найти API, предоставляемый сайтом для удовлетворения ваших требований.
В противном случае у вас есть в основном два варианта.

Простой - просто нужно javascript

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

Менее просто - обнаружение уклонения

В случае, если они попытаются обнаружить ботов и предотвратить их очистку сайта, вам необходимо выяснить, как они делают это и уклоняются от своих методов. Для этого не существует универсального решения, требующего времени и терпения. Самое простое уклонение - это просто белый список известных строк User-Agent из заголовка запроса. Может быть, даже так просто, как просто регулировать скорость. Тогда вам будет достаточно вашего дополнения к полям заголовка.
Гораздо более популярными являются сильные обнаружения ботов, которые запрашивают у вашего «браузера» его разрешение, пытаются воспроизвести звук через него или пытаются выполнить функцию, известную безголовому браузеру, такую ​​как selenium, как известно, имеют. Браузеры Healdess не могут этого избежать, и вам придется обходить их.

Вы можете просматривать сетевые запросы, которые выполняет ваш браузер (на панели разработчика. По умолчанию F12 в Firefox), или потратить немного больше времени на изучение инструмента, более приспособленного для работы, такого как Zap. Proxy . Последний может MiTM ваши запросы и нюхать ваш собственный сетевой трафик c. Это вы можете использовать для "сравнения" traffi c, когда сделан запрос le git (фактический браузер) против вашего скрипта.

Удачи!

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