Pandas DataFrames KeyError: 0 - PullRequest
       8

Pandas DataFrames KeyError: 0

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

Я просто пытаюсь вытащить первый столбец URL из таблицы с этого сайта.И я продолжаю сталкиваться с KeyError: 0. Я только начинаю изучать Python.

Traceback (most recent call last):
  File "riscribble.py", line 13, in <module>
    lic_link = soup_data[0].find('a').text
  File "C:\Users\rkrouse\Desktop\Python\lib\site-packages\bs4\element.py", line 1071, in __getitem__
    return self.attrs[key]
KeyError: 0

Будем благодарны за любые идеи о том, почему я получаю эту ошибку и / или как ее исправить.

from bs4 import BeautifulSoup as soup
import requests as r
import pandas as pd

url = 'http://www.crb.state.ri.us/verify_CRB.php?page=0&letter='

data = r.get(url)

page_data = soup(data.text, 'html.parser')

soup_data = page_data.find('table')

lic_link = soup_data[0].find('a').text

df = pd.DataFrame()

for each in soup_data:
    lic_link = each.find('a').text

    df=df.append(pd.DataFrame({'LicenseURL': lic_link}, index=[0]))

df.to_csv('RI_License_urls.csv', index=False)

Ответы [ 2 ]

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

Импорт:

from bs4 import BeautifulSoup as soup
import requests as r
import pandas as pd
import re

Получить страницу:

url = 'http://www.crb.state.ri.us/verify_CRB.php?page=0&letter='

data = r.get(url)

page_data = soup(data.text, 'html.parser')

Выберите ссылку:

links = [link.text for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

links -> 32922

# or

links = [link for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

links -> <a href="licensedetail.php?link=32922&amp;type=Resid">32922</a>

# or

links = [link['href'] for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

links -> licensedetail.php?link=32922&type=Resid

# or

links = [r'www.crb.state.ri.us/' + link['href'] for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

links -> www.crb.state.ri.us/licensedetail.php?link=32922&type=Resid

Отделка:

df = pd.DataFrame(links, columns=['LicenseURL'])

df.to_csv('RI_License_urls.csv', index=False)

Пожалуйста, не забудьте поставить чек рядом с решением.

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

Измените soup_data = page_data.find('table') на soup_data = page_data.find_all('table').find находит только первый соответствующий объект, тогда как find_all находит все соответствующие объекты.См. здесь для получения дополнительной информации.

from bs4 import BeautifulSoup as soup
import requests as r
import pandas as pd

url = 'http://www.crb.state.ri.us/verify_CRB.php?page=0&letter='

data = r.get(url)

page_data = soup(data.text, 'html.parser')

soup_data = page_data.find_all('table')

df = pd.DataFrame()

for each in soup_data:
    lic_link = each.find('a').text

    df=df.append(pd.DataFrame({'LicenseURL': lic_link}, index=[0]))

df.to_csv('RI_License_urls.csv', index=False)
...