Я написал скрипт на python, чтобы очистить все names
и links
, связанные с ним, с целевой страницы веб-сайта с помощью функции .get_links()
.Затем я создал другую функцию .get_info()
, чтобы перейти на другую страницу (используя ссылки, полученные из первой функции), чтобы оттуда отсканировать телефонные номера.
Мне не нужно было создавать вторую функцию вall Если моя цель состояла в том, чтобы разобрать два элемента с этой веб-страницы, поскольку они уже доступны на целевой странице.
Однако, я бы хотел, чтобы мой анализатор вел себя так: распечатать names
(переносот первой функции) внутри второй функции вместе с phone numbers
там.Самое главное, я не хочу выбрасывать for loop
, определенный во второй функции.Если бы for loop
не было во второй функции, то проблема бы не возникла.Без использования for loop
я уже могу получить желаемый вывод.
Пока это мой скрипт:
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
url = "https://potguide.com/alaska/marijuana-dispensaries/"
def get_links(link):
session = requests.Session()
session.headers['User-Agent'] = 'Mozilla/5.0'
r = session.get(link)
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select("#StateStores .basic-listing"):
name = items.select_one("h4 a").text
namelink = urljoin(link,items.select_one("h4 a").get("href")) ##making it a fully qualified url
get_info(session,name,namelink) ##passing session in order to reuse it
def get_info(session,title,url):
r = session.get(url)
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select("ul.list-unstyled"): ##if I did not use for loop I could get the output as desired.
try:
phone = items.select_one("a[href^='tel:']").text
except:
phone = ""
print(title,phone)
if __name__ == '__main__':
get_links(url)
Вывод, который я получаю:
AK Frost
AK Frost
AK Frost
AK Frost
AK Frost
AK Frost (907) 563-9333
AK Frost
AK Frost
AK Frost (907) 563-9333
AK Frost
AK Fuzzy Budz
AK Fuzzy Budz (907) 644-2838
AK Fuzzy Budz
AK Fuzzy Budz
AK Fuzzy Budz (907) 644-2838
Мой ожидаемый результат:
AK Frost (907) 563-9333
AK Fuzzy Budz (907) 644-2838