2013-04-20 24 views
9

Tôi đang sử dụng BeautifulSoup để phân tích cú pháp một số nội dung từ trang html.Đề xuất về get_text() tại BeautifulSoup

Tôi có thể trích xuất từ ​​html nội dung tôi muốn (ví dụ: văn bản có trong một số span được xác định bởi class myclass).

result = mycontent.find(attrs={'class':'myclass'}) 

tôi có được kết quả này:

<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span> 

Nếu tôi cố gắng để trích xuất các văn bản sử dụng:

result.get_text() 

tôi có được:

Lorem ipsumdolor sit amet,consectetur... 

Như bạn có thể nhìn thấy khi thẻ <br> bị xóa ở đó không có khoảng trống giữa nội dung và hai từ được concated.

Tôi làm cách nào để giải quyết vấn đề này?

+0

Sử dụng 'nội dung', sau đó thay thế
? – Floris

+0

bạn có thể đặt điều này vào một ví dụ để tôi có thể chấp nhận câu trả lời không? cảm ơn – user601836

+0

Trên iPhone ngay bây giờ. Cần phải đến gần một máy tính để tạo mã thử nghiệm. Tôi hy vọng người khác sẽ tạo ví dụ cho bạn trong thời gian chờ đợi. – Floris

Trả lời

20

Nếu bạn đang sử dụng BS4 bạn có thể sử dụng strings:

" ".join(result.strings) 
+5

Hoặc sử dụng trình tách kwarg, điều tương tự bên trong get_text: result.get_text ('separator =' "") -> 'Lorem ipsum dolor sit amet, consectetur ...' – Leo

10

Sử dụng 'nội dung', sau đó thay thế <br>?

Đây là một đầy đủ (làm việc, kiểm tra) ví dụ:

from bs4 import BeautifulSoup 
import urllib2 

url="http://www.floris.us/SO/bstest.html" 
page=urllib2.urlopen(url) 
soup = BeautifulSoup(page.read()) 

result = soup.find(attrs={'class':'myclass'}) 
print "The result of soup.find:" 
print result 

print "\nresult.contents:" 
print result.contents 
print "\nresult.get_text():" 
print result.get_text() 
for r in result: 
    if (r.string is None): 
    r.string = ' ' 

print "\nAfter replacing all the 'None' with ' ':" 
print result.get_text() 

Kết quả:

The result of soup.find: 
<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span> 

result.contents: 
[u'Lorem ipsum', <br/>, u'dolor sit amet,', <br/>, u'consectetur...'] 

result.get_text(): 
Lorem ipsumdolor sit amet,consectetur... 

After replacing all the 'None' with ' ': 
Lorem ipsum dolor sit amet, consectetur... 

Đây là phức tạp hơn so với giải pháp rất nhỏ gọn của Sean - nhưng kể từ khi tôi đã nói rằng tôi sẽ tạo ra và kiểm tra một giải pháp dọc theo những dòng tôi đã chỉ ra khi có thể, tôi quyết định làm theo lời hứa của mình. Bạn có thể thấy tốt hơn một chút về những gì đang xảy ra ở đây - <br/> là phần tử riêng của nó trong bộ tóan result.contents, nhưng khi được chuyển đổi thành chuỗi có "không có gì còn lại".

Các vấn đề liên quan