2015-10-13 4 views
2

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

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

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get('http://groceries.asda.com/asda-webstore/pages/landing/home.shtml#!product/910000800509') 
content = browser.page_source 
print(content[42000:43000]) 
browser.close() 

Это только черновик, который будет печатать содержимое, включая элемент интереса <span class="prod-price-inner">£13.00</span>.

Как я мог получить элемент интереса без открытия браузера или даже без браузера?

редактировать: Я ранее пытался использовать urllib или в bashwget, которые оба не имеют необходимых интерпретации JavaScript.

+0

Вы можете использовать php? –

+0

Я планирую создать небольшой скрипт Python. –

+0

Хорошо, я работаю над этим :) Я отправлю свой ответ немного. Просто чтобы убедиться, что я понял, вам нужен элемент цены, не так ли? –

ответ

2

Как уже упоминалось другие ответы, это веб-страница требует JavaScript для отображения контента, поэтому вы не можете просто получить и обработать страницу с помощью lxml, Beautiful Soup или аналогичной библиотеки. Но есть много проще способ получить нужную информацию.

Я заметил, что ссылка, которую вы предоставили, извлекает данные из внутреннего API структурированным способом. Похоже, что номер продукта равен 910000800509 на основе URL. Если вы посмотрите на вкладку «Сеть» в инструментах разработчика Chrome (или эквивалентных средствах разработчика вашего браузера), вы увидите, что запрос GET делается по следующему URL-адресу: http://groceries.asda.com/api/items/view?itemid=910000800509.

Вы можете сделать запрос, как это с только json и requests модулей:

import json 
import requests 

url = 'http://groceries.asda.com/api/items/view?itemid=910000800509' 
r = requests.get(url) 
price = r.json()['items'][0]['price'] 

print price 
£13.00 

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

+0

Элегантный, простой и функциональный! –

+0

Хотелось бы узнать, как вы нашли запрос GET. Кроме того, этот номер продукта '910000456105', похоже, не работает, я всегда получаю цену' 0,001' .. от URL 'http: // бакалейных товаров. asda.com/продукт/консервы-лагеры/tennents-lager/910000456105' .. кроме этого, отлично! –

+0

Я бы отредактировал свой комментарий, но уже слишком поздно. Похоже, что продукт в настоящее время недоступен, поэтому цена. –

1

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

После осмотра страницы, которую вы пытаетесь разобрать:

http://groceries.asda.com/asda-webstore/pages/landing/home.shtml#!product/910000800509

я понял, что он отображает только содержание, если javascript включен, основываясь на том, что вам нужно использовать реальныебраузер.


Вывод:

путь, если вам нужно автоматизировать, является:

selenium

Смежные вопросы