Я написал скрипт на python для получения ссылок на некоторые сообщения, отслеживая базовую ссылку с ее целевой страницы.Я сам могу сделать то же самое, если придерживаюсь традиционного подхода.
Однако моя цель здесь состоит в том, чтобы сделать то же самое, используя decorator
.Кажется, я близок, но застреваю, когда передаю ссылки из функции get_links()
в get_target_link()
.Я использовал return func()
в качестве заполнителя в функции get_target_link()
, так как не могу понять, как передавать ссылки.В функции get_links()
есть оператор print (работает без комментариев), чтобы убедиться, что я на правильном пути.
Как мне передать ссылки return linklist
из get_links()
на get_target_link()
, чтобы я мог повторно использовать их при необходимости?
Это то, что я пробовал до сих пор:
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
url = "https://www.janglo.net/component/option,com_sobi2/"
def get_links(func):
linklist = []
res = requests.get(func())
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select(".sobi2ItemTitle a"):
linklist.append(urljoin(url,item.get("href")))
#print(linklist)
return linklist
def get_target_link():
return func() #All I need to do is fix this line
return get_target_link
@get_links
def get_info():
res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
for items in soup.select("#sobi2CatListSymbols .sobi2SubcatsListItems a[title]"):
if items.text=="Tutors":
ilink = f"{urljoin(url,items.get('href'))}"
return ilink
if __name__ == '__main__':
for links in get_info():
print(links)
Post Script: I only would like to comply with the logic I've tried to apply above
.
Обновление для @sir Andersson (Can you explain how you want to re-use them if necessary
):
def get_target_link():
titles = []
new_links = func()
for new_link in new_links:
res = requests.get(new_link)
soup = BeautifulSoup(res.text)
titles.append(soup.select_one("h1").text)
return titles
return get_target_link
Я хотел создать украшенную функцию, которая будет действовать следующим образом@Carlos Mermingas:
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
url = "https://www.janglo.net/component/option,com_sobi2/"
def get_info(link):
res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
for items in soup.select("#sobi2CatListSymbols .sobi2SubcatsListItems a[title]"):
if items.text=="Tutors":
ilink = f"{urljoin(url,items.get('href'))}"
return ilink
def get_links(tlink):
linklist = []
res = requests.get(tlink)
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select(".sobi2ItemTitle a"):
linklist.append(urljoin(url,item.get("href")))
return linklist
def get_target_link(link):
titles = []
res = requests.get(link)
soup = BeautifulSoup(res.text,"lxml")
titles.append(soup.select_one("h1").text)
return titles
if __name__ == '__main__':
item = get_info(url)
for nlink in get_links(item):
for ititle in get_target_link(nlink):
print(ititle)