2017-01-10 29 views
2

サイトからのコンテンツを解析して、ノードからのテキストのみを出力しようとしています.text.strip()を使用していますが、正しく動作しません。BeautifulSoupタグなしのストライプテキストの抽出

マイコード:

import requests 
from bs4 import BeautifulSoup 

r = requests.get('http://examplesite.net') 
soup = BeautifulSoup(r.content, 'lxml') 


builddata = soup.find('table', {'id':'BuildData'}) 

table_elements = builddata.find_all('tr') 
for element in table_elements: 
    element_dict = {'element_name':element.findChildren()[0].text.strip(), 'element_value':element.findChildren()[1].text.strip()} 
    print(element_dict) 

結果:問題と

{'element_value': 'Студия;             1-к кв;             2-к кв;             3-к кв;             4-к кв', 
{'element_value': 'Квартира у воды,  \t\t  \t\tЗеленая зона', 'element_name': 'Особенности:'} 

ライン、必要があるように見えます:私が間違ってやっている

{'element_value': 'Студия; 1-к кв; 2-к кв; 3-к кв; 4-к кв', 
{'element_value': 'Квартира у воды, Зеленая зона', 'element_name': 'Особенности:'} 

?あなたはあなたの例でやるように見えるとして、次のような何かを行うことができ、一つだけのスペースで複数の空白文字を置き換えるために

>>> '  test  test   '.strip() 
'test  test' 

答えて

2

あなたはstrip=Trueget_text()を使用する必要があります。

for element in table_elements: 
    name, value = element.find_all("td")[:2] 

    element_dict = { 
     'element_name': name.get_text(strip=True), 
     'element_value': ' '.join(value.get_text(strip=True, separator=" ").split()) 
    } 
    print(element_dict) 

また、findChildren()の代わりにfind_all()を使用し、名前と値のペアにセルをアンパックすることで、上記のコードのセル値を読み取る方法に近づいてきました。

値の1つは "手動で"扱われるべきであることに注意してください。 - "Ценазакв。метр:"には複数のスペースがあります - replace them with a single oneです。

プリント:サイドノートとして

{'element_name': 'Район:', 'element_value': 'САО (МСК)'} 
{'element_name': 'Метро:', 'element_value': 'Речной Вокзал , Петровско-Разумовская'} 
{'element_name': 'До метро:', 'element_value': '5.9 км (18 мин на машине) (Посмотреть маршрут)'} 
{'element_name': 'Адрес:', 'element_value': 'Дмитровское шоссе, 107 (Посмотреть на карте)'} 
... 
{'element_name': 'Разрешение на строительство:', 'element_value': 'Есть'} 
{'element_name': 'Обновлено:', 'element_value': '19 Декабря 2016'} 
{'element_name': 'Особенности:', 'element_value': 'Квартира у воды , Зеленая зона'} 

、あなたがHTMLの解析中に多くの表形式のHTML構造を扱うことになります場合は、pandas.read_html()pandas.DataFrameオブジェクトにロードすると、より便利になるかどうかを確認BeautifulSoupでテーブルを手動で解析しようとするよりも、

+0

完璧ですが、このように1行が返されました。 - 118 017 - \ n 147 840 –

+0

@コンスタンチンルサノフ、videl、それを見て、感謝してください。 – alecxe

+0

@ ConstantinRusanovが答えて、それが助けて欲しい! – alecxe

0

strip()は末尾の空白を削除し

>>> ' '.join('abc     adsfdf    adsfsaf'.split()) 
'abc adsfdf adsfsaf' 
関連する問題