Ваша ошибка в том, что вы используете неправильный номер из вашего сплита.Вы хотите -1.Наблюдать:
last_page = soup.find('ul', class_='pagination').find('li', class_='last').a['href']
print(last_page)
print(last_page.split('=')[1])
print(last_page.split('=')[-1])
Дает:
/search/Contributions?endDate=2019-07-11&searchTerm=%22climate+change%22&startDate=1800-01-01&page=966
при разделении и использовать 1
2019-07-11&searchTerm
против -1
966
Чтобы получитьИнформация с каждой страницы, которую вы хотите, я бы сделал в значительной степени так же, как и другой ответ с точки зрения селекторов CSS и архивирования.Некоторые другие циклические конструкции ниже и использование Session для эффективности при заданном количестве запросов.
Вы можете сделать первоначальный запрос и извлечь количество страниц, а затем выполнить цикл для них.Используйте объект Session для эффективности повторного использования соединения.
import requests
from bs4 import BeautifulSoup as bs
def make_soup(s, page):
page_url = "https://hansard.parliament.uk/search/Contributions?endDate=2019-07-11&page={}&searchTerm=%22climate+change%22&startDate=1800-01-01&partial=True"
r = s.get(page_url.format(page))
soup = bs(r.content, 'lxml')
return soup
with requests.Session() as s:
soup = make_soup(s, 1)
pages = int(soup.select_one('.last a')['href'].split('page=')[1])
for page in range(2, pages + 1):
soup = make_soup(s, page)
#do something with soup
Вы можете выполнить цикл до тех пор, пока класс last
не перестанет появляться
import requests
from bs4 import BeautifulSoup as bs
present = True
page = 1
#results = {}
def make_soup(s, page):
page_url = "https://hansard.parliament.uk/search/Contributions?endDate=2019-07-11&page={}&searchTerm=%22climate+change%22&startDate=1800-01-01&partial=True"
r = s.get(page_url.format(page))
soup = bs(r.content, 'lxml')
return soup
with requests.Session() as s:
while present:
soup = make_soup(s, page)
present = len(soup.select('.last')) > 0
#results[page] = soup.select_one('.pagination-total').text
#extract info
page+=1