2009-01-20 7 views
15

मुझे एक HTML दस्तावेज़ में हर एक लिंक को संशोधित करने में सक्षम होना चाहिए। मुझे पता है कि मुझे SoupStrainer का उपयोग करने की आवश्यकता है, लेकिन मैं इसे कार्यान्वित करने के तरीके पर 100% सकारात्मक नहीं हूं। अगर कोई मुझे एक अच्छे संसाधन के लिए निर्देशित कर सकता है या कोड उदाहरण प्रदान कर सकता है, तो इसकी बहुत सराहना की जाएगी।सुंदर सूप - HTML के एक टुकड़े में सभी लिंक संशोधित?

धन्यवाद।

उत्तर

34

शायद ऐसा कुछ काम करेगा? (मैं मेरे सामने एक अजगर दुभाषिया नहीं है, दुर्भाग्य से)

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

बहुत बहुत धन्यवाद। कुछ समस्याएं थीं, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि आपके पास परीक्षण करने का मौका नहीं था। बहुत अच्छा काम करता है। :-) –

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) 

यह Lusid के समाधान है, लेकिन जब से वह उसके सामने एक अजगर दुभाषिया नहीं था, वह नहीं था इसका परीक्षण करने में सक्षम और इसमें कुछ त्रुटियां थीं। मैं सिर्फ काम करने की स्थिति पोस्ट करना चाहता था। धन्यवाद लुसीड!

+2

शायद आप क्रैपी-एचटीएमएल एज केस को देखना चाहते हैं जहां आपके द्वारा परीक्षण किए जाने वाले तत्व में कोई href नहीं है। –

+0

@Robert, हाँ आप सही हैं। मुझे ऐसा करना सुनिश्चित होगा। सर उठाने के लिए धन्यवाद। –

+0

@ ईवन, खुशी है कि मैं कम से कम वहां पहुंचने में आपकी सहायता करने में सक्षम था। मेरा पाइथन जंगली तरफ एक छोटा सा है। :) – Lusid

2

मैं इस कोशिश की और यह काम किया, यह प्रत्येक 'href' मिलान के लिए regexp का उपयोग कर से बचने के लिए आसान है:

, इसे देखें bs4 docs पर।