मैं एक मेल से एचटीएमएल डेटा निकालता हूं और इस डेटा को सुंदरसूप के साथ पार्स करता हूं। इसके बाद, मैं पार्स किए गए डेटा को सीएसवी फ़ाइल में दाएं शीर्षलेखों के अंतर्गत संग्रहीत करना चाहता हूं। हालाँकि, इनपुट डेटा का टेक्स्ट आउटपुट csv फ़ाइल में तदनुसार प्रदर्शित नहीं होता है।

Csv फ़ाइल के लिए पार्स किया गया इनपुट डेटा (fruits_html):

Apples                        43        0       0                   0<br/>
Bananas                     2282        0     500                   0<br/>
Grapes                      2534        0     500                   0<br/>
Oranges                      274        0       0                   0<br/>
--------------------------------------------------------------------------------------------------<br/>

स्क्रिप्ट:

# Parse raw messages to something readable
soup = BeautifulSoup(raw_email, 'html.parser')
fruits_html = soup.find_all('span')
headers = ["Names", "Quantity", "SpareQty", "MinQty", "MaxQty"]

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output, delimiter=',')
    csv_output.writerow(headers)
    for br in soup.find_all('span'):
        csv_output.writerow([fruits_html for br in br.find_all('br')])

वांछित आउटपुट:

मैं csv फ़ाइल में दाएँ शीर्षलेख के अंतर्गत सभी मात्राएँ संग्रहीत करना चाहता हूँ। दुर्भाग्य से, मेरा वर्तमान आउटपुट पहली पंक्ति में शीर्षलेख दिखाता है, और दूसरी पंक्ति में विभिन्न कक्षों में बड़ी संख्या में <br/>

1
Wizard 23 मार्च 2020, 17:41

1 उत्तर

सबसे बढ़िया उत्तर
import csv
from bs4 import BeautifulSoup
from bs4.element import NavigableString
data = '''
<html>
<span>

Apples                        43        0       0                   0<br/>
Bananas                     2282        0     500                   0<br/>
Grapes                      2534        0     500                   0<br/>
Oranges                      274        0       0                   0<br/>

</span>
</html>'''

soup = BeautifulSoup(data, 'html.parser')
#print(soup.find_all("span"))
headers = ["Names", "Quantity", "SpareQty", "MinQty", "MaxQty"]

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output, delimiter=',')
    csv_output.writerow(headers)
    for br in soup.find_all("span"):
        for item in br.contents:
            if type(item) is not NavigableString:
                continue
            csv_output.writerow(item.strip().split())

आउटपुट के साथ। सीएसवी

Names,Quantity,SpareQty,MinQty,MaxQty
Apples,43,0,0,0
Bananas,2282,0,500,0
Grapes,2534,0,500,0
Oranges,274,0,0,0
2
StefanMZ 23 मार्च 2020, 19:41