2017-09-20 16 views
0

In this video, I give you a look at the dataset I want to scrape/take from the web. Very sorry about the audio, but did the best with what I have.何千ページものページがあり、明らかにテーブルを持っているので、pd.read_htmlは動作しません。それは私にヒットするまでは、このページでは、学期を選択するために、そうすることで、数千人の何千もの時に表示されることができます。このリンクに行く最初に記入する形式....PythonでASP Webページをスクラップする方法は?

https://opir.fiu.edu/instructor_eval.asp

を持っていますテーブルの私は、HTMLを読むことを望む学期を選択した後にURLを使用しようとしましたが、そのような運はありません。私はまだ私が見ているものは分かりません(Webページですか、ASPですか? ASP?)。ビデオのリンクをたどった場合、春学期を選択してリンクをコピーして検索バーに入れると、醜いエラーが表示されます。いくつかのSQLエラー。 これは私のジレンマです。私はこのデータを取得しようとしています...これらのテーブルすべて。私が最後に作ったポストは、クリックして10分以上ドラッグしてから、エクセルに貼り付けるだけで、それらを手に入れようとしていました。それはそれを行うひどい方法です、そして、データが非常に扱いにくかったので、私がそのExcelシートをPythonにインポートしたときには、特に有用ではありませんでした。非常に構造化されていない。だから、私は、ちょっと、なぜbs4で掻き集めていないと思ったのですか?それほど簡単ではありませんが、URLが機能しないためです。春学期にフィルタリングした後、URLはちょうどあなたのためではなく、bs4用のpythonに貼り付けるだけでは機能しません。 だから、このデータ。私はbs4でそれを削り取り、後で操作するためにデータフレームに入れたいと思う。しかし、それがASPなのか、それが何であれ、私はまだそれを行う方法を見つけることができません:\

+0

これは、.aspページであることとは関係ありません。フォームは最初のページをフォームで調べることで見ることができますが、HTMLのままです。問題は、2ページ目のテーブルで応答するには、実際にはフォームフィールドに入力する必要があり、選択内容(同じURL)によって異なるテーブル情報が返されることです。このフローは、サーバー側の言語に関係なく、Webフォームからの要求と戻りに対する標準です。あなたがする必要があるのは、第2ページを掻き取る前に、プロセスの最初のページのフィールドを選択することです。 – ivan7707

+0

@ ivan7707 URLは同じではありません。テーブルをフィルタ処理し、URLを別のブラウザにコピーしてみてください。それはあなたにエラーを与えるでしょう。しかし、あなたの返答の残りの部分に応じて、私はフィールドを使用して組み込む必要があることを知っています...しかし、私はそれをどうやって行うのか全く分かりません。どのようにセメスターを選ぶか、または第二の部分に到達するために最初の部分をフィルタリングするのを容易にしますか? – user18139

+0

大学や学期を変更する場合、これは常に結果ページのURLです:https://opir.fiu.edu/instructor_evals/instr_eval_result.asp。 – ivan7707

答えて

-1

ASPはActive Server Pagesの略であり、サーバサイドスクリプト(通常はvbs)を実行するページです。レンダリングされたページからデータを削りたいと思っています。
/instructor_evals/instr_eval_result.aspから有効な応答を得るには、フォームデータが/instructor_eval.aspのPOST要求を提出する必要があります。それ以外の場合、ページにエラーメッセージが返されます。
urllibで正しいデータを提出すれば、bs4でテーブルを取得できるはずです。ところで

from urllib.request import urlopen, Request 
from urllib.parse import urlencode 
from bs4 import BeautifulSoup 

url = 'https://opir.fiu.edu/instructor_evals/instr_eval_result.asp' 
data = {'Term':'1171', 'Coll':'%', 'Dept':'','RefNum':'','Crse':'','Instr':''} 
r = urlopen(Request(url, data=urlencode(data).encode())) 
html = r.read().decode('utf-8', 'ignore') 
soup = BeautifulSoup(html, 'html.parser') 
tables = soup.find_all('table') 

は、このエラーメッセージは、ページが非常に厄介なバグであるSQL Injectionに対して脆弱であることを強く示唆し、私はあなたがそれについて管理者に知らせるべきだと思います。

+1

これは "あなた"ですか?それで、私は、OPは明らかにこれを説明していません。だからあなたはおそらくそれらを意味することはできません。 「あなた」と言えば、あなたは自分自身が、セキュリティ知識を主張していても責任を放棄しています。 「あなた」は...まあ... *あなたですか? – hrbrmstr

+0

@hrbrmstrあなたはこのページが適切に脆弱であることに同意しないでしょうか?私は教育機関との関連性はなく、管理者の中にはそれほど親切ではないと聞いていますが、調査して報告したいと思ったら先に進んでください。 –

+0

それ以外に、コード自体@ t.m.adamが含まれていないので、彼はそれをテストした疑いがあります。 'UnicodeDecodeError:' utf-8 'コーデックは、位置5779573のバイト0xe9をデコードできません:このエラーの意味は何でも、無効な継続バイトです。私はこれを理解できません。ここ数週間そうしようとしていて、研究していますが、理解できません。 – user18139

関連する問題