Я пытаюсь получить некоторые данные из приведенных ниже ссылок, но мои запросы приводят к различным результатам при изменении URL-адреса, путем получения URL-адреса после нажатия на кнопку следующей страницы в нижней части веб-сайта (https://www.carmax.com/cars? location = all).
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_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, но по какой-то причине это не переводит код.
Похоже, страница динамически генерируется. 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
Содержимое следующей страницы, созданное 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()