在url中循环或从url的变化中刮取数据

2024-05-02 22:09:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是将加拿大的所有纬度和经度范围自动输入到下面的代码中,并自动删除出现的位置。我知道加拿大的纬度在42°N到83°N之间,经度在53°W到141°W之间。我知道如何刮取这类数据,但从来没有在url中循环信息。我担心我会以某种方式进行循环,这只会让我被网站禁止。所以,任何帮助都将是伟大的

import requests

url = "https://www.circlek.com/stores_new.php?lat=43.6529&lng=-79.3849&services=&region=global"

payload={}
headers = {
  'Connection': 'keep-alive',
  'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
  'Accept': '*/*',
  'X-Requested-With': 'XMLHttpRequest',
  'sec-ch-ua-mobile': '?0',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
  'Sec-Fetch-Site': 'same-origin',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Dest': 'empty',
  'Referer': 'https://www.circlek.com/store-locator?Canada&lat=43.6529&lng=-79.3849',
  'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
  'dnt': '1'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Tags: httpscomurlwwwsecfetchrequestsen
1条回答
网友
1楼 · 发布于 2024-05-02 22:09:19

正如您所评论的,您可以这样放置代码,我猜您的不同纬度和经度存储在列表中,如果不共享不同纬度和经度的范围

lat_lng = [(lat,long) for lat,long in zip(range(43,83),range(-141,-53))] #store or create range of latitude and longitude 

for latitude,longitude in lat_lng:
  url = f"https://www.circlek.com/stores_new.php?lat={latitude}&lng={longitude}&services=&region=global"
  payload={}
  headers = {
    'Connection': 'keep-alive',
    'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
    'Accept': '*/*',
    'X-Requested-With': 'XMLHttpRequest',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://www.circlek.com/store-locator?Canada&lat=43.6529&lng=-79.3849',
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
    'dnt': '1'
  }

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.json())

您也可以在函数中进行换行

正如您所评论的,对于负排列range应该是这样的,它是有效的

lat_lng = [(lat,long) for lat,long in zip(range(43,83),range(-141,-53))]

#[(43, -141), (44, -140), (45, -139), (46, -138), (47, -137), (48, -136),.....]

在上面的输出中要注意,在zip中,我们有一对一,就像一个纬度点对一个经度,但如果您希望一对多看到的话 itertools模块,这会有帮助

为了更准确地使用,我建议您查看np.arange,您也可以将其用于float

np.arange(43,83,0.001)
#array([43.   , 43.001, 43.002, ..., 82.997, 82.998, 82.999])

相关问题 更多 >