我一直试图获取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网址,而是来自费城的一些网站,任何想法为什么会发生这种情况?
答案 0 :(得分:1)
首次输入链接时,它会将您喜欢的商店设置为您附近的商店。并且所有后续请求都将转到相关实际商店,因为已保存favorite_store
Cookie。您可以通过在请求中添加cookie来模拟此操作。这还不够,因为它们似乎阻塞了"异常" user-agent
值,因此您需要设置正确的user-agent。
修改:经过一些测试后,看来只是设置cookies={'favorite_store':'store'}
没有正常工作,所以我会发送第一个请求,然后抓取它应该有的cookie favorite_store
集。我已更新以下代码以进行此更改。
您应该可以设置favorite_store
和user-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