1

以下では、サイトhttp://www.searspartsdirect.comのすべてのハイパーリンクを取得しようとしていますが、ここで何が間違っているのかという出力が得られます

 <html>
<body onload="document.acsForm.submit();">

    <form name="acsForm" action="https://www.searspartsdirect.com/partsdirect/j_acegi_cas_security_check?ssonofail=true" method="post">
        <div style="display: none">

            <textarea rows=10 cols=80 name="logonPassword"></textarea>

            <textarea rows=10 cols=80 name="loginId"></textarea>

            <textarea rows=10 cols=80 name="screenName"></textarea>

            <textarea rows=10 cols=80 name="errorCode"></textarea>

        </div>
      </form>
</body>
 </html>

これは私のスクリプトです:

  import httplib2
  import sys
  from bs4 import BeautifulSoup , SoupStrainer
  import urllib , urllib2 , cookielib , random ,datetime,time,sys


  sitename=sys.argv[1]
  http = httplib2.Http()
  status, response = http.request(sitename)
  cookiejar = cookielib.CookieJar()
  urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
  urllib2.install_opener(urlOpener)
  request = urllib2.Request(sitename)
  url = urlOpener.open(request)
  contents = url.read()
  soup = BeautifulSoup(contents)
  for a in soup.findAll('a'):
     print a
4

1 に答える 1

1

あなたの問題は BeautifulSoup とは関係ありません - インデックス ページのソースは Javascript を使用して別の URL にリダイレクトします (したがって、単純に HTML をダウンロードすると退屈なページが表示されます)。

リダイレクトは次の理由で発生します。

<body onload="document.acsForm.submit();">

..次のフォームを送信します。

<form name="acsForm"
action="https://www.searspartsdirect.com/partsdirect/j_acegi_cas_security_check?ssonofail=true" 
method="post">

ブラウザがリダイレクトされたページを取得しようとすると、空白のページが表示されるため、「アクション」URL に対して POST 要求を実行し、おそらくそれが設定する Cookie を保存する必要があると思います。

POST データには、おそらく次のフィールドの値を含める必要があります。

<textarea rows=10 cols=80 name="logonPassword"></textarea>
<textarea rows=10 cols=80 name="loginId"></textarea>
<textarea rows=10 cols=80 name="screenName"></textarea>
<textarea rows=10 cols=80 name="errorCode"></textarea>

{'logonPassword': '', 'loginId': '', ...}..これは、シリアル化され、リクエストで POST データとして渡されるようなものになります

http://www.searspartsdirect.com/partsdirect/index.action次に、Cookie を使用して、または同様のリクエストを行うことができ、BeautifulSoup コードは期待どおりに動作するはずです。

機械化すると、これが少し簡単になるかもしれません - ホームページの例は基本的にあなたが望むものです

于 2012-08-01T13:52:19.800 に答える