Я новичок в webscraping, и поэтому я изучаю кучу разных подходов.Одним из них (который меня больше всего волнует) является использование библиотеки Python 'orders-html', которая поддерживает рендеринг содержимого Javascript.
По сути, мне интересно, как я могу нажать кнопку «Далее», чтобы перейти на данную страницу, чтобы получить больше визуализированного контента JS.Используя пример веб-страницы "https://us -proxy.org / ".Я довольно легко могу получить xpath для кнопки «Далее», но я не знаю, как ее активировать.
Насколько я понимаю, «messages-html» заключается в том, что она работает в основном путем управления экземпляром безголового хромаи используя его для рендеринга страниц с помощью Javascript.Пока все хорошо, я немного поэкспериментировал с ним, и он работает довольно хорошо, но в документации упоминается, что он включает в себя функциональность разбиения на страницы.Честно говоря, мне кажется, я не могу заставить его работать, и, кроме того, что он там, документы для авторов не очень детализированы.
Мне бы понравилось, если бы кто-то мог объяснить, как люди делают это с этой библиотекой илидаже если бы они могли просто указать мне на более детальные документы, если они есть в сети.Я потратил некоторое время на троллинг вокруг, пытаясь выяснить, смогу ли я найти что-нибудь, но на удивление мало что мне удалось вспомнить о «request-html» вообще, учитывая, насколько мощным оно кажется.Я также проверил ReadTheDocs, и он практически не имел информации.Я полагаю, что я могу немного выйти за рамки проблемы и покопаться в pyppeteer, но это похоже на потенциально другую кроличью нору ...
---------------------------- Мой пример скрипта ----------------------
targetURL = "https://us-proxy.org/"
print("script running")
# create an HTML Session Object
session = HTMLSession()
# Use the object to needed webpage
responseObject = session.get(targetURL)
responseObject.html.next()
option_tagsNoRender = responseObject.html.xpath("//td")
print("\n\nNo Rend: ", len(option_tagsNoRender) )
print("\n\n", option_tagsNoRender[0].full_text)
# Run Javascript Code on target webpage
responseObject.html.render(sleep=10)
option_tags = responseObject.html.xpath("//td")
print("\n\nPost Render: ", len(option_tags) )
#print(dir(option_tags[0]))
print("\n\n", option_tags[0].full_text)
for tag in option_tags:
#pass
print(tag.full_text)
---------------- Конец ------------------------------------------
Поскольку документация создателей фактически упоминала метод .next (), я попытался его выполнить (как видно из примера сценария).Судя по выводу, он ничего не делает (хотя понятия не имею, правильно ли я его реализую).Результаты поиска по тегу получаются одинаковыми, независимо от того, комментирую я эту строку или оставляю ее. Похоже, она НЕ продвигает отображаемую страницу JS.
Цените любые указания или идеи.Спасибо!
Обновление:
Хорошо, поэтому я более внимательно посмотрел на документы, и они упоминают, что вы можете взаимодействовать со страницей, если вы используете опцию keep_page во время вызова рендеринга.Это привело меня к открытию пути к документам pyppeteers (которые, конечно, используются в запросах-html), которые, кажется, раскрывают довольно прямой метод .click (), который, похоже, не давил селектору xpath следующегоКнопка, которую я кормил.К сожалению, я до сих пор не вижу никаких доказательств того, что он успешно перешел по ссылке, и все время получаю сообщение об ошибке «RuntimeWarning: сопрограмма« clickNext »никогда не ожидалась».
Вот простая функция, которую я написал, чтобы нажать следующую кнопку, которая теперь дает мне это сообщение:
-------------------------------------------------------
async def clickNext ():
await asyncio.wait([ responseObject.html.page.click('//a[@aria-controls][@data-dt-idx="9"]'),
responseObject.html.page.waitFor(5000),])
-------------------------------------------------------
У меня пока нет опыта работы с асинхронным программированием и сопрограммами, поэтому он имеет в виду время, когда я копаюсь в этом, но если у кого-то есть пониманиечто я делаю не так с этим, я был бы признателен за любую информацию, которой вы хотели поделиться.Спасибо!