development

Python을 사용하여 웹 페이지의 페이지 제목을 검색하려면 어떻게해야합니까?

big-blog 2020. 11. 6. 21:03
반응형

Python을 사용하여 웹 페이지의 페이지 제목을 검색하려면 어떻게해야합니까?


Python을 사용하여 웹 페이지의 페이지 제목 (title html 태그)을 검색하려면 어떻게해야합니까?


이러한 작업에는 항상 lxml사용 합니다. Beautifulsoup사용할 수 있습니다 .

import lxml.html
t = lxml.html.parse(url)
print t.find(".//title").text

@Vinko Vrsalovic의 대답의 단순화 된 버전은 다음과 같습니다 .

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

mechanize Browser 객체에는 title () 메서드가 있습니다. 따라서이 게시물 의 코드는 다음 과 같이 다시 작성할 수 있습니다.

from mechanize import Browser
br = Browser()
br.open("http://www.google.com/")
print br.title()

이것은 아마도 그러한 간단한 작업에는 과잉 일 것입니다. 그러나 그 이상을 수행 할 계획이라면 이러한 도구 (mechanize, BeautifulSoup)에서 시작하는 것이 더 합리적입니다. 대체 도구 (내용 및 정규식을 얻기위한 urllib)보다 훨씬 사용하기 쉽기 때문입니다. 또는 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()

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

다른 라이브러리를 가져올 필요가 없습니다. 요청에는이 기능이 내장되어 있습니다.

>> 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' 

정규식 사용

import re
match = re.search('<title>(.*?)</title>', raw_html)
title = match.group(1) if match else 'No title'

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)

soup.title.string실제로 유니 코드 문자열을 반환합니다. 이를 일반 문자열로 변환하려면 다음을 수행해야합니다.string=string.encode('ascii','ignore')


Here is a fault tolerant HTMLParser implementation.
You can throw pretty much anything at get_title() without it breaking, If anything unexpected happens get_title() will return None.
When Parser() downloads the page it encodes it to ASCII regardless of the charset used in the page ignoring any errors. It would be trivial to change to_ascii() to convert the data into UTF-8 or any other encoding. Just add an encoding argument and rename the function to something like to_encoding().
By default HTMLParser() will break on broken html, it will even break on trivial things like mismatched tags. To prevent this behavior I replaced HTMLParser()'s error method with a function that will ignore the errors.

#-*-coding:utf8;-*-
#qpy:3
#qpy:console

''' 
Extract the title from a web page using
the standard lib.
'''

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

def error_callback(*_, **__):
    pass

def is_string(data):
    return isinstance(data, str)

def is_bytes(data):
    return isinstance(data, bytes)

def to_ascii(data):
    if is_string(data):
        data = data.encode('ascii', errors='ignore')
    elif is_bytes(data):
        data = data.decode('ascii', errors='ignore')
    else:
        data = str(data).encode('ascii', errors='ignore')
    return data


class Parser(HTMLParser):
    def __init__(self, url):
        self.title = None
        self.rec = False
        HTMLParser.__init__(self)
        try:
            self.feed(to_ascii(urlopen(url).read()))
        except urllib.error.HTTPError:
            return
        except urllib.error.URLError:
            return
        except ValueError:
            return

        self.rec = False
        self.error = error_callback

    def handle_starttag(self, tag, attrs):
        if tag == 'title':
            self.rec = True

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

    def handle_endtag(self, tag):
        if tag == 'title':
            self.rec = False


def get_title(url):
    return Parser(url).title

print(get_title('http://www.google.com'))

Using lxml...

Getting it from page meta tagged according to the Facebook opengraph protocol:

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

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

or using .xpath with lxml:

t = html_doc.xpath(".//title")[0].text

참고URL : https://stackoverflow.com/questions/51233/how-can-i-retrieve-the-page-title-of-a-webpage-using-python

반응형