पहले मामले में, previous sibling मिलती है: मुझे लगता है कि यह है कि यह है कि यहाँ जानबूझकर है आप
soup.select_one('#name > #numbers').next_sibling
नोट:
soup.select_one('#name > span.numbers').previous_sibling
दूसरे मामले में, मिल next siblingnumbers
को id
मान के रूप में रखें और span
के बजाय टैग div
है। इसलिए, मैंने सीएसएस चयनकर्ता को समायोजित किया है।
दोनों ही मामलों को कवर करने के लिए, आपको टैग के माता-पिता के पास जाकर एक गैर पुनरावर्ती मोड में गैर खाली पाठ नोड पा सकते हैं:
parent = soup.select_one('#name > .numbers,#numbers').parent
print(parent.find(text=lambda text: text and text.strip(), recursive=False).strip())
नोट चयनकर्ता में परिवर्तन - हम numbers
आईडी या numbers
कक्षा से मेल खाने के लिए कह रहे हैं।
हालांकि, मुझे एहसास है कि यह सार्वभौमिक समाधान काफी विश्वसनीय नहीं होगा क्योंकि शुरुआत करने वालों के लिए, मुझे नहीं पता कि आपके असली इनपुट क्या हो सकते हैं।
हां, आईडी और div बनाम अवधि में परिवर्तन जानबूझकर था। ध्यान देने के लिए धन्यवाद! क्या आपके पिछले समाधान में माता-पिता से शुरू करने का कोई तरीका है और फिर # 1 के मामले में पहले बच्चे के लिए या दूसरे बच्चे के लिए # 2 के मामले में सीधे चयन करें? मैं खोजने या खोजने का उपयोग करने से बचने की कोशिश कर रहा हूं। – slaw
@ एसएलए हाँ, निश्चित रूप से, आप केवल 'सामग्री' सूची का उपयोग कर सकते हैं: 'tag.contents [0] 'या' tag.contents [1] '। या, 'tag.children' जनरेटर के माध्यम से जाओ। – alecxe