質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1043閲覧

[Python3] 検索した文字列からhtmlタグを取得

Yukiya025

総合スコア86

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2018/10/20 05:57

編集2018/10/20 10:58

検索して一致した文字列のhrefタグはどうやれば取得できるでしょうか。
re.search(r"privacy policy|プライバシーポリシー|個人情報", html1).start()

htmlタグからリンクを取得したことはあるのですが、
検索して見つかった文字列のタグをキーとしてhrefリンクを取得する方法がわかりません。

「個人情報」という文字列をキーとしてhrefリンクを取得する方法はあるでしょうか。

python

1 priv_htm = re.search(r"privacy policy|プライバシーポリシー|個人情報", html1).start() 2 if priv_htm != -1: 3 print(priv_htm) 4 print(re.search(r"privacy policy|プライバシーポリシー|個人情報", html1)) 5 print("hrefを取得します") 6 # ここにhrefを取得する処理を入れたい 7 else: print("ありませんでした")

html1の中身
以下のhref のリンクを取得したいです。

html

1<li> 2 <a href="/orj/privacypolicy.shtml"> 3 個人情報について 4 </a> 5</li> 6 7<!-- 8<a href="/orj/privacypolicy.shtml">までの位置関係↓ 9html > body#index.home > div#page > section#content > div#right > 10div.footer.clearfix > div.footer-item.footer-right > 11ul.footer-category.service > li > a 12-->

できました<3

jun68ykt様のアドバイスのおかげで解決しました。text = で指定できるとは(≧▽≦) ありがとうございますヽ(`▽´)/

python

1from bs4 import BeautifulSoup 2import requests 3import re 4""" 5privacy policyまたはプライバシーポリシー、個人情報がサイトにあるか。 6あればTrueなければFalse 7""" 8import warnings 9warnings.filterwarnings('ignore') 10 11def get_html(): 12 """ 13 - bs4, requestsが必要 14 スクレイピングするならこの関数を最初に使う 15 指定したURLのhtml文書を整列して.htmlに保存。 16 ページからタグを除去して全テキストを抽出。 17 用途: スクレイピングをするときにファイル構造を見る 18 """ 19 r = requests.get("https://www.oreilly.co.jp/index.shtml") 20 r.encoding = r.apparent_encoding 21 html_doc = r.text 22 soup = BeautifulSoup(html_doc) 23 24 html1 = open('Oreilly.html', 'w') 25 html1.write(soup.prettify()) 26 html1 = soup.prettify() 27 28 text1 = open('Oreilly.text', 'w') 29 text1.write(soup.get_text()) 30 text1 = soup.get_text() 31 32 """ 33 以下からは需要に応じてオプション 34 プライバシーポリシー系を探す 35 Privacy policy、プライバシーポリシー、個人情報 36 """ 37 38 pattern = r"privacy policy|個人情報|プライバシーポリシー" 39 40 with open('Oreilly.html') as f: 41 soup = BeautifulSoup(f.read(), 'lxml') 42 43 for link in soup.findAll('a', text=re.compile(pattern, re.IGNORECASE)): 44 print(link['href']) 45 46 47get_html()
jun68ykt👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

BeautifulSoupを使って、以下でどうでしょうか? (入力するHTML をtest.html、 Pythonスクリプトを main.py で作成しました)

(teratail) [jun68ykt@macmini q153175]$ date

2018年 10月20日 土曜日 19時07分03秒 JST
(teratail) [jun68ykt@macmini q153175]$ python3 -V
Python 3.7.0
(teratail) [jun68ykt@macmini q153175]$ pip3 list | grep beautifulsoup4
beautifulsoup4 4.6.3
(teratail) [jun68ykt@macmini q153175]$ cat test.html

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>q153175</title> 6</head> 7<body> 8 <ul> 9 <li> 10 <a href="/orj/top.shtml"> 11 トップページ 12 </a> 13 </li> 14 <li> 15 <a href="/orj/privacypolicy.shtml"> 16 個人情報について 17 </a> 18 </li> 19 <li> 20 <a href="/orj/aboutus.shtml"> 21 運営会社 22 </a> 23 </li> 24 </ul> 25 <div> 26 <a href="/orj/privacypolicy2.shtml"> 27 弊社のプライバシーポリシー 28 </a> 29 </div> 30 31 32 <a href="/orj/privacypolicy3.shtml"> 33 Our Privacy Policy Statement 34 </a> 35</body> 36</html>

[jun68ykt@macmini q153175]$ cat main.py

python

1from bs4 import BeautifulSoup 2import re 3 4pattern = r"privacy policy|個人情報|プライバシーポリシー" 5 6with open('./test.html') as f: 7 soup = BeautifulSoup(f.read(), 'lxml') 8 9 for link in soup.findAll('a', text=re.compile(pattern, re.IGNORECASE)): 10 print(link['href'])

(teratail) [jun68ykt@macmini q153175]$ python3 main.py

/orj/privacypolicy.shtml
/orj/privacypolicy2.shtml
/orj/privacypolicy3.shtml

なお、上記で作成した main.py と test.html は以下に上げておきました。

以上参考になれば幸いです。

投稿2018/10/20 10:11

編集2018/10/20 10:36
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yukiya025

2018/10/20 10:51

できました<3 ありがとうございます!
jun68ykt

2018/10/20 10:52

解決されたようですね、よかったです ????
jun68ykt

2018/10/20 11:15

拝見しました。頑張ってますね!★ お付けしておきました〜
Yukiya025

2018/10/20 11:27

ありがとうございます(≧▽≦)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問