web-dev-qa-db-ja.com

リクエストでページタイトルを取得する方法

リクエストでページのタイトルを取得する最も簡単な方法は何でしょうか?

r = requests.get('http://www.imdb.com/title/tt0108778/')
# ? r.title
Friends (TV Series 1994–2004) - IMDb
8
David542

HTML応答を解析し、titleタグのテキストを取得するには、HTMLパーサーが必要です。

lxml.html の使用例:

>>> import requests
>>> from lxml.html import fromstring
>>> r = requests.get('http://www.imdb.com/title/tt0108778/')
>>> tree = fromstring(r.content)
>>> tree.findtext('.//title')
u'Friends (TV Series 1994\u20132004) - IMDb'

たとえば、 mechanize ライブラリのような他のオプションも確かにあります。

>>> import mechanize
>>> br = mechanize.Browser()
>>> br.open('http://www.imdb.com/title/tt0108778/')
>>> br.title()
'Friends (TV Series 1994\xe2\x80\x932004) - IMDb'

どのオプションを選択するかは、次に何をするかによって異なります。ページを解析してより多くのデータを取得するか、ページを操作したい場合があります。ボタンをクリックする、フォームを送信する、リンクをたどるなどです。

さらに、HTML解析に進む代わりに、IMDBによって提供されるAPIを使用することもできます。以下を参照してください。

IMDbPYパッケージの使用例:

>>> from imdb import IMDb
>>> ia = IMDb()
>>> movie = ia.get_movie('0108778')
>>> movie['title']
u'Friends'
>>> movie['series years']
u'1994-2004'
17
alecxe

Beautifulsoupを使用してHTMLを解析できます。

pip install beautifulsoup4を使用してインストールします

>>> import requests
>>> r = requests.get('http://www.imdb.com/title/tt0108778/')
>>> import bs4
>>> html = bs4.BeautifulSoup(r.text)
>>> html.title
<title>Friends (TV Series 1994–2004) - IMDb</title>
>>> html.title.text
u'Friends (TV Series 1994\u20132004) - IMDb'
7
Greg

他のライブラリをインポートする必要はありません。 Requestには、この機能が組み込まれています。

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

更新後 ZN13's コメント

>>> import re
>>> import requests
>>> n = requests.get('https://www.libsdl.org/release/SDL-1.2.15/docs/html/guideinputkeyboard.html')
>>> al = n.text
>>> d = re.search('<\W*title\W*(*)</title', al, re.IGNORECASE)
>>> d.group(1)
u'Handling the Keyboard'

これは、アルファベット以外の余分な文字がタイトルタグとともに存在するかどうかに関係なく、すべての場合に機能します。

4
Rahul Chawla

人間のためのPythonicHTML解析。

from requests_html import HTMLSession

print(HTMLSession().get('http://www.imdb.com/title/tt0108778/').html.find('title', first=True).text)
1
井上智文

後読みと前向きの正規表現:

re.search('(?<=<title>).+?(?=</title>)', mytext, re.DOTALL).group().strip()

re.DOTALLタイトルに改行文字を含めることができるため\n

0