Python - Красивый скребок для супа, возвращающий часть текста, но не весь - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь вычеркнуть 100 лучших рабочих мест в США из этого списка .Когда я запускаю этот код:

import urllib.request
from bs4 import BeautifulSoup
url = 'https://www.ranker.com/list/most-common-jobs-in-america/american-jobs'
page_opened = urllib.request.urlopen(url)

soup = BeautifulSoup(page_opened, 'html.parser')
jobs_soup = soup.find_all('span','listItem__title')
print(jobs_soup)

Beautiful Soup возвращает то, что я ожидаю, названия должностей, окруженные тегами, за исключением того, что оно идет только в «Учителя средней школы», что составляет только № 25 из 100 заданий.Таким же образом я использовал Beautiful Soup на других веб-страницах без проблем.Есть ли что-то необычное в веб-странице / моем коде, которое приводит к неполному выводу?

1 Ответ

0 голосов
/ 02 февраля 2019

Открыв вкладку сети в инструментах разработчика моего браузера, я увидел, что XHR-запросы выполнялись во время прокрутки, а некоторые ответы содержали элементы списка.Вы смогли получить только первые 24 элемента, потому что эти запросы не были запущены.URL-адрес для одного из запросов:null

Изменив ограничение на 100 и смещение на 0, я смог получить 100 лучших заданий:

import json
from urllib.request import urlopen

# I removed the other query parameters and it still seems to work
url = 'https://cache-api.ranker.com/lists/354954/items?limit=100&offset=0'
resp = urlopen(url)
data = json.loads(resp.read())
job_titles = [item['name'] for item in data['listItems']]
print(len(job_titles))
print([job_titles[0], job_titles[-1]])

Вывод:

100
['Retail salespersons', 'Cleaners of vehicles and equipment']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...