2017-12-11 5 views
0

私はbeautifulsoupを使用しています。imはタグ( 'a')でURLを取得しています。beautifulsoupで特定の行を取得し、再びループに挿入します

私の問題は、特定の行を取得する方法がわかりません。

私はユーザにある行positionと何回ループを実行させるべきかを入力させましたcountrepeat。これはコードで実装されます。私は(例えば、3日用)position行を取得するにはどうすればよい

  1. だから私は二つのことを把握傾けます。

  2. リンク

私のコードイムが使用していることを以下のように、どのように私は再びループにそのURLを実装してください:

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

# Ignore SSL certificate errors 
ctx = ssl.create_default_context() 
ctx.check_hostname = False 
ctx.verify_mode = ssl.CERT_NONE 

url = input('Enter - ') 
countrepeat = int(input("Enter repeat number:")) 
position = int(input("Enter start position:")) 

for i in range(countrepeat): 
    html = urllib.request.urlopen(url, context=ctx).read() 
    soup = BeautifulSoup(html, 'html.parser') 
    tags = soup('a') 
    print(tags.get('href')) 
    url = tags.get('href') 
+0

明確にしてください:あなたはスープの中で「位置」のhrefを取得しようとしていますか?あなたはそれがループの各反復のために 'url'を要求することを望みますか? – Galen

+0

はい、スープの位置hrefですが、最初にURLを尋ねるだけです。次に、hrefで見つかったリンクを自動的にたどるはずです。 私はurl = tags.get( 'href')を下に置いているので、変数urlで見つかったURLを置くと思いました。 – Erfan

+0

私はスープの位置hrefを次のように実装しようとしました:tags = soup( 'a'、[position])しかし、それは機能しません、私はトレースバックを取得します。 (countrepeat)の範囲内のiについて : – Erfan

答えて

0

を0、インデックスされpositionと仮定するとposition番目を取得するためにsoup.findAll('a')[position]を使用し、スープの中にアンカー。

アンカーのhrefを取得するには、soup.findAll('a')[position]['href']を使用します。

このhrefを次のリクエストに使用するには、アンカーからhrefへのループ内のurlを更新します。

+0

は、あなたの答えをありがとう、あなたが提案したものを試してみましたが、私はまだ「のhref」 コードと同じ行にトレースバックを得る HTML = urllib.request.urlopen( ( 'a')url = tags.findAll( 'a')['href']タグスープ( 'a') url = tags.findAll( 'a')['href' ] print(url) トレースバック: "ResultSetオブジェクトには属性 '%s'がありません。おそらく単一項目のような項目のリストを扱っています。find()を呼び出すときにfind_all()を呼び出しましたか? )? " % – Erfan

+0

キーが乱雑に見えますが、コメントにコードブロックを実装する方法を教えてください。 – Erfan

+0

申し訳ありませんが、私はあなたのコードを誤解しました。私は 'タグ'の代わりに 'スープ'を使うべきだった。私はそれに応じて私の答えを更新しました。 'tags = soup( 'a')'は意味をなさない。 – Galen

関連する問題