2009-01-20 30 views
15

Tôi cần có khả năng sửa đổi mọi liên kết trong một tài liệu HTML. Tôi biết rằng tôi cần phải sử dụng các SoupStrainer nhưng tôi không 100% tích cực về cách thực hiện nó. Nếu ai đó có thể hướng tôi đến một nguồn tài nguyên tốt hoặc cung cấp một ví dụ mã, nó sẽ được đánh giá rất nhiều.BeautifulSoup - sửa đổi tất cả các liên kết trong một đoạn mã HTML?

Cảm ơn.

Trả lời

34

Có thể một cái gì đó như thế này sẽ hoạt động? (Tôi không có một thông dịch Python trước mặt tôi, không may)

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup('<p>Blah blah blah <a href="http://google.com">Google</a></p>') 
for a in soup.findAll('a'): 
    a['href'] = a['href'].replace("google", "mysite") 

result = str(soup) 
+0

Cảm ơn rất nhiều. Có một vài vấn đề, nhưng tôi nghĩ đó là bởi vì bạn không có cơ hội để kiểm tra. Hoạt động tuyệt vời. :-) –

25
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup('<p>Blah blah blah <a href="http://google.com">Google</a></p>') 
for a in soup.findAll('a'): 
    a['href'] = a['href'].replace("google", "mysite") 
print str(soup) 

Đây là giải pháp Lusid, nhưng kể từ khi ông không có một thông dịch Python ở trước mặt ông, ông không có thể kiểm tra nó và nó có một vài lỗi. Tôi chỉ muốn đăng điều kiện làm việc. Cảm ơn Lusid!

+2

Bạn có thể muốn kiểm tra trường hợp cạnh crappy-HTML trong đó phần tử bạn đang thử nghiệm không có href. –

+0

@Robert, đúng vậy. Tôi chắc chắn sẽ làm như vậy. Cảm ơn cho những người đứng đầu lên. –

+0

@Evan, rất vui vì tôi có thể giúp bạn đạt được điều đó. Python của tôi là một chút chút về phía gỉ. :) – Lusid

2

Tôi cố gắng này và nó làm việc, thật dễ dàng để tránh sử dụng regexp cho phù hợp với từng 'href':

Kiểm tra nó ra, trên bs4 docs.

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