🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5253閲覧

pythonでfrom requests_html import HTMLSessionを使えるようにしたい

Ichiro08

総合スコア8

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/06 08:25

やりたいこと

from requests_html import HTMLSessionを使えるようにしたい

発生している問題

コードを実行したらエラーが出る

google colaboratryで試した場合のエラー


ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-ea764bde7c35> in <module>()
> 3 from bs4 import BeautifulSoup

4 import re

----> 5 from requests_html import HTMLSession
6 import asyncio
7 # スクレイピング対象

ModuleNotFoundError: No module named 'requests_html'


NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.


anacondaで試した場合のエラー

RuntimeError Traceback (most recent call last)
<ipython-input-1-53fcf8c1f46c> in <module>
40 session = HTMLSession()
41 r = session.get(URL)
---> 42 r.html.render()
43
44 # ブラウザエンジンでHTMLを生成させる

~/opt/anaconda3/lib/python3.8/site-packages/requests_html.py in render(self, retries, script, wait, scrolldown, sleep, reload, timeout, keep_page)
584 """
585
--> 586 self.browser = self.session.browser # Automatically create a event loop and browser
587 content = None
588

~/opt/anaconda3/lib/python3.8/site-packages/requests_html.py in browser(self)
727 self.loop = asyncio.get_event_loop()
728 if self.loop.is_running():
--> 729 raise RuntimeError("Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.")
730 self._browser = self.loop.run_until_complete(super().browser)
731 return self._browser

RuntimeError: Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.

環境

anaconda
または
google colaboratry


import requests import urllib from bs4 import BeautifulSoup import re from requests_html import HTMLSession import asyncio # スクレイピング対象 #URL = 'https://www.tvkingdom.jp/chart/23.action' URL='https://bangumi.org/epg/td?ggm_group_id=42' # WordPress接続情報 WP_URL = 'https://xxxx.com' WP_USERNAME = 'userName' WP_PASSWORD = 'xxxx xxxx xxxx xxxx xxxx xxxx' ARTICLE_ID = "9999" # WordPress更新関数 def post_article(id, content): # REST APIを使うための認証情報 user_ = WP_USERNAME pass_ = WP_PASSWORD # 更新情報 payload = {"content": content} #内容 # 記事の更新を行う res = requests.post(urllib.parse.urljoin(WP_URL, "wp-json/wp/v2/posts/817"), #"wp-json/wp/v2/posts/<id>"にPostすると更新になる json=payload, #投稿する記事の内容を設定する auth=(user_, pass_)) #ユーザとアプリケーションパスワードを設定する print('WP投稿結果:{}'.format(res)) return res nest_asyncio.apply() # セッション開始 session = HTMLSession() r = session.get(URL) # ブラウザエンジンでHTMLを生成させる r.text content = '香川真司と久保建英の最新ニュースです。' elems = r.html.find(".program_text") for i,elem in enumerate(elems): href = elem.find('a') # 5件だけ処理する if i==5: break link_ = href[0].attrs['href'] # 抽出したURLを整形して絶対パスを作る link = 'https://bangumi.org' + link_ title_elem = elem.text content = content + '<p><a href="' + link + '">' + title_elem + '</a></p>\n' # 記事を更新する post_article(ARTICLE_ID, content)

ここは個人の情報を入れています

WordPress接続情報

WP_URL = 'https://xxxx.com'
WP_USERNAME = 'userName'
WP_PASSWORD = 'xxxx xxxx xxxx xxxx xxxx xxxx'

わかりづらいとは思いますがよろしくお願い致します!!

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

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

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

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

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

ppaul

2021/02/06 11:47

google colaboratryとanacondaのどちらで動かしたいのですか?
Ichiro08

2021/02/06 23:02

google colaboratryではrequests_htmlをインストールすることができました! anacondaがまだできないので、anacondaのやり方などご存知でしたら教えて頂きたいです! よろしくお願い致します!
guest

回答2

0

自己解決

pip install requests_html
ではなくて
!pip install requests_html
でgoogle colaboratryでインストール出来ました!

anacondaではまだできていません。。

投稿2021/02/09 06:00

Ichiro08

総合スコア8

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

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

0

エラーメッセージの解説だけします。

RuntimeError: Cannot use HTMLSession within an existing event loop. Use AsyncHTMLSession instead.
イベントループの中では、HTMLSessionは使えません。代わりにAsyncHTMLSessionを使ってください。

この指示に従うと、

5行目
from requests_html import HTMLSession

from requests_html import AsyncHTMLSession
に変更

40行目の
session = HTMLSession()

session = AsyncHTMLSession()
に変更

これで、このエラーメッセージは出なくなるはずです。
求める結果になるかどうか、使ったことがないのでわかりません。

投稿2021/02/06 23:39

ppaul

総合スコア24670

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

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

Ichiro08

2021/02/09 05:57

ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問