Cookie,JavaScript,Python,浏览但不是真的

时间:2013-09-08 02:32:42

标签: javascript python html cookies

之前,我认为我在丛林中跳舞,因为我不清楚用python在某人的网站上腾跃的道德规范。我在stackoverflow上看到了一个接近我需要的答案,但它被删除了因为ticketmaster.com要求这样做。但是,我会把这些保留放在一边。

我想从杂货店网站自动获取一堆价格。我用python开始了我的项目有些新鲜和生锈。我从浏览器会话中抓取了URL文件,并运行了一堆循环来提取我想要的数据(很多'.find')。问题是,我当时正在搜索(.find())我手动下载的html文件。当我将代码切换到使用“urlopen”时,我遇到了一个我没有立即认识到的问题。

例如,此页面根据您的浏览状态显示两种不同的内容。

http://www.hannaford.com/thumbnail/Produce/Fruits/pc/28546/46815.uts?displayAll=true

我认为应该这样,因为在这样的企业中,产品和价格可能对地理非常敏感。

我的想法是在这个页面开始'Python-ing',我已经知道我想要选择的商店:     www.hannaford.com/custserv/store_detail.jsp?viewStoreId=21026

我特别有这个表格:

<form action="/custserv/save_user_store.cmd" 
    method="post" name="selectThisStoreForm" 
    onsubmit="return StoreLocator.change.store(this,false,false,21026);"
        >
        <input type='hidden' name='form_state' value='selectThisStoreForm'/>
        <input name="storeId" type="hidden" value="21026"/><p class="browseStoreLink">
    <a href="javascript:void(0);" 
        onclick="this.form.submit();" 
        class="altLink"
        >
        <input class="shopNow" type="image" src="/assets/hf/assets/images/buttons/btn_shopNow.gif" border="0" alt="Shop Now"/>
    </a>
    </p>
</form>

所以我有一个onsubmit将一个JS函数发送到一个不会被人类看到的页面。

Chrome说当我和汉纳福德会面时,我总是有10个饼干。 7来自“hannaford.com”,3来自“www.hannaford.com”。

所以,只是稍微挥动一下:

sesh = requests.Session()
Params = {'selectThisStoreForm':''}
url = "http://www.hannaford.com/custserv/save_user_store.cmd"
sesh.post(url,param=Params)

urlopen(urlFRUITS,cookies=sesh.cookies)#??

我从Sessions中获取cookie。我没有得到Chrome说它确实得到的数量。我也无法“找到”我想在每个页面中找到的标签。

1 个答案:

答案 0 :(得分:0)

无需使用urllib.urlopen只需使用sesh.get([url]),Cookie就会自动发送。您也没有为表单发送正确的参数,请尝试:

params = { 'form_state' : 'selectThisStoreForm', 'storeid' : '21026' }
sesh.post('http://www.hannaford.com/custserv/save_user_store.cmd', params=params)
resp = sesh.get(urlFRUITS)

或者,您可以尝试requests库和Session对象,它会自动管理Cookie,例如:

>>> import requests
>>> s = requests.Session()
>>> r = s.get('http://www.THEWEBSITE.com/custserv/locate_store.cmd')
>>> print r.status_code
200
>>> for c in s.cookies:
>>>     print c
<Cookie JSESSIONID=<ID> for www.THEWEBSITE.com/>
<Cookie PIPELINE_SESSION_ID=<ID> for www.THEWEBSITE.com/>
>>> payload = { 'form_state' : 'selectThisStoreForm', 'storeId' : '62012' } 
>>> r = s.post('http://www.THEWEBSITE.com/custserv/save_user_store.cmd', data=payload)
>>> print r.status_code
200
>>> for c in s.cookies:
>>>    print c
<Cookie JSESSIONID=<ID> for www.THEWEBSITE.com/>
<Cookie PIPELINE_SESSION_ID=<ID> for www.THEWEBSITE.com/>
<Cookie USER_SESSION_VALIDATE_COOKIE=false for www.THEWEBSITE.com/>

如果不确切知道自己在做什么,我会尝试requests.Session对象。