Найти - Пользователи
Полная версия: Загружается не полная html страница
Начало » Python для новичков » Загружается не полная html страница
1
jbn238
 import requests
from bs4 import BeautifulSoup
import pandas as pd
# url = 'https://www.tennisabstract.com/cgi-bin/wplayer.cgi?p=EliseMertens#career-splits-h'
#
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 YaBrowser/23.1.1.1138 Yowser/2.5 Safari/537.36"
}
#
# response1 = requests.get(url, headers=headers)
# soup1 = BeautifulSoup(response1.content, 'html.parser')
Сама страница загружается, но когда начинаю пытаться парсить страницу, не находит никакие элементы которые нужны, в текстовом редакторе открыл код который оно загружает, там в “div” ничего не загружает, всю страницу кроме содержимого “div”. Попробовал открыть файл html, чтобы посмотреть как будет выглядеть страница, но она такая же как и оригинал, в ней есть содержимое div'a. Как загрузить страницу полностью?
py.user.next
Там надо качать вот этот файл, который указан в исходнике страницы
https://www.minorleaguesplits.com/tennisabstract/cgi-bin/frags/EliseMertens.js

И потом надо будет этот файл анализировать. Так что забудь про BeautifulSoup со страницей, там совсем другие действия понадобятся для разбора. Сначала придётся это преобразовать в подобие HTML-кода, а уже потом для этого HTML-кода можно будет применить BeautifulSoup.
jbn238
py.user.next
Там надо качать вот этот файл, который указан в исходнике страницы

Спасибо, понял. В таком случае, можете ещё, пожалуйста, подсказать каким способом скачать этот файл в Python, и после преобразовать в html? Буду очень благодарен!
py.user.next
jbn238
подсказать каким способом скачать этот файл в Python
  
>>> import urllib.request
>>> 
>>> url = 'https://www.minorleaguesplits.com/tennisabstract/cgi-bin/frags/EliseMertens.js'
>>> 
>>> headers = {
...     'User-Agent': 'Firefox'
... }
>>> 
>>> req = urllib.request.Request(url=url, headers=headers)
>>> 
>>> with urllib.request.urlopen(req) as data:
...     text = data.read().decode('utf-8')
... 
>>> text[:100]
'var player_frag = `<p><h1 id="recent-results-h">Recent Results&nbsp;&nbsp;&nbsp;<span style="font-si'
>>>

jbn238
и после преобразовать в html
Сохрани этот файл на диск просто и удаляй из него лишнее, заменяй в нём символы разные, чтобы эти данные стали валидным HTML-кодом. Когда сделаешь для файла на диске, тогда и объединишь эти два кода - код скачивания и код преобразования в HTML-данные.

Пример очистки строки и достраивания её до HTML-кода
  
>>> import re
>>> 
>>> text = """var player_frag = `<p><h1 id="recent-results-h"> ... </h1>"""
>>> 
>>> textnew1 = re.sub(r'^var[^`]*`', r'', text)
>>> textnew2 = re.sub(r'^<([^>]+)>.*$', r'\g<0></\1>', textnew1)
>>> 
>>> out = textnew2
>>> 
>>> text
'var player_frag = `<p><h1 id="recent-results-h"> ... </h1>'
>>> textnew1
'<p><h1 id="recent-results-h"> ... </h1>'
>>> textnew2
'<p><h1 id="recent-results-h"> ... </h1></p>'
>>> 
>>> out
'<p><h1 id="recent-results-h"> ... </h1></p>'
>>>

Вообще, это не всё так просто. Если повезёт, там будет целый HTML-код в переменной player_frag. Но может и не повезти, что чаще всего бывает, и надо будет как-то анализировать это содержимое и как-то достраивать его, иначе BeautifulSoup его не воспримет в сломанном виде. Может быть, ты и вообще не будешь использовать разбор HTML-кода, а сразу станешь текст отыскивать в тегах.
jbn238
py.user.next
Спасибо за помощь, буду что-то химичить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB