0

これは私のコードです:

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

画像を印刷する代わりに、画像がページソースのどこにあるかを教えてくれます。理由について何か理由はありますか?

4

2 に答える 2

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',


次に、URLごとに、画像をダウンロードして保存します。

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())

そしてあなたはあなたのロゴを持っています。

于 2012-06-25T19:03:34.993 に答える
0

BeautifulSoup のドキュメントによると、soup.findAll はタグまたは NavigableStrings のリストを返します。そのため、content() などの特定のメソッドを使用する必要があります。

この場合に必要なものを見つけるには、http: //www.crummy.com/software/BeautifulSoup/bs3/documentation.htmlの "Navigating the Parse Tree" サブタイトルにアクセスしてください。

于 2012-06-25T13:08:28.837 に答える