веб-очистка Python - URL не совпадает с результатами Chrome Inspect - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь получить некоторые данные по ссылкам ниже, но мои запросы приводят к другим результатам, когда я меняю 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, но по какой-то причине это не соответствует коду.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Содержание следующей страницы, сгенерированное 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()
0 голосов
/ 02 сентября 2018

Похоже, что страница генерируется динамически. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...