2016-07-08 1 views
-3

私は特定の位置の特定のリンクから開始し、その後そのリンクを特定の回数だけ続けなければならないPythonクラスのこの割り当てを持っています。たぶん最初のリンクは、位置1 を持っている。これは、リンクです:http://python-data.dr-chuck.net/known_by_Fikret.htmlBeautifulsoupを使用したPython割り当てのリンクに続いて

traceback error picture 私はリンクを見つけるに問題があると、エラー「範囲外のインデックスは、」出てきます。誰もリンク/位置を見つける方法を理解するのに役立つことができますか?

import urllib 
from BeautifulSoup import * 

url = raw_input('Enter - ') 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
count = int(raw_input('Enter count: '))+1 
position = int(raw_input('Enter position: ')) 


tags = soup('a') 
tags_lst = list() 
for tag in tags: 
    needed_tag = tag.get('href', None) 
    tags_lst.append(needed_tag) 
    for i in range(0,count): 
     print 'retrieving: ',tags_lst[position] 

OK、私はこのコードを書き、それが一種の作品:これは私のコードです

import urllib 
from BeautifulSoup import * 

url = raw_input('Enter - ') 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
count = int(raw_input('Enter count: '))+1 
position = int(raw_input('Enter position: ')) 


tags = soup('a') 
tags_lst = list() 
for tag in tags: 
    needed_tag = tag.get('href', None) 
    tags_lst.append(needed_tag) 
for i in range(0,count):  
    print 'retrieving: ',tags_lst[position] 
    position = position + 1 
私はまだ私はリスト全体を印刷しかし例のもの以外のリンクを取得しています

私は知らないので、位置が一致するリンクの。非常に奇妙な。

+0

完全にあなたのトレースバックを表示し、可能な場合は、URLは何ですか?それは公開ですか? –

+0

私はbsを間違ってインポートしている説明 – mthe25

+0

を更新しました。 'bs4 import BeautifulSoup'から。カウント数はどういう意味ですか?と位置。あなたはポジションから次のカウントリンクを取ると言っていますか? –

答えて

0

あなたのBeautifulSoupインポートが間違っていました。私はそれがあなたが表示するコードで動作するとは思わない。また、あなたのより低いループは混乱していました。あなたは、完全に検索されたリストをスライスすることによって、あなたが望むURLのリストを得ることができます。

あなたのコードであなたのURLをハードコーディングしたのは、実行ごとに入力するよりも簡単だったからです。

はこれを試してみてください:この割り当てに

import urllib 
from bs4 import BeautifulSoup 

#url = raw_input('Enter - ') 
url = 'http://python-data.dr-chuck.net/known_by_Fikret.html' 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
# print soup 
count = int(raw_input('Enter count: '))+1 
position = int(raw_input('Enter position: ')) 


tags = soup('a') 
# next line gets count tags starting from position 
my_tags = tags[position: position+count] 
tags_lst = [] 
for tag in my_tags: 
    needed_tag = tag.get('href', None) 
    tags_lst.append(needed_tag) 
print tags_lst 
+0

これはあなたのためには機能しませんでしたか? –

0

ほとんどすべてのソリューションは、URLをロードするには、2つのセクションがあります。代わりに、私は任意のURLの関連リンクを表示する関数を定義しました。

最初、関数は入力としてFikret.html urlを使用します。後続の入力は、必要な位置に表示される更新されたURLに依存します。 重要なコード行は次のとおりです。url = allerretour(url)[position-1]これは、ループに別のラウンドを送る新しいURLを取得します。

import urllib 
from bs4 import BeautifulSoup 
url = 'http://py4e-data.dr-chuck.net/known_by_Fikret.html' # raw_input('Enter URL : ') 

position = 3 # int(raw_input('Enter position : ')) 
count = 4 #int(raw_input('Enter count : ')) 

def allerretour(url): 
    print('Retrieving: ' + url) 
    soup = BeautifulSoup(urllib.urlopen(url).read()) 
    link = list() 
    for tag in soup('a'): 
     link.append(tag.get('href', None)) 
    return(link) 


for x in range(1, count + 2): 
    url = allerretour(url)[position-1] 
1

[編集:切り取り+コメントからこの行を貼り付け]こんにちは!私は同様の練習で働かなければならなかったし、あなたの疑問を見つけたので疑問がありました。ここに私のコードがあり、私はそれが動作すると思います。私はこれが私の解決策である、それはあなたのための参考になる

import urllib 
from bs4 import BeautifulSoup 

url = 'http://py4e-data.dr-chuck.net/known_by_Fikret.html' 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html, 'html.parser') 
count = 8 
position = 18 
tags_lst = [] 

for x in xrange(count-1): 
    tags = soup('a') 
    my_tags = tags[position-1] 
    needed_tag = my_tags.get('href', None) 
    tags_lst.append(needed_tag) 
    url = str(needed_tag) 
    html = urllib.urlopen(url).read() 
    soup = BeautifulSoup(html, 'html.parser') 
+0

こんにちは! 私は同様の練習をしなければなりませんでした。私はあなたの質問を見つけました。ここに私のコードがあり、私はそれが動作すると思います。それがあなたに役立つことを願っています。 –

+0

この問題を解決する理由とその理由を説明し、長期的な価値を向上させるために、編集することを検討することができます。 –

0

を願っています:

import urllib.request, urllib.parse, urllib.error 
from bs4 import BeautifulSoup 
import ssl 

ctx = ssl.create_default_context() 
ctx.check_hostname = False 
ctx.verify_mode = ssl.CERT_NONE 

url = input('Enter: ') 
link_line = int(input("Enter position: ")) - 1 
relative to first link 
count = int(input("Enter count: ")) 

html = urllib.request.urlopen(url, context=ctx).read() 
soup = BeautifulSoup(html, 'html.parser') 

while count >= 0: 
    html = urllib.request.urlopen(url, context=ctx).read() 
    soup = BeautifulSoup(html, 'html.parser') 
    tags = soup('a') 
    print(url) 
    url = tags[link_line].get("href", None) 
    count = count - 1 
関連する問題