веб-очистка Python - URL не совпадает с результатами Chrome Inspect

1

Я пытаюсь получить некоторые данные из приведенных ниже ссылок, но мои запросы приводят к различным результатам при изменении URL-адреса, путем получения URL-адреса после нажатия на кнопку следующей страницы в нижней части веб-сайта (https://www.carmax.com/cars? location = all).

Код, который работает для исходного URL-адреса

import requests
from bs4 import BeautifulSoup 

car_url = "https://www.carmax.com/cars?location=all"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
r = requests.get(car_url, headers = headers)
html_doc = r.text
soup = BeautifulSoup(html_doc, 'lxml')

# Information that I am looking for
info = soup.find_all('div', class_='vehicle-browse--result--info')

Когда я запускаю этот же код с помощью следующей страницы веб-сайта, в ответе нет класса "class _ = 'vehicle-browse-result-info".

Код с новым URL со следующей страницы

url_test = 'https://www.carmax.com/search?location=all#BT=0&Distance=all&ExposedCategories=249+250+1001+1000+265+999+772&ExposedDimensions=249+250+1001+1000+265+999+772&Page=4&PerPage=20&SortKey=0&StartIndex=80&Zip=20877'
test_request = requests.get(url_test, headers = headers)
html_doc_test = test_request.text
soup_test = BeautifulSoup(html_doc_test, 'lxml')

# This returns a blank object, not providing me the info I need
info_test = soup_test.find_all('div', class_='vehicle-browse--result--info')

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

Для получения дополнительной информации, когда я нажимаю "Осмотреть" при использовании Google Chrome на веб-сайте, я вижу тот же тип информации, что и исходный URL, но по какой-то причине это не переводит код.

  • 0
    Может быть, ответ отличается в зависимости от типа браузера клиента в заголовке запроса? Вы можете это проверить? Или файл cookie помещается в ваш браузер при начальной загрузке сайта?
  • 0
    Как мне это проверить? @MartinSeehafer
Показать ещё 3 комментария
Теги:
web-scraping
beautifulsoup

2 ответа

0

Похоже, страница динамически генерируется. Selenium и драйвер, такой как Chrome, могут загружать введенную DOM и захватывать HTML на лету:

from selenium import webdriver

chrome = webdriver.Chrome()
chrome.get("https://www.carmax.com/search?location=all#BT=0&Distance=all&ExposedCategories=249+250+1001+1000+265+999+772&ExposedDimensions=249+250+1001+1000+265+999+772&Page=4&PerPage=20&SortKey=0&StartIndex=80&Zip=20877")

for elem in chrome.find_elements_by_class_name("vehicle-browse--result--info"):
    print(elem.text) # or just use elem

Выход:

No-haggle price$22,998*Mileage12K6 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16201078

No-haggle price$13,998*Mileage52K46 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:15916654

No-haggle price$40,998*Mileage28K16 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227545

No-haggle price$19,998*Mileage7K0 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16187367

No-haggle price$18,998*Mileage12K95 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227745

No-haggle price$49,998*Mileage10K2 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227961

No-haggle price$23,598*Mileage34K1 Review
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16269716

No-haggle price$24,998*Mileage38K1 Review
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227325

No-haggle price$17,998*Mileage5K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16032863

No-haggle price$15,998*Mileage12K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16033129

No-haggle price$14,598*Mileage56K126 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:15974221

No-haggle price$18,998*Mileage14K2 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227491

No-haggle price$16,998*Mileage20K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16227699

No-haggle price$18,598*Mileage24K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16269723

No-haggle price$14,998*Mileage35K151 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16291864

No-haggle price$15,598*Mileage54K151 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16318227

No-haggle price$14,998*Mileage45K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16402895

No-haggle price$17,998*Mileage12K36 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16416608

No-haggle price$18,998*Mileage24K151 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16246905

No-haggle price$30,998*Mileage33K31 Reviews
GET PRE-QUALIFIED
CarMax Gaithersburg
Gaithersburg, MD
Stock #:16187751
0

Содержимое следующей страницы, созданное JS, вы можете использовать селен вместо запросов

from bs4 import BeautifulSoup
from selenium import webdriver

car_url = "https://www.carmax.com/search?location=all#BT=0&Distance=all&ExposedCategories=249+250+1001+1000+265+999+772&ExposedDimensions=249+250+1001+1000+265+999+772&Page=4&PerPage=20&SortKey=0&StartIndex=80&Zip=20877"
driver = webdriver.Chrome()#copy chromedriver in your python directory
driver.get(car_url)
html_doc = driver.page_source
soup = BeautifulSoup(html_doc, 'html.parser')
print soup.find_all('div', class_='vehicle-browse--result--info')
driver.close()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню