2016-08-23 18 views
1

Pythonとリクエストライブラリを使用して、私は郵便番号のリストを持っており、これらのリストからそれぞれ近くのCVSストアアドレスのリストをコンパイルしたいと思います。アドレスフィールドは問題なく抽出できますが、URLに「& zip = 77098」(または同等のもの)がないため、次のページを動的に生成することはできません。私がページにアクセスするたびに、私は一見ランダムな "requestid"値を取得します。Pythonを使用してjsp Webページのコンテンツをスクラップする

http://www.cvs.com/store-locator/store-locator-landing.jsp?_requestid=1003175

私は、このリンクをコピーして、戻って私のデフォルトのCVSの場所へのルートを私に別のブラウザに貼り付けた場合。 URLに郵便番号を送信する方法や、検索する場所を動的に設定する方法はありますか?

これは1つの郵便番号用の私の(機能しない)コードです。それは、「デフォルト」の場所ではなく、ヘッダー内でのzipに特定の場所を返します。

data = {"search":"77098"} 
urlx = 'http://www.cvs.com/store-locator/store-locator-landing.jsp' 
cookies = requests.get(urlx).cookies 

rx = requests.post(urlx, cookies=cookies,data=data, headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}) 

soupx = BeautifulSoup(rx.content, "lxml-xml") 
addressList = soupx.findAll("div", { "class" : "address-wrap" }) 
distanceList = soupx.findAll("span", { "class" : "store-miles" }) 
+0

私はセレンをチェックアウトすると思います。 – drum

+0

現在のコードはどこですか? –

+0

私は現在のコードを追加しました。 – claudiaann1

答えて

1

に起こっに全体があり、かなり、まずあなたが入力した郵便番号の座標を取得する必要がありますので、あなたはインクルードはあなたに検索結果を与えるURLに投稿する後でそれらを使用することができます。

