1

ここにウェブサイトがあります

BSE SmallCap

ここには約100社がリストされています。Python(またはC#)を使用してプログラムで次の100社を保存するにはどうすればよいですか?このページの下部に

528の1-100を表示<<前へ| 次へ>>

リンクにアクセスするにはどうすればよいですか

次へ>>

プログラムで。このリンクは、ベースURL +'#'(http://money.rediff.com/indices/bse/bsesmallcap#)として表示されます。すべての1-528会社の詳細を保存する方法(個別のWebページ:1-100、101-200など)。この種のタスクに合わせた特別なプログラムはありますか。

4

3 に答える 3

5

スクレイプなどは必要ありません。実際にはjavascriptであるため、その「次へ」リンクで見つけるためのリンクはありません。

javascript:nextPage(document.paging.totalPages.value)

Chromeの開発者ツールを使用して、実際にどのようなリクエストを行っているかを確認しましたが、これは単なる認証されていないPOSTリクエストであることがわかりました。次の方法で、必要なページを取得できます。

import requests
r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
              data={'currentPageNo': 3, 'RowPerPage': 100})
print r.text

あなたがしなければならないのは'currentPageNo'あなたが探しているページを取得するために引数を変更することです。 1ページあたりの行数を変更することもできますが、私はそれを試しませんでした。 更新:できません。私は試した。

実際に情報を保存するという点ではBeautifulSoup、各リクエストからデータを取得して保存または保存するために使用できます。テーブルには定期的に各ページにクラスがあることを考えると、'dataTable'見つけるのは非常に簡単です。したがって、6ページあるとすると、次のようなコードになります。

import requests
from bs4 import BeautifulSoup as BS
for page in range(1, 7):
    r = requests.post('http://money.rediff.com/indices/bse/bsesmallcap',
                      data={'currentPageNo': page, 'RowPerPage': 100})
    soup = BS(r.text)
    table = soup.find(class_='dataTable')
    # Add table information to whatever output you plan to use
于 2013-01-02T15:41:04.330 に答える
2

「各ページ」への完全なリンクは次のとおりです

(このビットを自分でスクレイプする必要があるため、totalPagesアスペクトを削除しました)

(スクレイピングからの)ページ数がわかれば、currentPageNoすべての行が揃うまでをインクリメントできます。

RowsPerPageの数を増やすことはできますが、200行の内部制限があるようです(たとえば、500行に変更しても)

于 2013-01-02T15:56:00.040 に答える
1

の代わりにを使用してjdotjdotの答えをスピンすると、トラバース用のjQuery風の表記法が好きです。デフォルトまたはスクレイピングに使用します。PyQueryBeautifulSoupurllibrequests

from pyquery import PyQuery as pq
for page in range(1, 3):
    # POST request
    d = pq(url="http://money.rediff.com/indices/bse/bsesmallcap",
           data={"currentPageNo": page, "RowPerPage": 50},
           method="post")
    # jQuery-esque notation for selecting elements
    d("table.dataTable").text()
于 2013-01-02T16:56:56.573 に答える