使用Beautiful Soup,urllib2和Python

时间:2016-04-17 02:34:07

标签: php python html beautifulsoup urllib2

我正在尝试使用Beautiful Soup和Python来从网站上获取PHP值。

我还尝试使用lxml库。

有没有办法这样做?或者我应该使用不同的东西?提前谢谢。

遵循的步骤

  1. 查找所需的嵌套HTML标记。在这种情况下" 320"
  2. 解析HTML页面。
  3. 搜索第一个" div"标签。
  4. 尝试搜索" div"的所有孩子。标签
  5. 将整个HTML页面输出到文本文件。
  6. Grep the desired" span"标签名称。
  7. 请注意,该值是PHP变量。
  8. XPATH:

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

    CSS选择器

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

    HTML:

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

    将整个HTML页面输出到.txt文件然后点击元素名称

    | => 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)
    

1 个答案:

答案 0 :(得分: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()