получение только заголовка веб-страницы в Python - PullRequest
3 голосов
/ 11 мая 2011

У меня есть более 5000 веб-страниц, я хочу названия всех из них.В моем проекте я использую html-парсер BeautifulSoup следующим образом.

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

Но это отнимает много времени.Просто для заголовка веб-страницы я читаю весь файл и создаю дерево разбора (я думал, что это причина задержки, поправьте меня, если я ошибаюсь).

Есть ли какой-либо другой простой способсделай это на питоне.

Ответы [ 4 ]

2 голосов
/ 11 мая 2011

Конечно, было бы быстрее, если бы вы просто использовали простое регулярное выражение, BeautifulSoup довольно медленно. Вы можете сделать что-то вроде:

import re
regex = re.compile('<title>(.*?)</title>', re.IGNORECASE|re.DOTALL)
regex.search(string_to_search).group(1)
1 голос
/ 11 мая 2011

Вы можете даже использовать простые строковые методы :

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]

Однако это только гарантирует, что <title> найден до </title> на странице. Не то чтобы это было в разделе <head> или что-то в этом роде.

Кроме того, вы должны подтвердить свое предположение, что на самом деле является разбором BeautifulSoup, который занимает львиную долю времени. (Я предполагаю, что open(url).read() для 5000 ресурсов тоже занимает довольно много времени. Это вы не устраните, независимо от того, как вы "анализируете" HTML.)

1 голос
/ 11 мая 2011

Вы всегда можете использовать для этого регулярное выражение, но оно может сломаться, если вы получите плохо отформатированную страницу.Это было бы что-то вроде этого:

import re
titleRE = re.compile("<title>(.+?)</title>")
title = titleRE.search(s).group(1)
0 голосов
/ 31 января 2017

Попробуйте

>> 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' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...