Web Scraping - Получить на странице 2 - PullRequest
3 голосов
/ 29 июня 2019

Как мне добраться до второй страницы наборов данных?Независимо от того, что я делаю, он возвращает только страницу 1.

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

myURL = 'https://jobs.collinsaerospace.com/search-jobs/'

uClient = uReq(myURL)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "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)

Ответы [ 3 ]

2 голосов
/ 29 июня 2019

Сайт фактически использует 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
1 голос
/ 29 июня 2019

Попробуйте следующий скрипт, чтобы получить результаты со всех интересующих вас страниц. Все, что вам нужно сделать, это изменить диапазон в соответствии с вашими требованиями.Я мог бы определить цикл while, чтобы исчерпать весь контент, но это не тот вопрос, который вы задали.

import requests
from bs4 import BeautifulSoup

link = 'https://jobs.collinsaerospace.com/search-jobs/results?'

params = {
'CurrentPage': '',
'RecordsPerPage': 15,
'Distance': 50,
'SearchResultsModuleName': 'Search Results',
'SearchFiltersModuleName': 'Search Filters',
'SearchType': 5
}
for page in range(1,5):  #This is where you change the range to get the results from whatever page you want
    params['CurrentPage'] = page
    res = requests.get(link,params=params)
    soup = BeautifulSoup(res.json()['results'],"lxml")
    for name in soup.select("h2"):
        print(name.text)
1 голос
/ 29 июня 2019

попробуйте это:

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup


for letter in range(10):

    myURL = 'https://jobs.collinsaerospace.com/search-jobs/'+ str(letter) + ' '

    uClient = uReq(myURL)
    page_html = uClient.read()
    uClient.close()

    page_soup = soup(page_html, "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)

Выход: из 3 первых страниц:

0
SYSTEMS / APPLICATIONS ENGINEER
Data Scientist
Sr Engineer, Drafter/Product Definition
Finance and Accounting Intern
Senior Software Engineer - CT3
Intern Manufacturing Engineer
Staff Eng., Reliability Engineering
Software Developer
Configuration Management Specialist
Disassembler I--2nd Shift
Disassembler I--3rd Shift
Manager, Supplier Performance
Manager, Supplier Performance
Assoc Eng, Mfg Engrg-Ops, ME P1
Manager, Supplier Performance
1
Assembly Operator (UK7014) 1 1 1 1
Senior Administrator (DF1040) 1 1 1
Tester 1
Assembler 1
Assembler 1
Finisher 1
Painter 1
Technician 1 Manufacturing/Operations
Assembler 1 - 1st Shift
Supply Chain Analyst 1
Assembler (W7006) 1
Assembler (W7006) 1
Supplier Quality Engineer 1
Supplier Inspection Engineer 1
Assembler 1 - 1st Shift
2
Assembler I-FAA-2
Senior/Business Analyst-2
Operational Technical Support Level 2
Project Engineer - 2 – EMU Program
Line & Surface Plate Inspector Class 2
Software Engineer (LVL 2) - Embedded UAV Controls
Software Engineer (LVL 2 / JAVA) - Air Combat Training
Software  Engineer (Level 2) - Mission Simulation & Training
Electrical Engineer (LVL 2) - Mission Systems Design Tools
Quality Inspector II
GET/PGET
GET/PGET
Production Supervisor - 2nd shift
Software Developer
Trainee Operator/ Operator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...