用 Beautiful Soup、urllib2 和 Python 抓取一个 PHP 变量
Scrape a PHP variable with Beautiful Soup, urllib2, and Python
我正在尝试使用 Beautiful Soup 和 Python 从网站上抓取 PHP 值。
我也尝试过使用 lxml 库。
有这样的方法吗?或者我应该使用不同的东西吗?提前致谢。
遵循的步骤
- 查找所需的嵌套 HTML 标签。在本例中为“320”
- 解析 HTML 页。
- 搜索第一个 "div" 标签。
- 尝试搜索 "div" 标签的所有子标签。
- 将整个 HTML 页面输出到文本文件。
- Grep 所需的 "span" 标签名称。
- 请注意,该值是一个 PHP 变量。
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文件然后grep元素名后:
| => 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)
看起来该值是通过 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()
我正在尝试使用 Beautiful Soup 和 Python 从网站上抓取 PHP 值。
我也尝试过使用 lxml 库。
有这样的方法吗?或者我应该使用不同的东西吗?提前致谢。
遵循的步骤
- 查找所需的嵌套 HTML 标签。在本例中为“320”
- 解析 HTML 页。
- 搜索第一个 "div" 标签。
- 尝试搜索 "div" 标签的所有子标签。
- 将整个 HTML 页面输出到文本文件。
- Grep 所需的 "span" 标签名称。
- 请注意,该值是一个 PHP 变量。
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文件然后grep元素名后:
| => 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)
看起来该值是通过 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()