当前位置: 首页 > 面试题库 >

如何使用Python检索动态html内容的值

顾昌翰
2023-03-14
问题内容

我正在使用Python 3,并且正在尝试从网站检索数据。但是,此数据是动态加载的,而我现在拥有的代码不起作用:

url = eveCentralBaseURL + str(mineral)
print("URL : %s" % url);

response = request.urlopen(url)
data = str(response.read(10000))

data = data.replace("\\n", "\n")
print(data)

在尝试查找特定值的地方,我找到的是模板,例如“ {{formatPrice平均数}}”而不是“ 4.48”。

我该如何做才能检索值而不是占位符文本?

编辑:这是我要从中提取信息的特定页面。我试图获取“中位数”值,该值使用模板{{formatPrice平均数}}

编辑2:我已经安装并设置了程序以使用Selenium和BeautifulSoup。

我现在拥有的代码是:

from bs4 import BeautifulSoup
from selenium import webdriver

#...

driver = webdriver.Firefox()
driver.get(url)

html = driver.page_source
soup = BeautifulSoup(html)

print "Finding..."

for tag in soup.find_all('formatPrice median'):
    print tag.text

这是程序执行时的屏幕截图。不幸的是,它似乎没有找到指定“ formatPriceaverage”的任何内容。


问题答案:

假设您正试图从使用javascript模板(例如handlebars之类)呈现的页面获取值,那么这就是任何标准解决方案(即beautifulsouprequests)所能获得的。

这是因为浏览器使用javascript更改了接收到的内容并创建了新的DOM元素。urllib将像浏览器一样执行请求部分,而不是模板呈现部分。本文讨论了三种主要解决方案:

  1. 直接解析ajax JSON
  2. 使用离线Javascript解释器处理SpiderMonkey和Crowbar请求
  3. 使用浏览器自动化工具分解

编辑

从您的评论看来,它是一个由把手驱动的网站。这个答案给出了一个很好的代码示例,可能会有用:

from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://eve-central.com/home/quicklook.html?typeid=34')

html = driver.page_source
soup = BeautifulSoup(html)

# check out the docs for the kinds of things you can do with 'find_all'
# this (untested) snippet should find tags with a specific class ID
# see: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class
for tag in soup.find_all("a", class_="my_class"):
    print tag.text

硒基本上是从您的浏览器获取呈现的HTML,然后您可以使用来自page_source属性的BeautifulSoup对其进行解析。祝好运 :)



 类似资料:
  • 问题内容: 我想使用Python在这样的网页上抓取“正在寻找这些作者:”框中的内容:http : //academic.research.microsoft.com/Search?query=lander 不幸的是,盒子的内容是由JavaScript动态加载的。通常在这种情况下,我可以阅读Javascript来了解发生了什么,或者可以使用Firebug之类的浏览器扩展来了解动态内容的来源。这次没有

  • 问题内容: 免责声明:我在StackOverflow上看到过许多其他类似的帖子,并尝试以相同的方式进行操作,但是它们似乎在此网站上不起作用。 我正在使用Python-Scrapy从koovs.com获取数据。 但是,我无法获得动态生成的产品尺寸。具体来说,如果有人可以引导我从此链接的下拉菜单中获取“不可用”尺寸标签,我将不胜感激。 我可以静态获取尺寸列表,但这样做只能得到尺寸列表,但不能获得其中的

  • 我想使用Python在这样的网页上抓取“你在寻找这些作者吗”框的内容:http://academic.research.microsoft.com/Search?query=lander 不幸的是,该框的内容是由JavaScript动态加载的。通常在这种情况下,我可以阅读Javascript来了解发生了什么,或者我可以使用Firebug之类的浏览器扩展来了解动态内容的来源。这次没有这样的运气。。。

  • 问题内容: 这有点棘手。我猜有一个网页,它使用某种AJAX来基于搜索查询提取内容。当我使用Perl中的get来获取页面时,它将获取php / html后面的脚本代码,但不会获取手动搜索查询时显示的结果。我需要能够获取结果页面的内容。无论如何,在Perl中有这样做吗? 问题答案: 看一下Selenium RC 和Perl中的模块。使用它们,您可以控制真正的Web浏览器。 另一个选项是使用HtmlUn

  • 问题内容: 我有一个具有典型结构的HTML页面: 您认为有可能吗?我已经尝试给html标记添加一个ID,并且没有成功。 不要问我为什么,但这就是我所需要的(我正在与一个特殊的“ mashup builder”站点合作……这是一个很长的故事)。 编辑 :我忘了说 接收内容 中的 脚本必须执行 ,甚至包括使用在内的外部脚本。 问题答案: 使用 jQuery 尝试一下: 在docs.jquery.com

  • 我有一个页面,需要动态创建一个iframe并将其粘贴到页面上的div中。我创建iframe的方式如下: 根据某些条件,我需要:A)将iframe src设置为其他页面,或者B)动态地向iframe添加一些HTML。 我有选项A的罚款,但选项B抛出了安全错误: 在尝试设置HTML之前,是否需要在动态iframe上设置?我怎么会那么做呢?有没有更简单的方法将动态内容附加到动态iframe中? 提前道谢