我正试图从ESPN的网站上搜集大学橄榄球新兵数据。我已经弄清楚如何刮掉我需要的所有TD标签,但是我的输出会不断地将标签及其中的所有内容与它们附带的实际文本一起返回。
我在网站上经历了一个小时的问题,我明白.text或.string应该解决这个问题,但似乎都没有起作用。我可能把它们放在错误的地方。
以下是我正在运行的代码:
from bs4 import BeautifulSoup
from urllib2 import urlopen
f = open("17athletes.txt", 'w')
sock = urlopen("http://espn.go.com/college-sports/football/recruiting/playerrankings/_/position/athlete/class/2017/view/position")
html = sock.read()
sock.close()
soup = BeautifulSoup (html, "lxml")
for tr in soup.findAll("tr"):
tds = str(tr.find_all("td"))
f.write(tds)
f.close()
这只是它回归的一小部分:
<td width="3%">RK</td>, <td width="25%">PLAYER</td>, <td width="6%">POS</td>
我想知道问题是否是我在代码中放置str()
的问题?或者我想知道,因为ESPN是如此复杂的网站,我可能还需要做其他事情。我对这一切都很陌生,但我正在努力学习正确的方法。如果有帮助,使用BeautifulSoup 2.4和Python 2.7。提前谢谢!
答案 0 :(得分:1)
你应该遍历你找到的所有td
。您的代码应如下所示
for tr in soup.find_all("tr"):
for td in tr.find_all("td")
f.write(td.text)