3 Stimmen

Abrufen nur des Titels einer Webseite in Python

Ich habe mehr als 5000 Webseiten und möchte die Titel aller dieser Seiten. In meinem Projekt verwende ich den BeautifulSoup html-Parser wie folgt.

soup = BeautifulSoup(open(url).read())
soup('title')[0].string

Aber es braucht viel Zeit. Nur für den Titel einer Webseite lese ich die gesamte Datei und baue den Parse-Baum auf (ich dachte, dies ist der Grund für die Verzögerung, korrigieren Sie mich, wenn ich falsch liege).

Gibt es in jedem anderen einfachen Weg, dies in Python zu tun.

3voto

zeekay Punkte 49550

Es wäre sicherlich schneller, wenn Sie nur einen einfachen regulären Ausdruck verwenden würden, BeautifulSoup ist ziemlich langsam. Sie könnten etwas tun wie:

import re
regex = re.compile('<title>(.*?)</title>', re.IGNORECASE|re.DOTALL)
regex.search(string_to_search).group(1)

1voto

nonpolynomial237 Punkte 2019

Sie könnten dazu auch einen regulären Ausdruck verwenden, aber das könnte bei einer schlecht formatierten Seite scheitern. Das wäre dann so etwas wie das hier:

import re
titleRE = re.compile("<title>(.+?)</title>")
title = titleRE.search(s).group(1)

1voto

jensgram Punkte 29941

Sie können sogar die einfache String-Methoden :

html = '<html> lots of crap <title>Title</title> even more crap </html>'
start = html.find('<title>') + 7 # Add length of <title> tag
end = html.find('</title>', start)
title = html[start:end]

Dies garantiert jedoch nur, dass <title> gefunden wird, bevor </title> auf der Seite. Nicht, dass es in der <head> Abschnitt oder irgendetwas anderes.

Außerdem sollten Sie Ihre Annahme bestätigen, dass es tatsächlich est das BeautifulSoup-Parsing, das den größten Teil der Zeit in Anspruch nimmt. (Meine Vermutung ist, dass open(url).read() für 5.000 Ressourcen dauert auch eine ganze Weile. Dies werden Sie nicht beseitigen, egal wie Sie "parsen" den HTML-Code).

0voto

Rahul Chawla Punkte 958

Versuchen Sie

>> hearders = {'headers':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0'}
>>> n = requests.get('http://www.imdb.com/title/tt0108778/', headers=hearders)
>>> al = n.text
>>> al[al.find('<title>') + 7 : al.find('</title>')]
u'Friends (TV Series 1994\u20132004) - IMDb'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X