У меня проблема с анализом таблицы на веб-странице - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь извлечь одну таблицу из веб-страницы (https://en.wikipedia.org/wiki/2018%E2%80%9319_Premier_League) с помощью selenium и BeautifulSoup.

Но я застрял с таблицей синтаксического анализа. Мне нужна только одна таблица с веб-страницыэто «таблица лиги», но что бы я ни пытался, я получаю сообщения об ошибках.

Вот мой код, который я пробовал.

 import selenium 
from bs4 import BeautifulSoup
from selenium import webdriver
import time
driver.get("https://google.com")
elem = driver.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input')
elem.send_keys("2018 epl")
elem.submit()
try:
   print(driver.title)
driver.find_element_by_partial_link_text("Wikipedia").click()
website = requests.get(driver.current_url).text

soup = BeautifulSoup(website, 'html.parser')

И затем я сталкиваюсь с проблемой.. Я пробовал несколько кодов, один из которых приведен ниже.

rows=soup.find_all('td')

Так что вы можете помочь мне завершить мой код? Большое спасибо.

Ответы [ 3 ]

1 голос
/ 08 октября 2019

Вы можете просто использовать pandas read_html и извлечь через соответствующий индекс. Однако я покажу, используя селектор: has для bs4 4.7.1 +, чтобы убедиться, что вы выбрали h2 с идентификатором League_table, а затем непосредственный братский комбинатор, чтобы получить соседнюю таблицу

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

r = requests.get('https://en.wikipedia.org/wiki/2018%E2%80%9319_Premier_League')
soup = bs(r.content, 'lxml')
table = pd.read_html(str(soup.select_one('h2:has(#League_table) + table')))
print(table)

Просто read_html

import pandas as pd

tables = pd.read_html('https://en.wikipedia.org/wiki/2018%E2%80%9319_Premier_League')
print(tables[4])
0 голосов
/ 08 октября 2019

Я получил таблицу, используя этот код под вашим кодом.

soup.body.find_all("table", class_="wikitable")[3]

Я нашел таблицу, используя метод проб и ошибок, т.е. сначала посмотрите класс таблицы, а затемиспользуйте find_all, а затем перечислите отдельные элементы и проверьте вывод.

0 голосов
/ 08 октября 2019

Может быть, это поможет вам начать:

import requests
from bs4 import BeautifulSoup

respond = requests.get('https://en.wikipedia.org/wiki/2018%E2%80%9319_Premier_League')
soup = BeautifulSoup(respond.text, 'lxml')
table = soup.find_all('table', {'class': 'wikitable'})
...