1

現在、watir を使用して、通常の HTML ソースからすべてのデータを隠している Web サイトの Web スクレイピングを行っています。私が間違っていなければ、彼らは XML とそれらの AJAX テクノロジを使用してそれを隠しています。Firefox では見ることができますが、「選択の DOM ソース」を介して表示されます。

すべて正常に動作しますが、現在、watir と同等のツールを探していますが、ブラウザなしですべてを行う必要があります。すべてをtxtファイルで行う必要があります。

実際、現在、watir はブラウザを使用してページをエミュレートし、探している html コード全体を返しています。同じことをしたいのですが、ブラウザはありません。

出来ますか ?

よろしくお願いしますタク

4

2 に答える 2

1

あなたの最善の推測は、 webscarabのようなものを使用して、ブラウザーが実行している AJAX 要求の URL をキャプチャすることです。
そうすれば、任意の HTTP ライブラリでこれらの呼び出しをシミュレートすることで、「重要な」データを自分で取得できます。

于 2010-07-14T08:47:50.100 に答える
0

少しのPythonコーディングで可能です。

貨物オフィスの場所を取得するための簡単なスクリプトを作成しました。

最初のステップ

  1. トルコ語で、たとえば Google Chrome で ajax ページを開きますが、理解できます。 http://www.yurticikargo.com/bilgi-servisleri/Sayfalar/en-yakin-sube.aspx
  2. F12 を押して下部の開発者ツールを表示し、 [ネットワーク] タブに移動します。
  3. 下部のXHRタブに移動します。
  4. 最初のコンボボックスでアイテムを選択して、AJAX リクエストを作成します。そしてヘッダータブに行きます
  5. 左ペインでGetTownByCityをクリックして調べます。

    Request URL: (...)/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy- sswservices.aspx/GetTownByCity

    Request Method:POST

    Status Code:200 OK

  6. ツリー項目にRequest Payload表示されます

    Request Payload :{cityId:34} ヘッダ。

  7. これにより、Python コードを実装することができます。

やってみましょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*-    
import requests
import json
# import simplejson as json
baseUrl = 'http://www.yurticikargo.com/'
ajaxRoot = '_layouts/ArikanliHolding.YurticiKargo.WebSite/'
getTown = 'ajaxproxy-sswservices.aspx/GetTownByCity'
urlGetTown = baseUrl + ajaxRoot + getTown
headers = {'content-type': 'application/json','encoding':'utf-8'}  # We are sending JSON headers, equivalent to Python dictionary
for plaka in range(1,82): # Because Turkiye has number plates from 1 to 81
    payload = {'cityId':plaka}
    r = requests.post(url, data=json.dumps(payload), headers=headers)
    data = r.json() # Returning data is in JSON format, if you need HTML use r.content()
    # ... Process the fetched data with JSON parser,
    # If HTML format, Beautiful Soup, Lxml, or etc...

このコードは私の作業コードの一部であり、オンザフライで書かれていることに注意してください。最も重要なことは、私がテストしていないことです。実行するには、小さな変更が必要になる場合があります。

于 2013-11-29T12:26:17.013 に答える