Webscraping / Beautifulsoup / иногда нет возврата? - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь удалить некоторую информацию с веб-страницы, и на одной странице она работает нормально, но на другой веб-странице она не работает, потому что я получаю только возвращаемое значение none

Этот код / ​​веб-страница работает нормально:

# https://realpython.com/beautiful-soup-web-scraper-python/
import requests
from bs4 import BeautifulSoup

URL = "https://www.monster.at/jobs/suche/?q=Software-Devel&where=Graz"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")

name_box = soup.findAll("div", attrs={"class": "company"})
print (name_box)

Но с этим кодом / веб-страницей я получаю только None в качестве возвращаемого значения

# https://www.freecodecamp.org/news/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe/

import requests
from bs4 import BeautifulSoup

URL = "https://www.bloomberg.com/quote/SPX:IND"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")


name_box = soup.find("h1", attrs={"class": "companyName__99a4824b"})
print (name_box)

Почему это?

(сначала я думал, что из-за номера в классе на второй веб-странице "companyName__99a4824b" он динамически меняет имя класса - но это не тот случай - когда я refre sh веб-страница это все то же имя класса ...)

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Причина, по которой вы получаете None, заключается в том, что страница Bloomberg использует Javascript для загрузки своего контента, пока пользователь находится на странице.

BeautifulSoup просто возвращает вам html из страница, как только она достигает страницы, которая не содержит companyName_99a4824b class-tag.

Только после того, как пользователь дождался полной загрузки страницы, html включает желаемый tag.

Если вы хотите очистить эти данные, вам нужно использовать что-то вроде Selenium , которое вы можете попросить подождать, пока нужный элемент страницы не будет готов.

0 голосов
/ 13 апреля 2020

Сайт блокирует скребки, проверьте заголовок:

print(soup.find("title"))

Чтобы обойти это, вы должны использовать настоящий браузер, который может работать JavaScript. Инструмент под названием Selenium может сделать это для вас.

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