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

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

ただいまの
回答率

87.58%

Python3でstartswithをif文の条件分岐に使用したいです。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 798

score 131

Python3で特定の文字から始まる文字列を排除して絵文字のみスクレイピングしたいです。
現状は下記の画像の通り、一部\Uで始まるunicodeの文字列が入っており、こちらを避けて絵文字のみ取得したいと言うものです。
そのためにifの条件に以下のコードを加えて試しているのですが、実行結果は変わらないです。

not emoji0.startswith(r'\U')


何か他に良い方法や自分のコードに関してアドバイスなどがあればご教授頂きたいです。
よろしくお願いします。

main.py

from urllib.request import urlopen
import requests
from bs4 import BeautifulSoup
import re
import os

list0 = []

site_url = "https://www.emojiall.com/zh-hant/categories/A"
get_url = requests.get(site_url)
soup = BeautifulSoup(get_url.text, "lxml")

for script in soup(["span"]):
    script.extract()

emojis = soup.select('.emoji_font')
words = soup.select('.emoji_name_truncate')

for emoji0 in emojis:
    emoji1 = emoji0.getText()
    if not emoji1.startswith(r'\'):
        list0.append(emoji1)
    else:
        continue
print(list0)


上記コード実行結果
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • shiracamus

    2020/09/27 17:00 編集

    (回答欄にコード提示)

    キャンセル

回答 1

checkベストアンサー

+1

データとしては文字列になっていて、表示する際に '\U...' と表示されるようです。
repr関数を使うことで '\U...' にすることができるようなので、以下のようにしてはいかがでしょうか。

from urllib.request import urlopen
import requests
from bs4 import BeautifulSoup
import re
import os

list0 = []

site_url = "https://www.emojiall.com/zh-hant/categories/A"
get_url = requests.get(site_url)
soup = BeautifulSoup(get_url.text, "lxml")

for script in soup(["span"]):
    script.extract()

emojis = soup.select('.emoji_font')
words = soup.select('.emoji_name_truncate')

for emoji0 in emojis:
    emoji1 = emoji0.getText()
    if not repr(emoji1).startswith(r"'\U"):
        list0.append(emoji1)
    else:
        continue
print(list0)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/09/27 17:12

    ご教授ありがとうございます!
    こちら試させて頂いのですが、出力は変わらないようです。

    以下勉強になります。

    データとしては文字列になっていて、表示する際に '\U...' と表示されるようです

    キャンセル

  • 2020/09/27 17:20

    unicodeで取得されている物と他の要件通りに取得されている絵文字を含んでいるHTMLソースを見ても同様のタグで問題なさそうに見えます。

    キャンセル

  • 2020/09/27 18:17 編集

    私のPython3.6環境では実行結果がこうなりましたよ。
    文字列の中間にある \u... は処理してないのでそのまま残っています。

    ['👴', '👴🏻', '👴🏼', '👴🏽', '👴🏾', '👴🏿', '👩', '👨', '👩', '😂', '😀', '😃', '😄', '😁', '😆', '😅', '🤣', '😂', '🙂', '🙃', '😉', '😊', '😇', '😍', '😘', '😗', '☺', '😚', '😙', '😋', '😛', '😜', '😝', '🤑', '🤗', '🤔', '🤐', '😐', '😑', '😶', '😏', '😒', '🙄', '😬', '🤥', '😌', '😔', '😪', '🤤', '😴', '😷', '🤒', '🤕', '🤢', '🤧', '😵', '🤠', '😎', '🤓', '😕', '😟', '🙁', '☹', '😮', '😯', '😲', '😳', '😦', '😧', '😨', '😰', '😥', '😢', '😭', '😱', '😖', '😣', '😞', '😓', '😩', '😫', '😤', '😡', '😠', '😈', '👿', '💀', '☠', '💩', '🤡', '👹', '👺', '👻', '👽', '👾', '🤖', '😺', '😸', '😹', '😻', '😼', '😽', '🙀', '😿', '😾', '🙈', '🙉', '🙊', '💋', '💌', '💘', '💝', '💖', '💗', '💓', '💞', '💕', '💟', '❣', '💔', '❤', '💛', '💚', '💙', '💜', '🖤', '💯', '💢', '💥', '💫', '💦', '💨', '🕳', '💣', '💬', '👁\u200d🗨', '🗨', '🗯', '💭', '💤', '😂', '😍', '🍓', '🐵', '🚮', '👩\u200d🏫', '✊🏾', '👦', '💻', '😷']

    キャンセル

  • 2020/09/27 18:24

    失礼しました。
    再度エディター を立ち上げて試した所、理想の結果を取得できました!
    ありがとうございました!

    キャンセル

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

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る