Парсинг динамической таблицы
Мне нужно вытащить ссылки на видосы из картинок с сайта
https://www.piku.co.kr/w/rank/3ed2LS
Методом научного тыка обнаружил, что ссылки вроде как подгружаются с xhr-запроса https://www.piku.co.kr/w/rank/x.php?u=3ed2LS
Пытался получить get-запрос с помощью XMLHttpRequest, но, в итоге, получил CORS-ошибку.
С selenium пытался нажимать на эти картинки, чтобы открыть проигрыватель, но он ругается на то, что таких объектов нет (AttributeError: 'list' object has no attribute 'click') (обращался к ним через xPath), пробовал такой трюк с ютубом, там все получилось:
from selenium import webdriver
PATH = 'C:/Users/JonnyK/Desktop/files/parser/chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://www.piku.co.kr/w/rank/3ed2LS')
driver.implicitly_wait(10)
driver.find_elements_by_xpath("//*[@id='DataTables_Table_0']/tbody/tr[1]/td[2]/div").click()
driver.quit()
PS Не одну неделю парюсь с решением этой задачи, поэтому очень сильно надеюсь на помощь знатоков...
Ответы (1 шт):
Можно обойтись requests, без selenium:
import json
import requests
url = 'https://www.piku.co.kr/w/rank/x.php?u=3ed2LS'
# length - "с запасом", можно и 99999
payload = {'start': '0', 'length': '999', 'draw': '0'}
r = requests.post(url, data=payload)
res = json.loads(r.content)
количество элементов в ответе:
>>>len(res['data'])
790
т.е. все; и первый из них, для ознакомления:
>>> res['data'][0]
['1', "<div style='width:100%;height:100px;background-size:cover;background-position:center top;background-image:url(https://img.youtube.com/vi/Q_n3n819dGI/mqdefault.jpg)'></div>", '<strong data-no=3549717>Gachi Нурминский - Валим на Gay-PArty</strong>', '15.10', '78.24']
обработайте и запишите в удобную вам структуру:
data = []
for d in res['data']:
image_url = d[1][d[1].find('(')+1:d[1].find(')')]
data.append({
'number': int(d[0]),
'title': d[2][d[2].find('>')+1:d[2].rfind('<')],
'image_url': image_url,
'video_url': 'https://www.youtube.com/watch?v=' + image_url.replace('https://img.youtube.com/vi/', '').replace('/mqdefault.jpg', ''),
})
в data будет список словарей с номером, заголовком и двумя ссылками:
>>> data
[
{'number': 1, 'title': 'Gachi Нурминский - Валим на Gay-PArty', 'image_url': 'https://img.youtube.com/vi/Q_n3n819dGI/mqdefault.jpg', 'video_url': 'https://www.youtube.com/watch?v=Q_n3n819dGI'},
...
{'number': 790, 'title': 'Мир похож на цветной луг ♂gachi remix♂ri', 'image_url': 'https://img.youtube.com/vi/yliWPQ1Z4-I/mqdefault.jpg', 'video_url': 'https://www.youtube.com/watch?v=yliWPQ1Z4-I'}
]


