Сохранить хлопотную веб-страницу и импортировать обратно в Python - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь извлечь некоторую информацию из множества страниц и немного борюсь.Это показывает мою проблему:

import requests
from lxml import html
url = "https://www.soccer24.com/match/C4RB2hO0/#match-summary"
response = requests.get(url)
print(response.content)

Если вы скопируете вывод в Блокнот, вы не сможете найти значение «9,20» где-либо в выводе (коэффициент команды А в правом нижнем углу веб-страницы).Однако, если вы откроете веб-страницу, сделаете Save-As и затем импортируете ее обратно в Python, как это, вы можете найти и извлечь значение 9.20:

with open(r'HUL 1-7 TOT _ Hull - Tottenham _ Match Summary.html', "r") as f:
    page = f.read()
tree = html.fromstring(page)

output = tree.xpath('//*[@id="default-odds"]/tbody/tr/td[2]/span/span[2]/span/text()')  #the xpath for the TeamA odds or the 9.20 value
output # ['9.20']

Не уверен, почему этот обходной путь работает, ноэто выше меня.Поэтому я хотел бы сохранить веб-страницу на моем локальном диске и открыть ее на Python, как указано выше, и продолжить с нее.Но как мне скопировать Save-As в Python?Это не работает:

import urllib.request
response = urllib.request.urlopen(url)
webContent = response.read().decode('utf-8')
f = open('HUL 1-7 TOT _ Hull - Tottenham _ Match Summary.html', 'w')
f.write(webContent)
f.flush()
f.close()

Это дает мне веб-страницу, но это часть оригинальной страницы ...?

1 Ответ

0 голосов
/ 30 ноября 2018

Как сказал @Pedro Lobito.Содержание страницы генерируется javascript.По этой причине вам нужен модуль, который может запускать JavaScript.Я выберу requests_html или selenium.

Requests_html

from requests_html import HTMLSession

url = "https://www.soccer24.com/match/C4RB2hO0/#match-summary"

session = HTMLSession()
response = session.get(url)
response.html.render()
result = response.html.xpath('//*[@id="default-odds"]/tbody/tr/td[2]/span/span[2]/span/text()')
print(result)
#['9.20']

Селен

from selenium import webdriver
from lxml import html

url = "https://www.soccer24.com/match/C4RB2hO0/#match-summary"
dr = webdriver.Chrome()

try:
    dr.get(url)
    tree = html.fromstring(dr.page_source)
    ''' use it when browser closes before loading succeeds
    # https://selenium-python.readthedocs.io/waits.html
    WebDriverWait(dr, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
    '''
    output = tree.xpath('//*[@id="default-odds"]/tbody/tr/td[2]/span/span[2]/span/text()')  #the xpath for the TeamA odds or the 9.20 value
    print(output)

except Exception as e:
    raise e

finally:
    dr.close()
#['9.20']
...