Как я могу получить заголовок страницы с помощью Python? - PullRequest
62 голосов
/ 09 сентября 2008

Как я могу получить заголовок страницы веб-страницы (тег заголовка html), используя Python?

Ответы [ 11 ]

78 голосов
/ 09 сентября 2008

Вот упрощенная версия ответа @ Винко Врсаловича :

import urllib2
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen("https://www.google.com"))
print soup.title.string

Примечание:

  • soup.title находит первый заголовок элемент в любом месте в HTML-документе

  • title.string предполагает, что он имеет только один дочерний узел, и этот дочерний узел является строкой

Для Beautifulsoup 4.x , используйте другой импорт:

from bs4 import BeautifulSoup
54 голосов
/ 09 сентября 2008

Я всегда буду использовать lxml для таких задач. Вы также можете использовать beautifulsoup .

import lxml.html
t = lxml.html.parse(url)
print t.find(".//title").text
12 голосов
/ 09 сентября 2008

Механизированный объект Browser имеет метод title (). Таким образом, код из этого поста можно переписать так:

from mechanize import Browser
br = Browser()
br.open("http://www.google.com/")
print br.title()
10 голосов
/ 09 сентября 2008

Вероятно, это излишне для такой простой задачи, но если вы планируете сделать больше, тогда разумнее начать с этих инструментов (mechanize, BeautifulSoup), потому что их гораздо проще использовать, чем альтернативы (urllib, чтобы получить content и regexen или какой-то другой парсер для разбора html)

Ссылки: BeautifulSoup механизировать

#!/usr/bin/env python
#coding:utf-8

from BeautifulSoup import BeautifulSoup
from mechanize import Browser

#This retrieves the webpage content
br = Browser()
res = br.open("https://www.google.com/")
data = res.get_data() 

#This parses the content
soup = BeautifulSoup(data)
title = soup.find('title')

#This outputs the content :)
print title.renderContents()
5 голосов
/ 15 апреля 2016

Использование HTMLParser :

from urllib.request import urlopen
from html.parser import HTMLParser


class TitleParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.match = False
        self.title = ''

    def handle_starttag(self, tag, attributes):
        self.match = True if tag == 'title' else False

    def handle_data(self, data):
        if self.match:
            self.title = data
            self.match = False

url = "http://example.com/"
html_string = str(urlopen(url).read())

parser = TitleParser()
parser.feed(html_string)
print(parser.title)  # prints: Example Domain
4 голосов
/ 22 июня 2017

Использование регулярных выражений

import re
match = re.search('<title>(.*?)</title>', raw_html)
title = match.group(1) if match else 'No title'
4 голосов
/ 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' 
1 голос
/ 15 июня 2013

soup.title.string фактически возвращает строку Unicode. Чтобы преобразовать это в обычную строку, вам нужно сделать string=string.encode('ascii','ignore')

0 голосов
/ 02 июня 2019

Используйте soup.select_one для назначения тега заголовка

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('url')
soup = bs(r.content, 'lxml')
print(soup.select_one('title').text)
0 голосов
/ 03 мая 2019

Использование lxml ...

Получение мета-тега со страницы согласно протоколу opengraph Facebook:

import lxml.html.parse
html_doc = lxml.html.parse(some_url)

t = html_doc.xpath('//meta[@property="og:title"]/@content')[0]

или использование .xpath с lxml:

t = html_doc.xpath(".//title")[0].text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...