Я написал скрипт на python, используя две разные ссылки (one has pagination but the other doesn't)
, чтобы проверить, может ли мой скрипт получить все ссылки на следующей странице.Необходимо, чтобы сценарий напечатал эту строку No pagination found
, если нет опции разбивки на страницы.
Я применил @check_pagination
для проверки наличия нумерации страниц, и я хочу оставить этот декоратор в своем скребке.
Я уже достиг того, что я описал выше, выполнив следующее:
import requests
from bs4 import BeautifulSoup
urls = [
"https://www.mobilehome.net/mobile-home-park-directory/maine/all",
"https://www.mobilehome.net/mobile-home-park-directory/rhode-island/all"
]
def check_pagination(f):
def wrapper(lead):
if not lead.pages:
print('No pagination found')
return f(lead)
return wrapper
class LinkScraper:
def __init__(self, url):
self.url = url
self.home_page = requests.get(self.url).text
self.soup = BeautifulSoup(self.home_page,"lxml")
self.pages = [item.text for item in self.soup.find('div', {'class':'pagination'}).find_all('a')][:-1]
@check_pagination
def __iter__(self):
for p in self.pages:
link = requests.get(f'{self.url}/page/{p}')
yield link.url
for url in urls:
d = [page for page in LinkScraper(url)]
print(d)
Теперь я хочу сделать то же самое, не используя класс и сохраняя decorator
в моемскрипт для проверки нумерации страниц, но кажется, что я что-то не так в decorator
, и именно поэтому он не печатает No pagination found
, даже если ссылка не имеет нумерации страниц.Буду признателен за любую помощь, чтобы исправить это.
import requests
from bs4 import BeautifulSoup
urls = [
"https://www.mobilehome.net/mobile-home-park-directory/maine/all",
"https://www.mobilehome.net/mobile-home-park-directory/rhode-island/all"
]
def check_pagination(f):
def wrapper(*args,**kwargs):
if not f(*args,**kwargs):
print("No pagination found")
return f(*args,**kwargs)
return wrapper
def get_base(url):
page = requests.get(url).text
soup = BeautifulSoup(page,"lxml")
return [item.text for item in soup.find('div', {'class':'pagination'}).find_all('a')][:-1]
@check_pagination
def get_links(num):
link = requests.get(f'{url}/page/{num}')
return link.url
if __name__ == '__main__':
for url in urls:
links = [item for item in get_base(url)]
for link in links:
print(get_links(link))