Проблемы с поиском HTML-объекта для скребка - PullRequest
0 голосов
/ 05 октября 2018

Привет. Я пытаюсь создать набор данных на веб-сайте.Я нашел набор данных на 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

Извините, забыл URL, который действительно помог бы> <<a href="http://www.vgchartz.com/gamedb/?page=18&results=1000&name=&platform=&minSales=0.01&publisher=&genre=&sort=GL" rel="nofollow noreferrer">http://www.vgchartz.com/gamedb/?page=18&results=1000&name=&platform=&minSales=0.01&publisher=&genre=&sort=GL

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Этот сайт явно запрещает списывать.Условия использования гласят:

'Несанкционированный доступ к нашим сайтам является нарушением настоящих Условий и нарушением закона.Вы соглашаетесь не получать доступ к нашим сайтам любыми способами, кроме как через интерфейс, предоставленный VGChartz Ltd для использования при доступе к нашим сайтам.Вы соглашаетесь не использовать какие-либо автоматизированные средства, включая, без ограничений, агентов, роботов, сценариев или пауков, для доступа, мониторинга или копирования любой части наших сайтов, кроме тех автоматизированных средств, которые мы одобрили заранее и письменно.'- http://www.vgchartz.com/terms-of-use.php

Вы спрашивали разрешения на удаление их данных?

0 голосов
/ 06 октября 2018

Я увидел ссылку, а затем, основываясь на последних 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...