0

Scrapy を使用して、Web ページから一部のデータをクロールしています。このページには、複数のチェックボックスとドロップダウン メニューを含むフォームがあり、フォームがデータ テーブルを生成するには、これらすべてを選択する必要があります。すべてのチェックボックスには、javascript コードを呼び出す onClick 属性があり、それらは階層レベルにあります。つまり、5 つのメイン チェックボックスがあり、それぞれにサブカテゴリとして 7 つのチェックボックスが含まれています。チェックボックスは 4 レベルのツリー構造になっています。これは、最下位レベル (リーフ) チェックボックスの 1 つです。

<input type="checkbox" name="mid" value="1043" id="bd_1" onclick="setGroupCheck(this)">

javascript メソッド setGroupCheck() は、ページの head タグで定義されています。

私はこのようなフォームを送信しようとしました:

FormRequest("url", method='POST', formdata={'mid':'1043','Ins':'a'}, callback=self.parseInfoPage)

しかし、それは私にエラーを与えます: 500 internal server error.

どうすればこれを解決できますか?

4

1 に答える 1

2

発生しているエラーは、FormRequest ではなくサーバーにあります。Scrapy を使用したい場合、これについてできることはあまりないかもしれません。Python から広範囲に JavaScript を操作する必要がある場合は、別のスクレイピング アプローチを使用する必要があります。

私のお気に入りは、ヘッドレスであるため、PhantomJSをドライバーとして使用するSeleniumです。これらのリンクから、次の両方の手順をダウンロードしてインストールできます。次に、以下を使用して Python で Web ドライバーを開始できます。

from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get(url)

Scrapy を使用して問題を解決できないため、この回答が不十分に思えるかもしれませんが、JavaScript が複雑になると、ブラウザーを駆動せずに Python から JavaScript と対話することは、一般的に困難または不可能です。あなたのページの JavaScript は複雑に思えます。スクレイピングしているページへのリンクを追加していただければ、より多くのアドバイスを提供できますが、質問に対する答えはページによって異なります。

于 2013-06-04T15:41:32.817 に答える