urlx = 'http://www.cvs.com/store-locator/store-locator-landing.jsp' 
headers = { 
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'} 

# params for get request to get coordinates for later post. 
coord_params = { "output": "json", 
       "key": "AkezKYdo-i6Crmr6nW9y0Ce_72T-osA8SwDdbgvfMSrKL47FVwQOpjBRGW_ON5Aq", 
       "$filter": "Cvs_Store_Flag Eq 'Y'"} 

# This provides the coordinates. 
coords_url = "https://dev.virtualearth.net/REST/v1/Locations" 

# The post to get the actual results is to this url.  
post = "https://www.cvs.com/rest/bean/cvs/store/CvsStoreLocatorServices/getSearchStore" 

zipcode = "77098" 
# Template to pass each zip to in your actual loop. 
template = "{zipcode},US" 

with requests.Session() as s: 
    s.get(urlx) 
    # Add the query param passing in each zipcode 
    coord_params["query"] = template.format(zipcode=zipcode) 
    js = s.get(coords_url, params=coord_params).json() 
    # Parse latitude and longitude from the returned json. 
    latitude, longitude =(js[u'resourceSets'][0][u'resources'][0]["point"][u'coordinates']) 
    # finally get the search results. 
    results = s.post(post, data={"latitude": latitude, "longitude":longitude}).json() 

from pprint import pprint as pp 
pp(results) 

出力:

{u'atgResponse': {u'sc': u'00', 
        u'sd': [{u'ad': u'2111 W. ALABAMA STREET', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'0.35', 
          u'id': u'10554', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-874-1085', 
          u'sn': u'MyWeeklyAdStore10554', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77098'}, 
          {u'ad': u'4700 KIRBY DRIVE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'0.43', 
          u'id': u'5685', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-533-2200', 
          u'sn': u'MyWeeklyAdStore5685', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77098'}, 
          {u'ad': u'2910 WESTHEIMER ROAD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'0.69', 
          u'id': u'7126', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-526-0062', 
          u'sn': u'MyWeeklyAdStore7126', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77098'}, 
          {u'ad': u'6011 KIRBY DRIVE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'1.17', 
          u'id': u'7479', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-522-3983', 
          u'sn': u'MyWeeklyAdStore7479', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77005'}, 
          {u'ad': u'1003 RICHMOND AVENUE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'1.41', 
          u'id': u'7162', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-807-8491', 
          u'sn': u'MyWeeklyAdStore7162', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77006'}, 
          {u'ad': u'1001 WAUGH DRIVE, CORNER OF DALLAS AVENUE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'1.87', 
          u'id': u'5840', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-807-7859', 
          u'sn': u'MyWeeklyAdStore5840', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77019'}, 
          {u'ad': u'2266 WEST HOLCOMBE BOULEVARD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'1.93', 
          u'id': u'5833', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-218-2180', 
          u'sn': u'MyWeeklyAdStore5833', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77030'}, 
          {u'ad': u'4323 SAN FELIPE ST', 
          u'ci': u'HOUSTON', 
          u'cv': u'', 
          u'cz': u'', 
          u'dt': u'2.23', 
          u'id': u'16368', 
          u'nv': u'', 
          u'nz': u'', 
          u'ph': u'713-331-0166', 
          u'sn': u'MyWeeklyAdStore16368', 
          u'st': u'TX', 
          u'wf': u'N', 
          u'zp': u'77027'}, 
          {u'ad': u'1000 ELGIN STREET', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.32', 
          u'id': u'784', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-526-4478', 
          u'sn': u'MyWeeklyAdStore784', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77004'}, 
          {u'ad': u'5401 WASHINGTON AVENUE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.46', 
          u'id': u'7476', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-861-3883', 
          u'sn': u'MyWeeklyAdStore7476', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77007'}, 
          {u'ad': u'3939 BELLAIRE BOULEVARD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.54', 
          u'id': u'6240', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'832-778-9025', 
          u'sn': u'MyWeeklyAdStore6240', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77025'}, 
          {u'ad': u'4755 WESTHIEMER ROAD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.58', 
          u'id': u'2988', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-386-1091', 
          u'sn': u'MyWeeklyAdStore2988', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77027'}, 
          {u'ad': u'402 GRAY STREET', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.59', 
          u'id': u'5968', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-982-5527', 
          u'sn': u'MyWeeklyAdStore5968', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77002'}, 
          {u'ad': u'7900 SOUTH MAIN', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'2.77', 
          u'id': u'7402', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-660-8934', 
          u'sn': u'MyWeeklyAdStore7402', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77030'}, 
          {u'ad': u'8500 MAIN ST', 
          u'ci': u'HOUSTON', 
          u'cv': u'', 
          u'cz': u'', 
          u'dt': u'2.9', 
          u'id': u'16676', 
          u'nv': u'', 
          u'nz': u'', 
          u'ph': u'713-661-8213', 
          u'sn': u'MyWeeklyAdStore16676', 
          u'st': u'TX', 
          u'wf': u'N', 
          u'zp': u'77025'}, 
          {u'ad': u'5204 RICHMOND AVENUE', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'3.14', 
          u'id': u'3177', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-961-0874', 
          u'sn': u'MyWeeklyAdStore3177', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77056'}, 
          {u'ad': u'2580 SHEARN ST', 
          u'ci': u'HOUSTON', 
          u'cv': u'', 
          u'cz': u'', 
          u'dt': u'3.26', 
          u'id': u'17181', 
          u'nv': u'', 
          u'nz': u'', 
          u'ph': u'713-331-0377', 
          u'sn': u'MyWeeklyAdStore17181', 
          u'st': u'TX', 
          u'wf': u'N', 
          u'zp': u'77007'}, 
          {u'ad': u'5402 WESTHEIMER ROAD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'3.39', 
          u'id': u'7753', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-877-1479', 
          u'sn': u'MyWeeklyAdStore7753', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77056'}, 
          {u'ad': u'917 MAIN STREET', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'3.4', 
          u'id': u'6834', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-982-5565', 
          u'sn': u'MyWeeklyAdStore6834', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77002'}, 
          {u'ad': u'9838 BUFFALO SPEEDWAY', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'3.9', 
          u'id': u'5258', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-218-4491', 
          u'sn': u'MyWeeklyAdStore5258', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77025'}, 
          {u'ad': u'3811 OLD SPANISH TRAIL', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'3.95', 
          u'id': u'7198', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-741-7900', 
          u'sn': u'MyWeeklyAdStore7198', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77021'}, 
          {u'ad': u'5430 BISSONNET STREET, CORNER OF CHIMNEY ROCK, CORNER OF CHIMNEY ROCK', 
          u'ci': u'BELLAIRE', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'4.2', 
          u'id': u'5273', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-218-2291', 
          u'sn': u'MyWeeklyAdStore5273', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77401'}, 
          {u'ad': u'300 MEYERLAND PLAZA MALL', 
          u'ci': u'HOUSTON', 
          u'cv': u'', 
          u'cz': u'', 
          u'dt': u'4.33', 
          u'id': u'17091', 
          u'nv': u'', 
          u'nz': u'', 
          u'ph': u'713-292-0031', 
          u'sn': u'MyWeeklyAdStore17091', 
          u'st': u'TX', 
          u'wf': u'N', 
          u'zp': u'77096'}, 
          {u'ad': u'110 WEST 20TH STREET', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'4.87', 
          u'id': u'7092', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'832-673-7131', 
          u'sn': u'MyWeeklyAdStore7092', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77008'}, 
          {u'ad': u'6545 WESTHEIMER ROAD', 
          u'ci': u'HOUSTON', 
          u'cv': u'I', 
          u'cz': u'', 
          u'dt': u'5.12', 
          u'id': u'5895', 
          u'nv': u'I', 
          u'nz': u'', 
          u'ph': u'713-243-8050', 
          u'sn': u'MyWeeklyAdStore5895', 
          u'st': u'TX', 
          u'wf': u'Y', 
          u'zp': u'77057'}]}} 

への呼び出しがありますはBingのマップMicrosoft apiです。私はあなたのアカウントをセットアップし、あなたにキーを許可する独自のアプリケーションを作成することをお勧めします、それは私にそれをするために文字通り2分かかりました。私の知る限り、無料の制限は1日30kリクエストで十分であるはずです。

+0

美しい。これは完全に機能しました。ありがとうございました! – claudiaann1

+0

いいえ、あなたは大歓迎です。 –

関連する問題