Проблема в функции find_pages. Вот оригинальная функция find_pages, которую вы опубликовали:
# Finds number of pages resulting from search term provided
def find_pages(self):
pages = []
html_page = urllib.request.urlopen(self.url)
source = BeautifulSoup(html_page, "html5lib")
base_url = 'https://ie.indeed.com'
for a in source.find_all('div', class_= 'pagination'):
for link in a.find_all('a', href=True):
pages.append(base_url + link['href'])
pages.insert(0, base_url + '/jobs?q=test&l=Dublin&sort=date&limit=50&radius=25&start=0')
pages.pop()
return pages
Когда вы вызываете скрипт для роли "qa", сайт возвращает все результаты на одной странице . Поэтому на странице нет div'ов с class=pagination
. Итак, эта строка возвращает пустой список:
for a in source.find_all('div', class_='pagination'):
... что означает, что это также пусто:
for link in a.find_all('a', href=True):
поэтому вы возвращаете пустой список из функции find_pages
, и в конечном итоге pandas создает пустой фрейм данных.
Чтобы исправить это, просто добавьте условие, чтобы проверить, пуст ли div для нумерации страниц, например:
# Finds number of pages resulting from search term provided
def find_pages(self):
pages = []
html_page = urllib.request.urlopen(self.url)
source = BeautifulSoup(html_page, "html5lib")
base_url = 'https://ie.indeed.com'
# <edited code>
pagination_divs = source.find_all('div', class_='pagination')
if not pagination_divs:
return [base_url + '/jobs?q={}&l=Dublin&sort=date&limit=50&radius=25&start=0'.format(self.role)]
for a in pagination_divs:
for link in a.find_all('a', href=True):
pages.append(base_url + link['href'])
# </edited code>
pages.insert(0, base_url + '/jobs?q=test&l=Dublin&sort=date&limit=50&radius=25&start=0')
pages.pop()
return pages
Примечание: вам может понадобиться отредактировать код, чтобы сделать что-то еще, когда div не существует в зависимости от того, чего вы пытаетесь достичь.