2016-08-23 189 views
1

使用Python和請求庫,我有一個郵政編碼列表,並從這些我想編譯一個列表的附近CVS商店地址爲每個。我可以在沒有問題的情況下提取地址字段,但由於URL中沒有「& zip = 77098」(或等效),我無法動態生成下一頁。每次訪問該頁面時,我都會看到一個看似隨機的「請求標識」值。使用Python來抓取jsp網頁的內容

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

如果我複製此鏈接,並在另一個瀏覽器粘貼路線我回到我的默認CVS位置。有沒有辦法在URL中發送郵政編碼或以其他方式動態設置要搜索的位置?

這是我的(不工作的)一個郵政編碼的代碼。它返回的「默認」的位置,而不是位置特定的拉鍊在標題:

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

有相當多的整體回事,你首先需要獲得的座標輸入所以郵政編碼你可以用它們後來張貼到網址給你的搜索結果:

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'}]}} 

有一種叫https://dev.virtualearth.net/REST/v1/Locations這是一個必應地圖Microsoft api,我建議你設置一個帳戶,並創建自己的應用程序,它將允許你一把鑰匙,它花了兩分鐘的時間來完成它。據我所知,免費限制是每天3萬個請求,所以應該足夠了。

+0

美麗。這工作完美。謝謝! – claudiaann1

+0

沒有問題,不客氣。 –