Разбор HTML с использованием Beautifulsoup дает "Нет" - PullRequest
1 голос
/ 10 ноября 2019

Я четко вижу тег, который мне нужен для того, чтобы получить данные, которые я хочу очистить.

В соответствии с несколькими уроками я делаю точно так же.

Так почему это дает мне «Нет», когда я просто хочу отобразить код между li класс

from bs4 import BeautifulSoup
import requests

    response = requests.get("https://www.governmentjobs.com/careers/sdcounty")
    soup = BeautifulSoup(response.text,'html.parser')

    job = soup.find('li', attrs = {'class':'list-item'})
    print(job)

enter image description here

Ответы [ 3 ]

2 голосов
/ 10 ноября 2019

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

import requests
from bs4 import BeautifulSoup as bs

headers = {'X-Requested-With': 'XMLHttpRequest'}
r = requests.get('https://www.governmentjobs.com/careers/home/index?agency=sdcounty&sort=PositionTitle&isDescendingSort=false&_=', headers=headers)
soup = bs(r.content, 'lxml')
print(len(soup.select('.list-item')))
1 голос
/ 10 ноября 2019

Другим способом обработки динамически загружаемых данных является использование селена вместо запросов для получения источника страницы. Это должно подождать, пока Javascript загрузит данные правильно, а затем предоставит вам соответствующий HTML. Это можно сделать так:

from bs4 import BeautifulSoup
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

url = "<URL>"

chrome_options = Options()  
chrome_options.add_argument("--headless") # Opens the browser up in background

with Chrome(options=chrome_options) as browser:
     browser.get(url)
     html = browser.page_source

soup = BeautifulSoup(html, 'html.parser')
job = soup.find('li', attrs = {'class':'list-item'})
print(job)
1 голос
/ 10 ноября 2019

На исходной странице такого контента нет. Результаты поиска, на которые вы ссылаетесь, загружаются динамически / асинхронно с использованием JavaScript.

Напечатайте переменную response.text, чтобы убедиться в этом. Я получил результат, используя ReqBin . Вы обнаружите, что внутри list-item нет текста.

К сожалению, вы не можете запустить JavaScript с BeautifulSoup .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...