Как я могу использовать Beautiful Soup для разбора имен жидкого теста? - PullRequest
0 голосов
/ 19 сентября 2018

У меня не было проблем с захватом трех характеристик: хиты, пробеги и руби.Вот код, с которым я работал до сих пор:

#import modules

from bs4 import BeautifulSoup
import requests, os
from selenium import webdriver

#start webdriver 

os.chdir('C:\webdrivers')
header = {'User-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
options = webdriver.ChromeOptions(); options.add_argument("--start- 
maximized")
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.baseball-reference.com/leagues/MLB/2018-standard- 
batting.shtml')

#grab html

soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()

#parse three stats: rbi's, runs and hits

hits = [i.text for i in soup.find_all('td', {'data-stat': 'H'})]
runs = [i.text for i in soup.find_all('td', {'data-stat': 'R'})]
rbi = [i.text for i in soup.find_all('td', {'data-stat': 'RBI'})]

#print data

print(hits, runs, rbi)

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

Вот что я попробовал:

print(soup.find_all('td', {'data-stat': 'player'}))

Имена бэттера есть в коде, но есть много дополнительных данных.Кроме того, мой компьютер сильно замедлился, когда я попробовал эту строку кода.Какие-либо предложения?Заранее благодарим за любую помощь, которую вы можете предложить!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Данные не находятся на исходной странице, пожалуйста, перейдите по этой ссылке: https://d3k2oh6evki4b7.cloudfront.net/short/inc/players_search_list.csv

Это CSV-файл, который вы можете напрямую загрузить этот файл или же вы можете получить нужные данные с помощью кода.

0 голосов
/ 19 сентября 2018

Как получить имена тестов:

просто запросите данные игрока напрямую, я нашел этот URL, когда я смотрю загрузку страницы, получить имя игрока по этому URL будет очень просто:
https://d3k2oh6evki4b7.cloudfront.net/short/inc/players_search_list.csv

Как набрать код:

Первый: Использование selenium для загрузки веб-драйвера будет стоить большую частьвремя в вашем коде.Для вашей цели захвата я предлагаю вам использовать requests напрямую вместо selenium

Секунда: lxml parser будет работать быстрее, чем html-анализатор, но вы должны установить его, если вы никогда его не используетепросто запустите "pip install lxml", это поможет вам.
Установка-анализатора и суммирует преимущества и недостатки каждой библиотеки синтаксического анализатора

, например:

import requests
from bs4 import BeautifulSoup

# start requests
target_url = 'https://www.baseball-reference.com/leagues/MLB/2018-standard-batting.shtml'
headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}

page_source = requests.get(target_url, headers=headers).text

#grab html

soup = BeautifulSoup(page_source, 'lxml')

#parse three stats: rbi's, runs and hits

hits = [i.text for i in soup.find_all('td', {'data-stat': 'H'})]
runs = [i.text for i in soup.find_all('td', {'data-stat': 'R'})]
rbi = [i.text for i in soup.find_all('td', {'data-stat': 'RBI'})]

#print data

print(hits, runs, rbi)
...