В вашем коде несколько ошибок, и одна вещь о веб-сайте, который вы просматриваете
Первый доступ к URL-адресу, подобному этому https://www.winmar.ca/find-a-location/308
, не изменит местоположение должным образом, это должно быть примерно таким: https://www.winmar.ca/find-a-location/#308
с хэш-бангом перед числом.
На сайте есть дубликат html с одинаковыми классами, это означает, что у вас почти все места загружены все время и они просто выбирают, что показывать, из их js кода - плохой практики конечно-, что заставляет вашего сопоставителя всегда получать одно и то же местоположение, что объясняет, почему вы всегда повторяли одно и то же местоположение.
Наконец, у вас было много ненужных циклов, вам нужно всего лишь l oop над массивом чисел и все.
вот модифицированная версия вашего кода
import csv
import requests
from bs4 import BeautifulSoup
x = 0
numbers = ['305', '405', '306', '307', '308', '309', '4273']
names = []
locations = []
for x in range(0, 6):
url = 'https://www.winmar.ca/find-a-location/#' + str(numbers[x])
print(f"pinging url {url}")
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
scope = soup.find(attrs={"data-id": str(numbers[x])})
location_name = scope.find("div", attrs={"class": "title_block"})
location_name_items = location_name.find_all('h2')
location_list = scope.find(class_='quick_info')
location_list_items = location_list.find_all('p')
name = location_name.find_all("h2")[0].text
print(name)
names.append(name)
for location in location_list_items:
loc = location.text.strip()
if '24 Hour Emergency' in loc:
continue
print(loc)
locations.append(loc)
x = x+1
Обратите внимание на область действия, которую я сделал
scope = soup.find(attrs={"data-id": str(numbers[x])})
, которая делает ваш код невосприимчивым к тому, сколько мест они загрузили в html, вы ориентируетесь только на область с местоположением, которое вы выбрали. нт.
это приводит к:
pinging url https://www.winmar.ca/find-a-location/#305
Location | Annapolis
70 Donald E Hiltz Connector Road
Kentville, NS
B4N 3V7
pinging url https://www.winmar.ca/find-a-location/#405
Location | Bridgewater
15585 Highway # 3
Hebbville, NS
B4V 6X7
pinging url https://www.winmar.ca/find-a-location/#306
Location | Halifax
9 Isnor Dr
Dartmouth, NS
B3B 1M1
pinging url https://www.winmar.ca/find-a-location/#307
Location | New Glasgow
5074 Hwy. #4, RR #1
Westville, NS
B0K 2A0
pinging url https://www.winmar.ca/find-a-location/#308
Location | Port Hawkesbury
8 Industrial Park Rd
Lennox Passage, NS
B0E 1V0
pinging url https://www.winmar.ca/find-a-location/#309
Location | Sydney
358 Keltic Drive
Sydney River, NS
B1R 1V7