嗨,我正在尝试从网站创建数据集。我在kaggle上找到了数据集,并想使用该人用来获取更新版本的刮板,但是我遇到了一些错误问题。这给了我这个错误:
AttributeError:
'NoneType' object has no attribute 'find_all'
据我了解,这意味着该行无法找到数据,并且已经进行了某种更改(基于我在谷歌搜索时发现的内容):
chart = soup.find("table", class_="chart")
我已经转到页面并使用ctrl + u查看html并找到了表格/图表,但是我却找不到我需要的东西。有没有更好的方法可以找到它,或者有人可以指导我,谢谢您的帮助!
我试图在此处添加文本,但在例外之后给了我一个错误:继续并且此后不接受任何代码并且不会发布,因此这是指向github分支的链接:
https://github.com/Suljin/vgchartzScrape/blob/master/vgchartzfull.py
这是kaggle链接:https://www.kaggle.com/rush4ratio/video-game-sales-with-ratings/home
抱歉,忘记了网址,这对您真的很有帮助> <
http://www.vgchartz.com/gamedb/?page=18&results=1000&name=&platform=&minSales=0.01&publisher=&genre=&sort=GL
最佳答案
我看到了链接,然后基于html最新的html标签,我更新了如下代码,它应该可以工作。尽管列名已更改,所以您可以相应地对其进行更改。
这是更新的代码(Python 3):
from bs4 import BeautifulSoup
import urllib
import pandas as pd
pages = 18
rec_count = 0
rank = []
gname = []
platform = []
year = []
genre = []
publisher = []
sales_na = []
sales_eu = []
sales_jp = []
sales_ot = []
sales_gl = []
urlhead = 'http://www.vgchartz.com/gamedb/?page='
urltail = '&results=1000&name=&platform=&minSales=0.01&publisher=&genre=&sort=GL'
for page in range(1, pages):
surl = urlhead + str(page) + urltail
r = urllib.request.urlopen(surl).read()
soup = BeautifulSoup(r, features="lxml")
print(page)
chart = soup.find('div', id='generalBody').find('table')
for row in chart.find_all('tr')[3:]:
try:
col = row.find_all('td')
# extract data into column data
column_1 = col[0].string.strip()
column_2 = col[1].find('img')['alt'].strip()
column_3 = col[2].find('a').string.strip()
column_4 = col[3].find('img')['alt'].strip()
column_5 = col[4].string.strip()
column_6 = col[5].string.strip()
column_7 = col[6].string.strip()
column_8 = col[7].string.strip()
column_9 = col[8].string.strip()
column_10 = col[9].string.strip()
column_11 = col[10].string.strip()
# Add Data to columns
# Adding data only if able to read all of the columns
rank.append(column_1)
gname.append(column_2)
platform.append(column_3)
year.append(column_4)
genre.append(column_5)
publisher.append(column_6)
sales_na.append(column_7)
sales_eu.append(column_8)
sales_jp.append(column_9)
sales_ot.append(column_10)
sales_gl.append(column_11)
rec_count += 1
except:
print('Got Exception')
continue
columns = {'Rank': rank, 'Name': gname, 'Platform': platform, 'Year': year, 'Genre': genre, 'Publisher': publisher,
'NA_Sales': sales_na, 'EU_Sales': sales_eu, 'JP_Sales': sales_jp, 'Other_Sales': sales_ot,
'Global_Sales': sales_gl}
print (rec_count)
df = pd.DataFrame(columns)
print(df)
df = df[['Rank', 'Name', 'Platform', 'Year', 'Genre', 'Publisher', 'NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales',
'Global_Sales']]
del df.index.name
df.to_csv("vgsales.csv", sep=",", encoding='utf-8')
关于python - 查找刮板的html对象时遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52657865/