2016-04-17 2 views
0

Я пытаюсь использовать Beautiful Soup и Python для очистки значения PHP с веб-сайта.Очистить переменную PHP с помощью Beautiful Soup, urllib2 и Python

Я также попытался использовать библиотеку lxml.

Есть ли способ сделать это таким образом? Или я должен использовать что-то другое? Заранее спасибо.

Выполняемых

  1. Найти вложенные HTML теги необходимы. В этом случае «320»
  2. Анализ HTML-страницы.
  3. Поиск первого тега «div».
  4. Попытка поиска всех детей тега «div».
  5. Вывести всю HTML-страницу в текстовый файл.
  6. Grep желаемое имя тега «span».
  7. Обратите внимание, что это значение является переменной PHP.

XPATH:

//*[@id="monetary_offer_content"]/div[1]/div[2]/div/div[1]/h3/span 

CSS Selector

monetary_offer_content > div.monetary_offer > div.offers.clear > div > div.clearfix > h3 > span 

HTML:

<span data-oldoffer="">320</span> 

После вывода всей HTML страницы в текстовый файл, а затем имя оглавлению элемента:

| => cat text.txt | grep data-oldoffer 
     <h3>$<span data-oldoffer><%= value['offer'] %></span></h3> 
     <h3>$<span data-oldoffer><%= value['offer'] %></span></h3> 

кода Python

from bs4 import BeautifulSoup 
import urllib2 
url="http://website_url.com" 
page=urllib2.urlopen(url) 
soup = BeautifulSoup(page.read(), "lxml") 
print(soup) 
+0

Вы можете поделиться URL? –

ответ

1

Похоже значение динамически устанавливается с помощью JavaScript в браузере. Исходный код страницы, загруженный с urllib2, содержит только исходный HTML.

Что вы можете сделать, это запустить и контролировать реальный браузер через selenium, образец:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.select import Select 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

url = "http://website_url.com" 

driver = webdriver.Firefox() 
wait = WebDriverWait(driver, 10) 
driver.get(url) 

elm = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#monetary_offer_content > div.monetary_offer > div.offers.clear > div > div.clearfix > h3 > span"))) 
print(elm.text) 

driver.close() 
+1

Спасибо! Я не уверен, почему я был ниспослан. Я чувствую, что я никогда не могу задавать вопрос, если кто-то не будет склонять его к S.O. Я стараюсь сделать этот вопрос максимально ясным и презентабельным. Я пытаюсь исследовать этот вопрос часами, прежде чем опубликовать свои собственные. Тьфу. Настолько разочаровывающе. Поэтому, когда браузер отображает веб-страницу, он будет устанавливать значение каждый раз, но если я использую urllib2, он будет содержать только начальный HTML. Спасибо вам за разъяснение! – Speakeasys

+0

@Speakeasys Я лично не думаю, что ваш вопрос заслуживает нисходящего звена, поскольку он ясен, имеет структуру и показывает ваши попытки, но это только мое мнение, я думаю. – alecxe

+1

@Speakeasys, хотя не забудьте следовать правилам, см. Http://stackoverflow.com/help/someone-answers. И просмотрите свои предыдущие вопросы и посмотрите, есть ли ответы, заслуживающие того, чтобы их приняли. – alecxe

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