Как получить полный код со страницы?
Требуется получить ВЕСЬ код с сайта такого формата https://www.chess.com/game/live/40471234963, а именно в любом виде позицию ВСЕХ фигур на доске. Пробовал использовать bs4 и requests:
import requests
from bs4 import BeautifulSoup
response = requests.get("https://www.chess.com/game/live/40471234963")
soup = BeautifulSoup(response.content, "lxml")
print(soup.get_text)
Но в выводе нет нужной информации. Возможно нужно использовать другую библиотеку или кодировку?
P.S Нашел нужный XPath для получения FEN позиции, но не знаю как его получить(
xpath = "/html/body/div[8]/div[2]/div/div/section/div[3]"
Ответы (2 шт):
Там есть такой фрагмент:
<!--/Hover Square-->
<.... тут непонятно что ...>
<div class="piece br square-48" style=""></div>
<div class="piece bp square-27" style=""></div>
<div class="piece bk square-17" style=""></div>
<div class="piece bp square-85" style=""></div>
<div class="piece wp square-65" style=""></div>
<div class="piece wp square-55" style=""></div>
<div class="piece bp square-15" style=""></div>
<div class="piece wq square-54" style=""></div>
<div class="piece bp square-43" style=""></div>
<div class="piece bq square-23" style=""></div>
<div class="piece wp square-82" style=""></div>
<div class="piece wb square-72" style=""></div>
<div class="piece wk square-81" style=""></div>
<div class="piece wr square-41" style=""></div>
<div class="piece wr square-31" style=""></div>
<!--/Pieces-->
<!--/MoveHints-->
<!--/Capture Hints-->
Число - численная координата клетки. 11 это а1, 81 это h1, 88 это h8, 23 - b3.
Двухбуквенная аббревиатура - что стоит на этой клетке. Первая буква - цвет:
- w - белая (white)
- b - черная (black)
Вторая буква - фигура:
- p - пешка (pawn),
- b - слон (bishop),
- n - конь (knight),
- r - ладья (rook),
- q - ферзь (queen),
- k - король (king).
Но, похоже, это все яваскрипт и в результате запроса bs этого нет, т.к. там скрипт не исполняется.
Лучшее, что можно использовать в этом случае - Selenium. С ним можно удобно добираться до JS-фрагментов и потом их обрабатывать.