Parse bs4 table из бейсбольной ссылки - PullRequest
0 голосов
/ 04 мая 2018
url = 'https://www.baseball-reference.com/boxes/NYN/NYN201704030.shtml'

def make_soup(url): 
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    return soup

soup = make_soup(url)

Я пытаюсь найти игру на игровом столе на этой странице, и я исчерпал все варианты. Есть мысли о том, как найти?

Это тело , расположенное под div.table_outer_container.mobile_table

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Комментируется в источнике:

enter image description here

Ищите что-то, чтобы идентифицировать комментарий, то есть play_by_play id

from requests import get
from bs4 import BeautifulSoup, Comment


cont = get("https://www.baseball-reference.com/boxes/NYN/NYN201704030.shtml").content
soup = BeautifulSoup(cont, "lxml")

# Search Comments
comment = soup.find(text=lambda n: isinstance(n, Comment) and 'id="play_by_play"' in n)

soup2 = BeautifulSoup(comment)
table = soup2.select("#play_by_play")[0]

Который получает то, что вы хотите:

In [3]: from requests import get
   ...: from bs4 import BeautifulSoup, Comment
   ...: cont = get("https://www.baseball-reference.com/boxes/NYN/NYN201704030.sh
   ...: tml").content
   ...: soup = BeautifulSoup(cont, "lxml")
   ...: comment = soup.find(text=lambda n: isinstance(n, Comment) and 'id="pla
   ...: y_by_play"' in n)
   ...: soup2 = BeautifulSoup(comment, "lxml")
   ...: table = soup2.select("#play_by_play")[0]
   ...: print(table.select_one(".pbp_summary_top").text)
   ...: 
Top of the 1st, Braves Batting, Tied 0-0, Mets' Noah Syndergaard facing 1-2-3 

In [4]: 

Вы также можете использовать регулярное выражение с text=...:

cont = get("https://www.baseball-reference.com/boxes/NYN/NYN201704030.shtml").content
soup = BeautifulSoup(cont, "lxml")
comment = soup.find(text=compile('id="play_by_play"'))
soup2 = BeautifulSoup(comment, "lxml")
table = soup2.select("#play_by_play")[0]
0 голосов
/ 04 мая 2018

Вы можете использовать Селен в сочетании с BeautifulSoup для очистки содержимого таблицы следующим образом:

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.baseball-reference.com/boxes/NYN/NYN201704030.shtml")

html = driver.page_source
soup = BeautifulSoup(html, "lxml")

pbp_table = soup.find_all("table", {"id":"play_by_play"})

for tag in pbp_table:
    print (tag.text)

Если вы хотите использовать этот код, обязательно посмотрите руководство Selenium по драйверам и загрузите последнюю версию geckodriver , если вы используете Firefox, как в приведенном выше коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...