tag:crieit.net,2005:https://crieit.net/magazines/aocory/BS4%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0/feed [連載] BS4でスクレイピングの投稿 - Crieit Crieitで連載「[連載] BS4でスクレイピング」の最近の投稿 2019-03-02T12:42:31+09:00 https://crieit.net/magazines/aocory/BS4%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0/feed tag:crieit.net,2005:PublicArticle/14850 2019-03-02T12:42:31+09:00 2019-03-02T12:42:31+09:00 https://crieit.net/posts/BeautifulSoup-pandas BeautifulSoup入門 データをpandas データフレームに格納する <hr /> <p>title: BeautifulSoup入門 データをpandas データフレームに格納する<br /> date: '2019-03-02'<br /> update:<br /> type: post<br /> icon: python-logo.png<br /> categoryName: Python</p> <h2 id="categorySlug: python"><a href="#categorySlug%3A+python">categorySlug: python</a></h2> <h2 id="データをいろいろ扱いたい"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E6%89%B1%E3%81%84%E3%81%9F%E3%81%84">データをいろいろ扱いたい</a></h2> <p>google Colaboratoryは、環境構築不要で色々できるのが魅力です。<br /> 今回は前回回収したCrieitのデータをCSVにしたいと思います。</p> <h2 id="元のコード"><a href="#%E5%85%83%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89">元のコード</a></h2> <pre><code>from bs4 import BeautifulSoup import requests base_url = "https://crieit.net/posts?page=" num = 1 while num <= 2: url=base_url+ str(num) r = requests.get(url) soup = BeautifulSoup(r.text) titles =soup.select("h5 a") if len(titles) == 0: print("これ以上記事はありません") break num += 1 for title in titles: print(title.text) </code></pre> <h2 id="pandasをインポート"><a href="#pandas%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88">pandasをインポート</a></h2> <p>まずはPandrasをインポートします。</p> <pre><code>import pandas as pd </code></pre> <h2 id="pandasデータフレームを作る"><a href="#pandas%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B">pandasデータフレームを作る</a></h2> <p>データを格納するためのハコを作ります。pandasではこのことをデータフレーム=dfといいます。<br /> titleを今回はCSVにします。<br /> columnsは、表の横列を示します。あとで出てきますが縦列はrowで表現します。</p> <pre><code>columns = ["title"] df = pd.DataFrame(columns=columns) </code></pre> <h2 id="for文を書き換え"><a href="#for%E6%96%87%E3%82%92%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88">for文を書き換え</a></h2> <p>for文でtitleをデータフレームに格納します。<br /> そのときの処理は、PandasのSeriesを用います。<br /> そして、Pandasのデータフレームの末尾にappendを用いて追加します。</p> <pre><code>for title in titles: se= pd.Series(title.text, columns) df = df.append(se, ignore_index=True) </code></pre> <h2 id="結果を表示させる"><a href="#%E7%B5%90%E6%9E%9C%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%82%8B">結果を表示させる</a></h2> <p>結果を表示させます。</p> <pre><code>df </code></pre> <h2 id="修正したコード"><a href="#%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">修正したコード</a></h2> <pre><code>from bs4 import BeautifulSoup import requests import pandas as pd columns = ['title'] df = pd.DataFrame(columns=columns) base_url = "https://crieit.net/posts?page=" num = 1 while num <= 1: url=base_url+ str(num) r = requests.get(url) soup = BeautifulSoup(r.text) titles =soup.select("h5 a") if len(titles) == 0: print("これ以上記事はありません") break num += 1 for title in titles: se= pd.Series(title.text, columns) df = df.append(se, ignore_index=True) df </code></pre> <h2 id="動くサンプル"><a href="#%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB">動くサンプル</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/drive/1slyp9ssiahsR9TSiOGr7i8KPUxTXcU_z">Python3</a></p> aocory tag:crieit.net,2005:PublicArticle/14845 2019-02-28T17:00:36+09:00 2019-02-28T17:00:36+09:00 https://crieit.net/posts/BeautifulSoup-python-5c7795240dc8e BeautifulSoup入門 スクレイピング実践編 複数ページに対応させる【python】 <h2 id="スクレイピングをしたい"><a href="#%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E3%81%97%E3%81%9F%E3%81%84">スクレイピングをしたい</a></h2> <p>Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。<br /> 今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。<br /> BeautifulSoupには便利な機能がたくさんあります。<br /> 今回も<a href="https://crieit.net/">crieit</a>さんからデータを抜いていきます。(制作者のdalaさんには了解済み)</p> <h2 id="今回の目標"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E7%9B%AE%E6%A8%99">今回の目標</a></h2> <p>今回の目標はcrieitの全タイトルと記事URLの取得とします。</p> <h2 id="ライブラリの導入"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E5%B0%8E%E5%85%A5">ライブラリの導入</a></h2> <p>何はともあれライブラリを導入します。</p> <pre><code>from bs4 import BeautifulSoup import requests </code></pre> <h2 id="記事一覧ページの確認"><a href="#%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E7%A2%BA%E8%AA%8D">記事一覧ページの確認</a></h2> <p>crieitの記事一覧は、https://crieit.net/posts?page=1 という記載になっています。<br /> つまり、=1の分割すれば良さそうです。</p> <pre><code>base_url = "https://crieit.net/posts?page=" num = 1 </code></pre> <h2 id="whileでループ処理"><a href="#while%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%97%E5%87%A6%E7%90%86">whileでループ処理</a></h2> <p>次にwhileでループ処理をします。<br /> + ループが終わればnumに1を足す。<br /> + 所得したtextの長さが0ならループを抜ける</p> <p>これで動きそうです。</p> <pre><code>while num <= 100: url=base_url+ str(num) r = requests.get(url) soup = BeautifulSoup(r.text) titles =soup.select("h5 a") if len(titles) == 0: print("これ以上記事はありません") break num += 1 </code></pre> <p>str(num)でnumを文字列に変換しています。<br /> len(titles)は、titlesの長さを確認します。</p> <h2 id="完成したコード"><a href="#%E5%AE%8C%E6%88%90%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">完成したコード</a></h2> <pre><code>from bs4 import BeautifulSoup import requests base_url = "https://crieit.net/posts?page=" num = 1 while num <= 100: url=base_url+ str(num) r = requests.get(url) soup = BeautifulSoup(r.text) titles =soup.select("h5 a") if len(titles) == 0: print("これ以上記事はありません") break num += 1 for title in titles: print(title.text) </code></pre> <h2 id="動くサンプル"><a href="#%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB">動くサンプル</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/drive/1b8yzaGchdQKOwbA1QxQ7_hoVx3pmI12w?hl=ja#scrollTo=5-VAsYl4WkJ5">Python3</a></p> aocory tag:crieit.net,2005:PublicArticle/14844 2019-02-28T16:18:29+09:00 2019-02-28T16:18:29+09:00 https://crieit.net/posts/BeautifulSoup-python BeautifulSoup入門 スクレイピング実践編 タイトルとリンク取得まで【python】 <h2 id="スクレイピングをしたい"><a href="#%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E3%81%97%E3%81%9F%E3%81%84">スクレイピングをしたい</a></h2> <p>Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。<br /> 今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。<br /> BeautifulSoupには便利な機能がたくさんあります。<br /> 今回も<a href="https://crieit.net/">crieit</a>さんからデータを抜いていきます。(制作者のdalaさんには了解済み)</p> <h2 id="今回の目標"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E7%9B%AE%E6%A8%99">今回の目標</a></h2> <p>今回の目標はタイトルと記事URLの取得とします。</p> <h2 id="ライブラリの導入"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E5%B0%8E%E5%85%A5">ライブラリの導入</a></h2> <p>BeautifulSoup単体ではURLをからデータを持ってこれません。<br /> requestsを併用します。</p> <pre><code>from bs4 import BeautifulSoup import requests </code></pre> <h2 id="Requestsを使って、webからデータを取得"><a href="#Requests%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%80%81web%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97">Requestsを使って、webからデータを取得</a></h2> <p>requestsを使用してデータを持ってきます。</p> <pre><code>url = "https://crieit.net/" r = requests.get(url) </code></pre> <h2 id="BeautifulSoupで要素を整形する"><a href="#BeautifulSoup%E3%81%A7%E8%A6%81%E7%B4%A0%E3%82%92%E6%95%B4%E5%BD%A2%E3%81%99%E3%82%8B">BeautifulSoupで要素を整形する</a></h2> <p>つぎにBeautifulSoupで要素を整形する</p> <pre><code>soup = BeautifulSoup(r.text) </code></pre> <h2 id="crieitの記事タイトルの中身を確認"><a href="#crieit%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E7%A2%BA%E8%AA%8D">crieitの記事タイトルの中身を確認</a></h2> <p>抜きたいデータはタイトルとURLですのでその箇所の要素を確認します。</p> <pre><code><h5 class="card-title">  <a href="https://crieit.net/posts/Tilemap-5c73afa5127c1">Tilemapからミニマップを作成してみた①</a> </h5> </code></pre> <p>取り方としては<br /> + h5タグで絞り込む<br /> + classで絞り込む</p> <p>とかでなんとかなりそうです。</p> <h2 id="soup.find_all"><a href="#soup.find_all">soup.find_all</a></h2> <p>試しにsoup.find_allで値を取得してみましょう。</p> <pre><code>titles =soup.find_all("h5") print(titles) </code></pre> <pre><code>[<h5 class="card-title">クロス投稿可能</h5>, <h5 class="card-title">自由に投稿</h5>, ] </code></pre> <p>のように配列で渡されてきました。これでは視認性が悪いです。forで表示してみましょう。</p> <pre><code>for title in titles: print(title) </code></pre> <p>すると</p> <pre><code><h5 class="card-title">Nuxt.js+ExpressのプロジェクトをTypeScript化する</h5> <h5 class="card-title">Firestoreの参照型によるリレーションを試す</h5> <h5 class="card-title"><a href="https://crieit.net/posts/Tilemap-5c73afa5127c1">Tilemapからミニマップを作成してみた①</a></h5> <h5 class="card-title"><a href="https://crieit.net/posts/BeautifulSoup-soup">BeautifulSoup入門 soup.の挙動を確認する</a></h5> </code></pre> <p>のように出力されます。aタグで拾ってきた方が良さそうです。</p> <h2 id="soup.selectを使う"><a href="#soup.select%E3%82%92%E4%BD%BF%E3%81%86">soup.selectを使う</a></h2> <p>そこでsoup.selectを使うとCSSセレクタで抽出ができます。</p> <pre><code>titles =soup.select("h5 a") print(titles) for title in titles: print(title.text) link = title.get("href") print(link) </code></pre> <p>これで無事</p> <pre><code>Tilemapからミニマップを作成してみた① [https://crieit.net/posts/Tilemap-5c73afa5127c1](https://crieit.net/posts/Tilemap-5c73afa5127c1) BeautifulSoup入門 soup.の挙動を確認する [https://crieit.net/posts/BeautifulSoup-soup](https://crieit.net/posts/BeautifulSoup-soup) BeautifulSoup入門 HTMLを取得して表示する【Python】 [https://crieit.net/posts/BeautifulSoup-HTML-Python](https://crieit.net/posts/BeautifulSoup-HTML-Python) </code></pre> <p>のようにキチンと取得できました。</p> <h2 id="動くサンプル"><a href="#%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB">動くサンプル</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/drive/1b8yzaGchdQKOwbA1QxQ7_hoVx3pmI12w?hl=ja#scrollTo=5-VAsYl4WkJ5">Python3</a></p> aocory tag:crieit.net,2005:PublicArticle/14843 2019-02-28T16:12:13+09:00 2019-02-28T16:12:13+09:00 https://crieit.net/posts/BeautifulSoup-HTML-python-5c7789cd8613e BeautifulSoup入門 スクレイピング実践編 HTML取得まで【python】 <h2 id="スクレイピングをしたい"><a href="#%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E3%81%97%E3%81%9F%E3%81%84">スクレイピングをしたい</a></h2> <p>Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。<br /> 今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。<br /> BeautifulSoupには便利な機能がたくさんあります。<br /> 今回は<a href="https://crieit.net/">crieit</a>さんからデータを抜いていきます。(制作者のdalaさんには了解済み)</p> <h2 id="ライブラリの導入"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E5%B0%8E%E5%85%A5">ライブラリの導入</a></h2> <p>BeautifulSoup単体ではURLをからデータを持ってこれません。<br /> requestsを併用します。</p> <pre><code>from bs4 import BeautifulSoup import requests </code></pre> <h2 id="Requestsを使って、webからデータを取得"><a href="#Requests%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%80%81web%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97">Requestsを使って、webからデータを取得</a></h2> <p>requestsを使用してデータを持ってきます。</p> <pre><code>url = "https://crieit.net/" r = requests.get(url) </code></pre> <h2 id="BeautifulSoupで要素を整形する"><a href="#BeautifulSoup%E3%81%A7%E8%A6%81%E7%B4%A0%E3%82%92%E6%95%B4%E5%BD%A2%E3%81%99%E3%82%8B">BeautifulSoupで要素を整形する</a></h2> <p>つぎにBeautifulSoupで要素を整形する</p> <pre><code>soup = BeautifulSoup(r.text) </code></pre> <h2 id="出力してみる"><a href="#%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">出力してみる</a></h2> <p>出力してみましょう。<br /> 今回は生のHTMLを吐き出します。</p> <pre><code>print(soup.prettify()) </code></pre> <h2 id="今回のコード"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89">今回のコード</a></h2> <pre><code>from bs4 import BeautifulSoup import requests url = "https://crieit.net/" r = requests.get(url) soup = BeautifulSoup(r.text) print(soup.prettify()) </code></pre> <h2 id="今回のまとめ"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81">今回のまとめ</a></h2> <p>とりあえず、HTMLとるとこまでいけました。<br /> 次回は、タイトル全部抜いていきたいと思います。</p> <h2 id="動くサンプル"><a href="#%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB">動くサンプル</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/drive/1b8yzaGchdQKOwbA1QxQ7_hoVx3pmI12w?hl=ja#scrollTo=5-VAsYl4WkJ5">Python3</a></p> aocory tag:crieit.net,2005:PublicArticle/14842 2019-02-28T08:46:07+09:00 2019-02-28T08:46:07+09:00 https://crieit.net/posts/BeautifulSoup-soup BeautifulSoup入門 soup.の挙動を確認する <h2 id="スクレイピングをしたい"><a href="#%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E3%81%97%E3%81%9F%E3%81%84">スクレイピングをしたい</a></h2> <p>Webサイトから情報をまとめてCSVでごにょごにょしたいなどにスクレイピングは便利です。<br /> 今回は、Pythonのスクレイピングによく使われるBeautifulSoupを使って勉強していきます。<br /> BeautifulSoupには便利な機能がたくさんあります。今回は、それをまとめておきます。</p> <h2 id="tagの名前を表示"><a href="#tag%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92%E8%A1%A8%E7%A4%BA">tagの名前を表示</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.title.name) </code></pre> <p>と記載します。</p> <h2 id="titleタグで囲まれた文字列を表示"><a href="#title%E3%82%BF%E3%82%B0%E3%81%A7%E5%9B%B2%E3%81%BE%E3%82%8C%E3%81%9F%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E8%A1%A8%E7%A4%BA">titleタグで囲まれた文字列を表示</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.title.string) </code></pre> <p>と記載します。</p> <h2 id="titleタグの親要素を表示"><a href="#title%E3%82%BF%E3%82%B0%E3%81%AE%E8%A6%AA%E8%A6%81%E7%B4%A0%E3%82%92%E8%A1%A8%E7%A4%BA">titleタグの親要素を表示</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.title.parent.name) </code></pre> <p>と記載します。</p> <h2 id="&lt;p&gt;タグで囲まれた部分を表示"><a href="#%26lt%3Bp%26gt%3B%E3%82%BF%E3%82%B0%E3%81%A7%E5%9B%B2%E3%81%BE%E3%82%8C%E3%81%9F%E9%83%A8%E5%88%86%E3%82%92%E8%A1%A8%E7%A4%BA"><p>タグで囲まれた部分を表示</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.p) </code></pre> <p>と記載します。</p> <h2 id="&lt;p&gt;タグのクラス名を取得"><a href="#%26lt%3Bp%26gt%3B%E3%82%BF%E3%82%B0%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97"><p>タグのクラス名を取得</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.p['class']) </code></pre> <p>と記載します。</p> <h2 id="&lt;a&gt;タグの最初の一つを取得"><a href="#%26lt%3Ba%26gt%3B%E3%82%BF%E3%82%B0%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E4%B8%80%E3%81%A4%E3%82%92%E5%8F%96%E5%BE%97"><a>タグの最初の一つを取得</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.a) </code></pre> <p>と記載します。</p> <h2 id="&lt;a&gt;タグ全てを取得"><a href="#%26lt%3Ba%26gt%3B%E3%82%BF%E3%82%B0%E5%85%A8%E3%81%A6%E3%82%92%E5%8F%96%E5%BE%97"><a>タグ全てを取得</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.find_all('a')) </code></pre> <p>と記載します。</p> <h2 id="idを検索"><a href="#id%E3%82%92%E6%A4%9C%E7%B4%A2">idを検索</a></h2> <p>BeautifulSoupでtagの名前を表示するには</p> <pre><code>print(soup.find(id="link3")) </code></pre> <p>と記載します。</p> <h2 id="完成したコード"><a href="#%E5%AE%8C%E6%88%90%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">完成したコード</a></h2> <pre><code>html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc) #tagの名前を表示 print(soup.title.name) #titleタグで囲まれた文字列を表示 print(soup.title.string) #titleタグの親要素を表示 print(soup.title.parent.name) #<p>タグで囲まれた部分を表示 print(soup.p) # &lt;p class=&quot;title&quot;&gt;&lt;b&gt;The Dormouse's story&lt;/b&gt;&lt;/p&gt; #<p>タグのクラス名を取得 print(soup.p['class']) #<a>タグの最初の一つを取得 print(soup.a) #<a>タグ全てを取得 print(soup.find_all('a')) #idを検索 print(soup.find(id="link3")) </code></pre> <h2 id="動くサンプル"><a href="#%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB">動くサンプル</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/drive/1b8yzaGchdQKOwbA1QxQ7_hoVx3pmI12w?hl=ja#scrollTo=5-VAsYl4WkJ5">Python3</a></p> aocory