Сайт фактически использует JSON для возврата HTML-кода, содержащего все записи. API для этого позволяет указывать номер страницы, а также количество записей, которые должны быть возвращены для каждой страницы, увеличение этого приведет к дальнейшему увеличению скорости.
Возвращаемый JSON содержит 3 ключа. Фильтруйте информацию, результаты HTML и флаг, чтобы указать, были ли возвращены задания. Эта последняя запись может использоваться для оповещения о достижении конца страниц.
Возможно, вы захотите взглянуть на очень популярную библиотеку Python requests
, которая упрощает генерацию правильных URL-адресов для вас и также быстра.
import bs4
import requests
from bs4 import BeautifulSoup as soup
params = {
"CurrentPage" : 1,
"RecordsPerPage" : 100,
"SearchResultsModuleName" : "Search Results",
"SearchFiltersModuleName" : "Search Filters",
"SearchType" : 5,
}
myURL = 'https://jobs.collinsaerospace.com/search-jobs/results'
page = 1
more_jobs = True
while more_jobs:
print(f"\nPage {page}")
params['CurrentPage'] = page
req = requests.get(myURL, params=params)
json = req.json()
page_soup = soup(json['results'], "html.parser")
container = page_soup.findAll("section", {"id":"search-results"}, {"data-current-page":"4"})
for child in container:
for heading in child.find_all('h2'):
print(heading.text)
more_jobs = json['hasJobs'] # Did this return any jobs?
page += 1