这是我的代码:
import urllib2
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib2.urlopen('http://www.cbssports.com/nba/draft/mock-draft').read())
rows = soup.findAll("table", attrs = {'class': 'data borderTop'})[0].tbody.findAll("tr")[2:]
for row in rows:
fields = row.findAll("td")
if len(fields) >= 3:
anchor = row.findAll("td")[1].find("a")
if anchor:
print anchor
它不是打印出图像,而是给出了图像在页面源中的位置。有什么理由为什么?
答案 0 :(得分:0)
根据BeautifulSoup文档,soup.findAll返回标签列表或NavigableStrings。 所以你必须使用特定的方法,如content()。
在“导航解析树”字幕中访问http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html,找到您需要的内容。
答案 1 :(得分:0)
看起来你想要团队徽标缩略图?
import urllib2
import BeautifulSoup
url = 'http://www.cbssports.com/nba/draft/mock-draft'
txt = urllib2.urlopen(url).read()
bs = BeautifulSoup.BeautifulSoup(txt)
# get the main table
t = bs.findAll('table', attrs={'class': 'data borderTop'})[0]
# get the thumbnail urls
imgs = [im["src"] for im in t.findAll('img')] if "logos" in im["src"]]
imgs
现在看起来像
[[u'http://sports.cbsimg.net/images/nba/logos/30x30/NO.png',
u'http://sports.cbsimg.net/images/nba/logos/30x30/CHA.png',
u'http://sports.cbsimg.net/images/nba/logos/30x30/WAS.png',
u'http://sports.cbsimg.net/images/nba/logos/30x30/CLE.png',
等。这些是每个徽标的文件位置,这是所有HTML实际包含的内容;如果你想要实际的图片,你必须分别得到每一张。
该列表包含对每个徽标的重复引用;删除重复项的最快方法是
imgs = list(set(imgs))
或者,该列表不包括每个团队;如果你有一个完整的团队名称收缩列表,你可以直接建立logo-url列表。
此外,在查看网站时,每个30x30徽标都有一个相应的90x90徽标,您可能更喜欢它 - 更大更清晰。如果是的话,
imgs = [im.replace('30x30', '90x90') for im in imgs]
imgs
现在看起来像
[u'http://sports.cbsimg.net/images/nba/logos/90x90/BOS.png',
u'http://sports.cbsimg.net/images/nba/logos/90x90/CHA.png',
u'http://sports.cbsimg.net/images/nba/logos/90x90/CLE.png',
u'http://sports.cbsimg.net/images/nba/logos/90x90/DAL.png',
等
现在,对于每个网址,我们下载图片并保存:
import os
savedir = 'c:\\my documents\\logos' # assumes this dir actually exists!
for im in imgs:
fname = im.rsplit('/', 1)[1]
fname = os.path.join(savedir, fname)
with open(fname, 'wb') as outf:
outf.write(urllib2.urlopen(im).read())
你有你的标志。