2017-06-06 4 views
2

HTMLから電話番号と電子メールを取り出す必要があります。すべてのHTMLデータを取得するmailto:とtel:in BS4 Python decompose()

データを取得できます。

description_source = soup.select('a[href^="mailto:"]'), 
        soup.select('a[href^="tel:"]') 

しかし、私はそれを望んでいません。私は私が

SoupStrainer

を使用してについて考えている

TypeError: decompose() takes 1 positional argument but 2 were given

このエラーを取得しますが、私はしなければならないように見える

decompose

description_source = soup.decompose('a[href^="mailto:"]') 

を使用しようとしています

mailtoとte以外のすべてを含めるlは正しい情報を取得するために...このビットの

完全な現在のコードは、この

import requests 
from bs4 import BeautifulSoup as bs4 

item_number = '122124438749' 

ebay_url = "http://vi.vipr.ebaydesc.com/ws/eBayISAPI.dll?ViewItemDescV4&item=" + item_number 
r = requests.get(ebay_url) 
html_bytes = r.text 
soup = bs4(html_bytes, 'html.parser') 

description_source = soup.decompose('a[href^="mailto:"]') 
#description_source. 

print(description_source) 
+0

完全なコードを投稿してください。 –

答えて

1

find_all()を使用してみてくださいです。そのページのすべてのリンクを見つけて、どのページに電話番号と電子メールが含まれているかを確認します。次に、extract().

を使用して削除します。高速処理にはlxmlパーサーを使用します。また、公式のドキュメントで使用することをお勧めします。

import requests 
from bs4 import BeautifulSoup 

item_number = '122124438749' 

ebay_url = "http://vi.vipr.ebaydesc.com/ws/eBayISAPI.dll?ViewItemDescV4&item=" + item_number 
r = requests.get(ebay_url) 
html_bytes = r.text 
soup = BeautifulSoup(html_bytes, 'lxml') 

links = soup.find_all('a') 
email = '' 
phone = '' 

for link in links: 
    if(link.get('href').find('tel:') > -1): 
     link.extract() 

    elif(link.get('href').find('mailto:') > -1): 
     link.extract() 

print(soup.prettify()) 

かわりextract()のもdecompose()を使用することができます。

+0

ちょっと、あまりにも些細なスクリプトがありましたが、私は楽しく遊んでいました。 これは削除したいデータを返します。 私はすべてのtel:とmailto:HTMLを削除したいと思います。 HTML全体をダウンロードする必要があります。なしで保存し、tel: – johnashu

+1

と同じように保存してください。それを編集する時間を与えてください。 –

+0

alos私のパーサをXMLに変更しました! – johnashu

関連する問題