Есть два способа сделать это.Одним из способов является использование селена .Он позволяет программно управлять браузером (поддерживаются наиболее распространенные браузеры, такие как Firefox и Chrome).Я не знаком с ним, и это может быть излишним во многих ситуациях (я думаю, что браузер будет нести некоторые издержки), но это полезно знать.
Другой способ - это сделать еще один осмотр, чтобы увидеть, что происходитпри нажатии кнопки «Подробнее».Вкладка «Сеть» в инструментах разработчика (я использую Chrome, но я думаю, что Firefox также имеет то же самое) может помочь с этим, показывая вам все HTTP-запросы, отправляемые браузером.
Я считаю, чтопри нажатии кнопки «Подробнее» запрос POST
отправляется на https://www.mouthshut.com/review/CorporateResponse.ashx
со следующими данными:
type: review
reviewid: 2836986
corp: false
isvideo: false
fbmessage: I found this review of ICICI Lombard Auto Insurance pretty useful
catid: 925641018
prodimg: .jpg
twittermsg: I found this review of ICICI Lombard Auto Insurance pretty useful %23WriteShareWin
twitterlnk: https://www.mouthshut.com/review/ICICI-Lombard-Auto-Insurance-review-rmlrrturotn
catname: ICICI Lombard Auto Insurance
rating_str: 1/5
usession: 0
Однако, когда я только что отправил запрос POST
с этими данными,это не сработало.Обычно это означает, что в заголовках HTTP есть что-то важное.Обычно это печенье;Я подтвердил, что это действительно так.Решение легко с пакетом requests
(который вы должны полностью использовать в любом случае): Используйте requests.Session
.
Вот подтверждение концепции:
import requests
with requests.Session() as s:
s.get('https://www.mouthshut.com/product-reviews/ICICI-Lombard-Auto-Insurance-reviews-925641018')
print(s.post('https://www.mouthshut.com/review/CorporateResponse.ashx',
data = {'type': 'review', 'reviewid': '2836986', 'catid': '925641018', 'corp': 'false', 'catname': ''}
).text)
Результатом является некотороеHTML, содержащий то, что вы ищете.Наслаждайтесь супингом!