Beautiful Soupの使い方ノート

簡単にHTMLを解析できるライブラリBeautiful Soupの使い方のノートです。

    find

    基本

    Webページを取得してテキストファイルに書き込む。

                                        
                                            import requests
    
                                            url = "https://アドレス"
                                            htmlpage = requests.get(url)  # Webページの取得
                                            htmlpage.encoding = htmlpage.apparent_encoding  # 文字化け回避
    
                                            filename = "ファイル名.txt"
                                            with open(filename, mode="w") as f:  # ファイルを書き込みモードで開く
                                                f.write(htmlpage.text)  # 取得したデータを書き込む
                                        
                                    
    タグ・id・classで検索

    Webページを取得してBeautiful Soupを使って解析し、findで検索する。

                                        
                                            import requests
                                            from bs4 import BeautifulSoup
    
                                            url = "https://アドレス.html"
                                            htmlpage = requests.get(url)  # Webページの取得
                                            soup = BeautifulSoup(htmlpage.content, "html.parser")  # htmlを解析する
    
                                            # 最初のh2タグの中の文字列を表示する
                                            print(soup.find("h2").text)  
    
                                            # 全てのliタグを検索して文字列を表示する
                                            for element in soup.find_all("li"):
                                                print(element.text)
                                            
                                            # idで検索する
                                            soup.find(id="id名")
    
                                            # classで検索する
                                            soup.find(class_="class名")  # classはPythonの予約語なのでclass_と書く
    
                                            # タグとclass属性で検索する
                                            soup.find("タグ名", class_="class名")
                                        
                                    
    属性を取り出す

    findで検索して属性を取り出す。

                                        
                                            import requests
                                            from bs4 import BeautifulSoup
                                            import urllib
    
                                            load_url = "https://アドレス.html"
                                            htmlpage = requests.get(load_url)  # Webページの取得
                                            soup = BeautifulSoup(htmlpage.content, "html.parser")  # htmlを解析する
    
                                            # h2タグの中の文字列を取り出して表示する
                                            print(soup.find("h2").text)  
    
                                            # aタグを全て検索してhref属性を取り出す
                                            for element in soup.find_all("a"):  # 全てのaタグを検索
                                                url = element.get("href")  # href属性を取り出す(相対的URL)
                                                url_z = urllib.parse.urljoin(load_url, url)  # 絶対URL
                                                print(url_z)
                                        
                                    
    画像ファイルの取得(画像のアドレス固定)

    画像のURLからファイルを取り出す。

                                        
                                            import requests
                                            from pathlib import Path
    
                                            folderpath = Path("download")
                                            folderpath.mkdir(exist_ok=True)  # フォルダを作成
    
                                            img_url = "https://アドレス.png"
                                            imgdata = requests.get(img_url)
    
                                            # 画像のファイル名を取り出す
                                            imgname = img_url.split("/")[-1]  # アドレスの一番最後
                                            out_path = folderpath.joinpath(imgname)  # アドレスをフォルダ名と連結する
    
                                            # 画像データをファイルに書き出す
                                            with open(out_path, mode="wb") as f:  # バイナリー書き込みモードで開く
                                                f.write(imgdata.content)
                                        
                                    
    画像ファイルの取得

    画像のURLからファイルを取り出す。

                                        
                                            import requests
                                            from bs4 import BeautifulSoup
                                            from pathlib import Path
                                            import urllib
                                            import time
    
                                            load_url = "https://アドレス.html"
                                            htmlpage = requests.get(load_url)
                                            soup = BeautifulSoup(htmlpage.content, "html.parser")
    
                                            # 保存用フォルダ作成
                                            folder = Path("download")
                                            folder.mkdir(exist_ok=True)
    
                                            # imgタグを全部検索してリンクを取得
                                            for element in soup.find_all("img"):  # imgタグを検索
                                                src = element.get("src")  # src属性を取得
    
                                                # 画像データ取得
                                                img_url = urllib.parse.urljoin(load_url, src)  # 絶対URLを取得
                                                imgdata = requests.get(img_url)
    
                                                # ファイル名
                                                imgname = img_url.split("/")[-1]  # ファイル名を取得
                                                path = folder.joinpath(imgname)
    
                                                # 画像データをファイルに保存する
                                                with open(path, mode="wb") as f:
                                                    f.write(imgdata.content)
                                                
                                                time.sleep(1)  # 1秒待つ