Web Scraping: отсутствующие теги в содержимом запросов - PullRequest
0 голосов
/ 28 февраля 2020

Я учусь Python, и одним из моих первых проектов является очистка веб-страницы Dell для извлечения некоторых данных для их хранения в Zabbix.

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

import requests
from bs4 import BeautifulSoup

my_url = 'https://www.dell.com/support/home/ca/en/cadhs1/product-support/servicetag/0-NE9lVXI4NlpmbjFtRHJBbTF0dDhoQT090/overview'

# UserAgent 
headers = {
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8,pt-BR;q=0.7,pt;q=0.6",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "cross-site",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
    "X-Amzn-Trace-Id": "Root=1-5e5752df-915a054873c751c475708940"
}

# Opening up connection to site
uClient = requests.get(my_url, headers=headers)
page_soup = BeautifulSoup(uClient.content, 'html.parser')  
print(page_soup)

Интересно то, что когда я проверяю страницу, я вижу данные, которые хочу очистить, но когда я печатаю страницу в коде, данных там нет. Кажется, что извлеченные данные являются неполными.

Это часть данных <p id="warrantyExpiringLabel" class="mb-0">Expires 11 DEC. 2022</p>, которую я хочу увидеть в своем скрипте, но ее там нет при печати. ​​

Я читал на некоторых онлайн-форумах, говоря, что некоторые данные вставляются через javascript и поэтому библиотека Beautifulsoup не может извлечь ее. Мне нужно использовать какую-то другую библиотеку, чтобы иметь возможность собирать данные.

Я все еще изучаю Python и Beautifulsoup lib, поэтому мне может понадобиться кто-то, чтобы указать мне правильное направление.

Может кто-нибудь поделиться своими знаниями со мной, чтобы я мог выучить эту библиотеку?

1 Ответ

1 голос
/ 28 февраля 2020
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup
import time

options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)
driver.get("https://www.dell.com/support/home/ca/en/cadhs1/product-support/servicetag/0-NE9lVXI4NlpmbjFtRHJBbTF0dDhoQT090/overview")

time.sleep(1)
soup = BeautifulSoup(driver.page_source, 'html.parser')

for item in soup.findAll("p", id="warrantyExpiringLabel"):
    print(item.text)

driver.quit()

Выход:

Expires  20 JUL 2023
...