网站是否可以知道请求是通过"请求" python库?

时间:2016-05-12 16:25:41

标签: python python-2.7 beautifulsoup python-requests

我一直试图获取CVS商店的坐标。当我输入一个应该去新泽西州的URL时,它总是将我重定向到费城的中心。我尝试删除我认为可以产生影响的cookie,但事实并非如此。

这是脚本:

import requests 
from bs4 import BeautifulSoup 
import json 
import csv 
from requests.exceptions import InvalidURL, MissingSchema 
import re

urlx = "http://www.cvs.com/store-locator/cvs-pharmacy-address/557+South+Atlantic+Avenue-Aberdeen-NJ-07747/storeid=2511" 
rx = requests.get(urlx) 
soupx = BeautifulSoup(rx.content)
lat = soupx.find(attrs={'id':'toLatitude'})['value'] 
long = soupx.find(attrs={'id':'toLongitude'})['value'] 
print lat, long

有未使用的库,因为这实际上是较大脚本的片段,但这是脚本无法正常运行的部分。 requests.get(urlx)函数似乎不是来自新泽西州的Aberdeen网址,而是来自费城的一些网站,任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

首次输入链接时,它会将您喜欢的商店设置为您附近的商店。并且所有后续请求都将转到相关实际商店,因为已保存favorite_store Cookie。您可以通过在请求中添加cookie来模拟此操作。这还不够,因为它们似乎阻塞了"异常" user-agent值,因此您需要设置正确的user-agent

修改:经过一些测试后,看来只是设置cookies={'favorite_store':'store'}没有正常工作,所以我会发送第一个请求,然后抓取它应该有的cookie favorite_store集。我已更新以下代码以进行此更改。

您应该可以设置favorite_storeuser-agent,如下所示:

import requests 
from bs4 import BeautifulSoup 
from requests.exceptions import InvalidURL, MissingSchema 
import re

urlx = "http://www.cvs.com/store-locator/cvs-pharmacy-address/557+South+Atlantic+Avenue-Aberdeen-NJ-07747/storeid=2511"
cookies = requests.get(urlx).cookies
rx = requests.get(urlx, cookies=cookies, 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)
lat = soupx.find(attrs={'id':'toLatitude'})['value'] 
long = soupx.find(attrs={'id':'toLongitude'})['value'] 
street_address = ", ".join([soupx.find(attrs={'itemprop':'streetAddress'}).text,soupx.find(attrs={'itemprop':'addressLocality'}).text, soupx.find(attrs={'itemprop':'addressRegion'}).text ])
print lat, long, street_address