网页表格抓取(Papagiannis(列为Ognen)数组中的名称直接将您带到单个页面 )
优采云 发布时间: 2022-01-28 07:07网页表格抓取(Papagiannis(列为Ognen)数组中的名称直接将您带到单个页面
)
我在尝试抓取 网站 时遇到了一个独特的情况。我正在通过搜索栏搜索数百个名字,然后抓取表格。但是,与该站点相比,有些名称是独一无二的,并且在我的列表中拼写不同。在这种情况下,我在 网站 上手动查找了几个名字,但它仍然直接将我带到了一个页面。其他时候,如果有多个名字相同或相似的人,它就会进入名单(在这种情况下,我想要在nba打过球的人。我已经考虑到了这一点,但我认为值得一提一点点)。如何继续访问这些玩家的个人页面,而不是每次都运行脚本并单击错误以查看哪个玩家的拼写略有不同?此外,数组中的名称会将您直接带到一个页面,即使拼写略有不同或名称列表(需要 NBA 中的名称)。一些例子是 Georgios Papagiannis(在 网站 上被列为 George Papagiannis)、Ognjen Kuzmic(被列为 Ognen Kuzmic)、Nene(被列为 Maybyner Nene,但会带您进入名单--)。看起来很难,但我觉得有可能。此外,似乎不是将所有抓取的数据写入 csv,而是每次都被下一个玩家覆盖。太感谢了。似乎不是将所有抓取的数据写入csv,而是每次都被下一个玩家覆盖。太感谢了。似乎不是将所有抓取的数据写入csv,而是每次都被下一个玩家覆盖。太感谢了。
我得到的错误: AttributeError: 'NoneType' object has no attribute 'text'
import requests
from bs4 import BeautifulSoup
import pandas as pd
playernames=['Carlos Delfino', 'Nene', 'Yao Ming', 'Marcus Vinicius', 'Raul Neto', 'Timothe Luwawu-Cabarrot']
result = pd.DataFrame()
for name in playernames:
fname=name.split(" ")[0]
lname=name.split(" ")[1]
url="https://basketball.realgm.com/search?q={}+{}".format(fname,lname)
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
if soup.find('a',text=name).text==name:
url="https://basketball.realgm.com"+soup.find('a',text=name)['href']
print(url)
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
try:
table1 = soup.find('h2',text='International Regular Season Stats - Per Game').findNext('table')
table2 = soup.find('h2',text='International Regular Season Stats - Advanced Stats').findNext('table')
df1 = pd.read_html(str(table1))[0]
df2 = pd.read_html(str(table2))[0]
commonCols = list(set(df1.columns) & set(df2.columns))
df = df1.merge(df2, how='left', on=commonCols)
df['Player'] = name
print(df)
except:
print ('No international table for %s.' %name)
df = pd.DataFrame([name], columns=['Player'])
result = result.append(df, sort=False).reset_index(drop=True)
cols = list(result.columns)
cols = [cols[-1]] + cols[:-1]
result = result[cols]
result.to_csv('international players.csv', index=False)