在 url 中循环或从 Url 中的变体中抓取数据

Looping in a url or scrape data from variation in Url

我的目标是将加拿大的所有纬度和经度范围自动输入到下面的代码中,并抓取自动出现的位置。我知道加拿大范围是 42°N 到 83°N 的纬度和 53°W 到 141°W 的经度。我知道如何 抓取 这种类型的数据,但从来没有在 url.I 中循环信息 我担心我会以某种方式制作一个循环,除了让我被禁止网站。所以任何帮助都会很棒!

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)

正如你评论的那样,你可以像这样放置你的代码,我猜你的不同纬度和经度存储在这样的列表中,如果不共享 lat_lng 的范围与差异

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 您也可以像

一样使用浮点数
np.arange(43,83,0.001)
#array([43.   , 43.001, 43.002, ..., 82.997, 82.998, 82.999])