我如何检索使用Python的网页的页面标题?
如何使用Python检索网页的页面标题(title html标签)?
我会一直使用lxml来完成这些任务。 你也可以使用美丽的 。
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文档的任何位置find第一个标题元素
-
title.string假定它只有一个子节点,并且该子节点是一个string
对于beautifulsoup 4.x ,使用不同的导入:
from bs4 import BeautifulSoup
机械化浏览器对象有一个title()方法。 所以这篇文章的代码可以改写为:
from mechanize import Browser br = Browser() br.open("http://www.google.com/") print br.title()
这对于这样一个简单的任务来说可能是过度的,但是如果你打算做的不仅仅是这些,那么从这些工具开始(机械化,BeautifulSoup)更好,因为它们比其他的更容易使用(urllib获取内容和regexen或者其他一些parsing器来parsinghtml)
链接: 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
无需导入其他库。 请求具有内置的此function。
>> 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'
使用正则expression式
import re match = re.search('<title>(.*?)</title>', raw_html) title = match.group(1) if match else 'No title'
soup.title.string
实际上返回一个Unicodestring。 要将其转换为普通string,您需要执行string=string.encode('ascii','ignore')