Проверьте, что возвращается каждой функцией.В этом случае функция в вашем первом скрипте никогда не запустится.Причина в том, что get_info
принимает URL, а не что-нибудь еще.Таким образом, очевидно, что вы столкнетесь с ошибкой при запуске get_info(elem)
, где elem
- это список элементов, выбранных soup.select()
.
Вы уже должны знать вышесказанное, потому что вы перебираете результаты второго сценария, который просто возвращает список, чтобы получить элементы href
.Поэтому, если вы хотите использовать get_info
в своем первом сценарии, примените его к элементам, а не к списку, в этом случае вы можете использовать понимание списка.
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
def get_links(url):
response = requests.get(url)
soup = BeautifulSoup(response.text,"lxml")
elem = soup.select(".info h2 a[data-analytics]")
return [get_info(urljoin(link,e.get("href"))) for e in elem]
def get_info(url):
response = requests.get(url)
soup = BeautifulSoup(response.text,"lxml")
return soup.select_one("#main-header .sales-info h1").get_text(strip=True)
link = 'https://www.yellowpages.com/search?search_terms=%20Injury%20Law%20Attorneys&geo_location_terms=California&page=2'
for review in get_links(link):
print(review)
Теперь вы знаете, что первая функция все еще возвращаетсписок, но с get_info
, примененным к его элементам, как это работает?get_info
принимает URL-адрес, а не список.Оттуда, поскольку вы уже применили url_join
и get_info
в get_links
, вы можете зациклить его, чтобы напечатать результаты.