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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

0回答

2301閲覧

プロキシ(proxy)経由のスクレイピング(Selenium&Chrome)でhtml構造を取得できない

logos

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2020/08/14 17:19

編集2020/08/14 17:28

`

前提・実現したいこと

Pythonでウェブサイトをプロキシ経由でスクレイピングし、情報を取得するプログラムを作成したいです。

発生している問題・エラーメッセージ

通常のネットワークではうまく動作しています。しかし、プロキシを経由して実行すると、ウェブサイトは表示されるもののhtml構造が読み取れなくなります。
ウエブサイトは手動で操作ができるうえ、開発者ツールで見ても通常のネットワークの要素と相違はありません。
原因として「BeautifulSoup(html,"html.parser")」でオプションの記述等が不足しているのではないかと疑っています。

試したこと

ブラウザが確実に読み込まれてから処理するよう前後に十分な待機を設定してみましたが、結果に相違はありませんでした。

使用している言語・ブラウザ等

python3.6,
Chrome,
Selenium,
luminati(レンタルプロキシ)

該当のソースコード

python

1# coding: utf-8 2import time 3from selenium import webdriver 4from selenium.webdriver.common.keys import Keys 5from selenium.webdriver.chrome.options import Options 6from bs4 import BeautifulSoup 7import random 8import requests 9from threading import Thread 10import pyautogui 11#プロキシ認証 12from selenium.webdriver.common.proxy import Proxy, ProxyType 13from selenium.webdriver.common.proxy import * 14 15#オッズ取得 16#対象URL作成 17url = "https://www.boatrace.jp/owpc/pc/race/odds3t?rno=12&jcd=01&hd=20200814" 18 19# プロキシ設定 20# install luminati (https://luminati.io) proxy manager & run 21PROXY = 'zproxy.lum-superproxy.io:xxxxx' 22 23proxy = Proxy() 24proxy.http_proxy = PROXY 25proxy.ftp_proxy = PROXY 26proxy.sslProxy = PROXY 27proxy.no_proxy = "localhost" # etc... ;) 28proxy.proxy_type = ProxyType.MANUAL 29 30# limunati customer info 31proxy.socksUsername = 'hogehoge' 32proxy.socksPassword = "hogehoge" 33 34capabilities = webdriver.DesiredCapabilities.CHROME 35proxy.add_to_capabilities(capabilities) 36 37#ヘッダレスでページにアクセス 38options = Options() 39# ヘッドレスモードを有効にする(次の行をコメントアウトすると画面が表示される)。 40#ヘッダレスではプロキシ認証を回避できない?ためコメントアウト 41# options.add_argument('--headless') 42# options.add_argument('--disable-gpu') 43# options.add_argument('--user-agent=hogehoge') 44# options.add_argument('--blink-settings=imagesEnabled=false') 45# options.add_argument("--disable-extensions") 46# options.add_argument('--disable-desktop-notifications') 47 48 49# ChromeのWebDriverオブジェクトを作成する。 50driver = webdriver.Chrome("C:\PycharmData\chromedriver.exe", options=options, desired_capabilities=capabilities) 51driver.get(url) 52html = driver.page_source.encode('utf-8') 53 54# ランダム Delay 55time.sleep(random.uniform(10, 12)) 56 57#プロキシ認証入力 58def enter_proxy_auth(proxy_username, proxy_password): 59 pyautogui.typewrite(proxy_username) 60 pyautogui.press('tab') 61 pyautogui.typewrite(proxy_password) 62 pyautogui.press('enter') 63 64Thread(target=enter_proxy_auth, args=(proxy.socksUsername, proxy.socksPassword)).start() 65 66# ランダム Delay 67time.sleep(random.uniform(30, 32)) 68###読込完了を待つ必要ありーーーーーーーーーー 69 70#要素を取得 71soup = BeautifulSoup(html,"html.parser") 72row = soup.find_all(class_="oddsPoint") 73print(soup) 74print(row) 75

出力

python

1 #ソースコードより抜粋 2 #要素を取得 3 soup = BeautifulSoup(html,"html.parser") 4 row = soup.find_all(class_="oddsPoint") 5 print(soup) 6 print(row) 7

python

1  #出力 2  <html><head></head><body></body></html> 3  [] 4

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

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

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

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

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

otn

2020/08/15 04:07

状況が分かりません。 > しかし、プロキシを経由して実行すると、ウェブサイトは表示されるもののhtml構造が読み取れなくなります。 ウエブサイトは手動で操作ができるうえ、開発者ツールで見ても通常のネットワークの要素と相違はありません。 のような、ブラウザ操作は、プログラムを driver.get(url) のところで一旦止めて、その状態で見ているのでしょうか? それともプログラムと全く無関係に、ブラウザを手動で起動しての話でしょうか? 後者なら有効な情報では無いですので、driver.get(url) のところで一旦止めて、そのときのブラウザ情愛を確認しましょう。
logos

2020/08/15 06:20

⇒otnさん 前者でございます。 デバック実行でブレイクポイントを設定して確認しました。
otn

2020/08/15 08:25

デバッガですか。ということは、変数htmlの中身の確認もしていますか?
logos

2020/08/15 08:46

html={bytes:39}b'<html><head></head><body></body></html>'となっており、soupと同一です。
otn

2020/08/15 11:34

と言うことは質問にお書きの > 原因として「BeautifulSoup(html,"html.parser")」でオプションの記述等が不足しているのではないかと疑っています。 では無いですよね。 特殊なサイトなのかと気になったので、やってみましたが、再現しません。正常に取得できる。 認証無しProxyですが。Proxy+Chrome+Seleniumという事だけであれば問題ありません。 他のサイトはどうなのでしょう? あとはFirefoxでやってみるとか。
logos

2020/08/15 16:49 編集

ということは認証時に問題が発生しているのでしょうか。 他サイトも同様です。 Firefoxは試みたのですが、firefoxでプロキシ認証を突破する方法が分からず、 ご教示頂けますと幸いです。
otn

2020/08/15 17:11

> ということは認証時に問題が発生しているのでしょうか。 認証無しProxyなので、認証なしです。認証有りProxyが無いので。 > Firefoxは試みたのですが、firefoxでプロキシ認証を突破する方法が分からず、 ご教示頂けますと幸いです。 ブラウザでの認証が面倒なら、認証無しProxyを作って、認証ありProxyに中継するのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問