Forum: PC-Programmierung Python und Beautifullsoup


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sebastian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich mache gerade meine ersten Versuche.
1
name = askopenfilename(filetypes =(("Import File", "*.txt"),("All Files","*.*")),
2
                       title = ""
3
                       )
4
5
6
f = codecs.open(name, encoding='utf-8')
7
8
9
10
11
file_names = []
12
for file_name in f:
13
    file_name = file_name.strip()
14
    if ',' in file_name:
15
        for f in file_name.split(','):
16
            file_names.append(f)
17
    else:
18
        file_names.append(file_name)
19
20
21
workbook_overview = xlsxwriter.Workbook('overview.xlsx')
22
worksheet_overview = workbook_overview.add_worksheet("overview")
23
worksheet_overview.write('A1', 'url')
24
worksheet_overview.write('B1', 'titel')
25
26
27
count = 2
28
29
for file_name in file_names:
30
    #try:
31
    soup = BeautifulSoup(urlopen(file_name), "html.parser")
32
    title = soup.find('title')
33
    print (title)    
34
       
35
    worksheet_overview.write('A' + str(count), (file_name))
36
37
    worksheet_overview.write('B' + str(count), (title))
38
    count += 1
39
 
40
41
workbook_overview.close()

Hier bekomme ich allerdings die Fehlermeldung:

1
TypeError: float() argument must be a string or a number, not 'method_descriptor'
2
3
During handling of the above exception, another exception occurred:
4
5
Traceback (most recent call last):
6
  File "D:\testing.py", line 72, in <module>
7
    worksheet_overview.write('B' + str(count), (title2))


Was mache ich denn falsch?

von S R (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Vollständigen Code posten!

Woher soll ich wissen wo Zeile 72 ist?

von S R (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Imports gehören auch dazu.

Wem es nicht aufgefallen ist:

    worksheet_overview.write('B' + str(count), (title))

Und die Fehlermeldung bezieht sich auf:

    worksheet_overview.write('B' + str(count), (title2))

von Kaj G. (Firma: RUB) (bloody)


Bewertung
0 lesenswert
nicht lesenswert
S R schrieb:
> Und die Fehlermeldung bezieht sich auf:
Nein. Die erste Fehlermeldung sagt ganz klar:
1
TypeError: float() argument must be a string or a number, not 'method_descriptor'

Erst danach kommen die anderen Fehler:
1
During handling of the above exception, another exception occurred:

Irgendwo wird ein falsches Argument übergeben, was float() nicht wandeln 
kann. Dann gibt es eine Exception und das eine führt zum anderen.

Bitte poste den gesamten Code, sofern möglich. Alles andere ist 
Kaffesatzlesen.

von S R (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Das hab ich schon gesehen, wollte nur verdeutlichen dass es so schwierig 
wird ;)

von Kaj G. (Firma: RUB) (bloody)


Bewertung
0 lesenswert
nicht lesenswert
S R schrieb:
> Das hab ich schon gesehen, wollte nur verdeutlichen dass es so schwierig
> wird ;)
Ach so :D
Dann hab ich nichts gesagt ^.^

von Sebastian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke schonmal für die Antworten.


Bis auf die Imports war das der gesamte Code.
1
# coding: utf-8
2
3
4
import codecs
5
6
import xlsxwriter
7
8
from bs4 import BeautifulSoup 
9
10
from urllib.request import urlopen
11
12
from tkinter.filedialog import askopenfilename
13
14
 
15
        
16
17
      
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
      
28
29
30
name = askopenfilename(filetypes =(("Import File", "*.txt"),("All Files","*.*")),
31
                       title = ""
32
                       )
33
34
35
f = codecs.open(name, encoding='utf-8')
36
37
38
39
40
41
42
file_names = []
43
for file_name in f:
44
    file_name = file_name.strip()
45
    if ',' in file_name:
46
        for f in file_name.split(','):
47
            file_names.append(f)
48
    else:
49
        file_names.append(file_name)
50
51
52
        
53
workbook_overview = xlsxwriter.Workbook('overview.xlsx')
54
worksheet_overview = workbook_overview.add_worksheet("overview")
55
worksheet_overview.write('A1', 'url')
56
worksheet_overview.write('B1', 'titel')
57
58
59
count = 2
60
61
for file_name in file_names:
62
    
63
    soup = BeautifulSoup(urlopen(file_name), "html.parser")
64
    title = soup.find('title')
65
    print (title)    
66
67
68
69
       
70
    worksheet_overview.write('A' + str(count), (file_name))
71
72
    worksheet_overview.write('B' + str(count), (title))
73
    count += 1
74
75
 
76
77
78
79
  
80
81
workbook_overview.close()



Meine Vermutung ist, dass es an dieser Zeile liegt

title = soup.find('title')

: Bearbeitet durch Moderator
von Planlos (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Vermutung: "title" ist kein String, sondern ein HTML-Tag-Objekt. Schau 
in der Suppen-Dokumentation nach, wie du da das "innerHMTL" oder 
Text-Content herausbekommst.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir jetzt nicht alles angeschaut (habe nur die Formatierung
mal korrigiert), aber wenn du wirklich einmal 'titel' und einmal
'title' schreibst, scheint mir, dass genau dies dein Problem sein
könnte.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.