是否可以使用美丽的汤网络抓取毕达哥拉斯 win/loss 记录列并将数据保存到 excel?
Is it possible to web scape the pythagorean win/loss record column using beautiful soup and save data to excel?
这是我第一次擦伤。我试过在线观看一些视频并使用 google。不过,我在这个网站上并没有取得太大的成功。也许有人可以帮助我。
这就是我开始的...
from lxml import html
from bs4 import BeautifulSoup
import requests
import pandas as pd
req = requests.get('https://www.baseball-reference.com/leagues/MLB-
standings.shtml')
soup = BeautifulSoup(req.text, "lxml")
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
my_dict = dict(zip(team, W_L))
df = pd.DataFrame(my_dict)
writer = pd.ExcelWriter('my1st_webscrape.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
我想要毕达哥拉斯 win/loss 专栏。谢谢!
搜索包含 data-stat
的所有 td
标签对应于 record_pythag
并从每个标签中提取 .text
:
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
请注意,这假设找到的所有标签都包含文本。如果不这样做,它将抛出 NoneType
错误,在这种情况下,您可以将其包装在 try-except
块中。
我想您要创建的词典使用团队名称缩写作为键,在这种情况下,您可以 assemble 列表如下:
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
然后你可以创建你的词典:
my_dict = dict(zip(team, W_L))
并将其传递给数据框:
df = pd.DataFrame(my_dict)
编辑
事实证明,您实际上需要 Selenium 来提取您感兴趣的信息。Selenium 允许您自动化 Web 浏览器,它将加载完整的页面源 HTML。在将字典传递给 DataFrame 构造函数之前,您还需要将其转换为 pandas 系列。请参阅下面修改后的代码(请注意,您需要下载 selenium chrome 驱动程序,或您有兴趣使用的任何网络浏览器驱动程序):
from bs4 import BeautifulSoup
import requests, os
import pandas as pd
from selenium import webdriver
os.chdir('path your chrome driver')
header = {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'}
options = webdriver.ChromeOptions(); options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.baseball-reference.com/leagues/MLB-standings.shtml')
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
my_dict = dict(zip(team, W_L))
df = pd.DataFrame(pd.Series(my_dict))
writer = pd.ExcelWriter('my1st_webscrape.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
这是我第一次擦伤。我试过在线观看一些视频并使用 google。不过,我在这个网站上并没有取得太大的成功。也许有人可以帮助我。
这就是我开始的...
from lxml import html
from bs4 import BeautifulSoup
import requests
import pandas as pd
req = requests.get('https://www.baseball-reference.com/leagues/MLB-
standings.shtml')
soup = BeautifulSoup(req.text, "lxml")
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
my_dict = dict(zip(team, W_L))
df = pd.DataFrame(my_dict)
writer = pd.ExcelWriter('my1st_webscrape.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
我想要毕达哥拉斯 win/loss 专栏。谢谢!
搜索包含 data-stat
的所有 td
标签对应于 record_pythag
并从每个标签中提取 .text
:
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
请注意,这假设找到的所有标签都包含文本。如果不这样做,它将抛出 NoneType
错误,在这种情况下,您可以将其包装在 try-except
块中。
我想您要创建的词典使用团队名称缩写作为键,在这种情况下,您可以 assemble 列表如下:
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
然后你可以创建你的词典:
my_dict = dict(zip(team, W_L))
并将其传递给数据框:
df = pd.DataFrame(my_dict)
编辑
事实证明,您实际上需要 Selenium 来提取您感兴趣的信息。Selenium 允许您自动化 Web 浏览器,它将加载完整的页面源 HTML。在将字典传递给 DataFrame 构造函数之前,您还需要将其转换为 pandas 系列。请参阅下面修改后的代码(请注意,您需要下载 selenium chrome 驱动程序,或您有兴趣使用的任何网络浏览器驱动程序):
from bs4 import BeautifulSoup
import requests, os
import pandas as pd
from selenium import webdriver
os.chdir('path your chrome driver')
header = {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'}
options = webdriver.ChromeOptions(); options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.baseball-reference.com/leagues/MLB-standings.shtml')
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
W_L = [i.text for i in soup.find_all('td', {'data-stat': 'record_pythag'})]
team = [i.text for i in soup.find_all('td', {'data-stat': 'team_ID'})]
my_dict = dict(zip(team, W_L))
df = pd.DataFrame(pd.Series(my_dict))
writer = pd.ExcelWriter('my1st_webscrape.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()