python - “int”对象不可下标(从网站抓取表格)

标签 python pandas beautifulsoup typeerror

我对编码非常陌生......大约一周前我刚刚学会了如何使用终端,如果这能让你知道我是多么n00bish。我需要学习如何从网站上抓取数据,因此我正在我熟悉的网站上进行练习,并且我正在尝试创建一个 csv 文件来显示此网址中的数据:http://phish.net/song 。我基本上修改了此网站的代码 ( https://chihacknight.org/blog/2014/11/26/an-intro-to-web-scraping-with-python.html ),并且我正在尝试使用它。

from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "http://phish.net/song?"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "lxml")
table = soup.find('table')
rows = table.find('tr')
data = {
'song': [],
'original_artist': [],
'times': [],
'debut': [],
'last': [],
'gap': []
}
for row in rows:
    cols = row.find('td')
    data['song'].append(cols[0].get_text()))
    data['original_artist'].append(cols[1].get_text())
    data['times'].append(cols[2].get_text())
    data['debut'].append(cols[3].get_text())
    data['last'].append(cols[4].get_text())
    data['gap'].append(cols[5].get_text())
phishData = pd.DataFrame(data)
phishData.to_csv("PhishData.csv")

我收到以下错误:

Traceback (most recent call last):
  File "phishnet.py", line 20, in <module>
    data['song'].append(str(cols[0].get_text()))
TypeError: 'int' object is not subscriptable

哪个对象是不可订阅的对象?我该如何解决这个问题?预先感谢您的帮助,请告诉我这是否不适合使用此论坛。

最佳答案

pd.read_html似乎做你想做的事。

df = pd.read_html("http://phish.net/song?")[0]

df.head()
          Song Name Original Artist                 Times       Debut  \
0      Alumni Blues           Phish                   107  1985-03-16   
1     And So To Bed           Phish  Found in Discography         NaN   
2  You Enjoy Myself           Phish                   581  1986-02-03   
3         AC/DC Bag           Phish                   310  1986-04-01   
4    F**k Your Face           Phish                    13  1987-04-29   

         Last   Gap  
0  2017-07-29  13.0  
1         NaN   NaN  
2  2017-12-31   0.0  
3  2017-12-28   3.0  
4  2017-08-05   8.0 

最后的 to_csv 调用 -

df.to_csv("PhishData.csv")

关于python - “int”对象不可下标(从网站抓取表格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180718/

相关文章:

python - 如何计算一列 Pandas 数据帧中的一组

python - 在启动 Raspberry Pi 时在前台运行脚本

python - 这是计算移动平均线的有效方法吗?

python - 如何使 x 和 y 轴标签的文本大小以及 matplotlib 和 prettyplotlib 图形上的标题更大

python - for 循环在 Python 中生成/导出输出的时间太长

python - 在 Google 翻译中使用 BeautifulSoup4

python - 没有名为 'tensorflow_probability' 的模块

BeautifulSoup 嵌套类选择器

python - Beautifulsoup 4 美化输出 XHTML,而不是 HTML

python - Pandas - 在数据框中添加一个标志列