2017-10-05 7 views
-3

私はbeautifulsoupを使用してすべてのリンクを配列 "get_link"に追加しています。 get_linkのPythonで文字列を取り除く方法は?

get_link = [] 
for a in soup.find_all('a', href=True): 
    if a.get_text(strip=True): 
    get_link .append(a['href']) 

出力:次の出力を取得する方法を

['index.html?country=2', 
'index.html?country=25', 
'index.html?country=1', 
'index.html?country=6', 
'index.html?country=2'] 

[country=2', 
country=25', 
country=1', 
country=6', 
country=2'] 
+0

私はあなたの尋ねることを理解していません。あなたのタイトルは、あなたが示したコードとほとんどまたはまったく関係がありません。あなたの 'index.html?country = ...'文字列の 'country = ...'部分をどうやって取得するかを考えようとしていますか?それは 'str.index'とスライスでは簡単だと思われますが、実際にあなたが尋ねていることがすべてわからないときに答えを書くつもりです。 – Blckknght

+0

@Blckknght私の英語は良くないので、私はそれをうまく説明できませんでした。私は配列の必要なテキストだけを保つことができるように配列の右、左の関数を使用する方法はありますか? –

+0

私は残念ながら、私はまだあなたが "右、左の関数"を意味するか分かりません。すべてのリンクが同じ種類のものであれば(それらは常に 'index.html? 'で始まり、それをカットしたいものです)、' get_link.append(a [' href '] [11:]) '[11:]'は最初の11文字を切り捨てるスライスです。リンクが異なって見える場合は、より洗練されたロジックが必要になることがあります。 – Blckknght

答えて

1

非空のテキスト値とhref属性を持つすべてのaタグ(リンク)を取得するために最適化されたアプローチ:

links = [l.get('href').replace('index.html?','') 
     for l in soup.find_all('a', href=True, string=True) if l.text.strip()] 
print(links) 
+0

はい、これは「index.html」を削除する別の方法です。ありがとう! –

+0

@ RajuSingh、どうぞよろしくお願いします。 – RomanPerekhrest

0

一部がすでにあるのみ「=国」を得るために多くの方法があります。 BS4しかし、あなたは正規表現を使用することができますしたい場合:

import re 
ui=['index.html?country=2', 
'index.html?country=25', 
'index.html?country=1', 
'index.html?country=6', 
'index.html?country=2'] 





pattern=r'(country=[0-9]{0,99})' 



print("\n".join([re.search(pattern,i).group() for i in ui])) 

結果:

country=2 
country=25 
country=1 
country=6 
country=2 
関連する問題