有没有什么方法可以使用Python从这个页面中提取命令?

2024-05-23 22:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经使用beautifulsoup对文本进行了一些基本的剪切,但是对于这个页面(http://reference.wolfram.com/language/ref/BarChart.html),有问题的文本被格式化为图像。可以单击每个单独的命令(例如BarChart[{1,2,3}])来复制它并手动粘贴它,但我想知道是否有一种合理的方法可以获得所有143个命令,而不必为每个单独的代码段执行这些操作


Tags: 图像文本命令comrefhttp粘贴html
2条回答

虽然这可能有点过分,但您可以使用selenium,基本上自动执行鼠标单击操作,并使用剪贴板包将复制的文本返回到Python中。大致的想法是:

from selenium import webdriver
import clipboard

driver = webdriver.Chrome()

driver.get("http://reference.wolfram.com/language/ref/BarChart.html")

#get all the image elements
elem: = driver.find_elements_by_tag_name("img")

#click and paste
text_list = []
for elem in elems:
    #clicking on the image element
    elem.click()

    #get text from clipboard
    text = clipboard.paste()

    #check if text is empty
    if text != "":
        text_list.append(text)

正如我所说的,这可能不是最好的方法,您可以查看网站上的clipboard.js文件来检查是否有一个简单的方法。希望有帮助

如果您在与页面交互时查看浏览器的开发工具,您将看到将鼠标悬停在其中一个图像/文本元素上会请求加载该元素的文本。因此,您必须为每个文本发出一个请求才能获得所有这些值。url都是这样的:http://reference.wolfram.com/language/ref/Files/BarChart.en/i_5.txt

因此,首先,您应该找到一种生成所有这些请求的方法。看起来它们都是奇数(i_1.txti_3.txt,等等),它们与div的id相对应

但是这些并不能给你很好看的文本,它有很多标记,文本被转义了:

<pre name='i_5_in' id='i_5_in' class='IFT'>
  BarChart[{{1, 2, 3}, {1, 3, 2}, {5, 2}}, 
  ChartLabels -&gt; {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;}]
</pre><div class='IFU'>
<a name='408182431'></a>http://wolfram.com/xid/0cq0nbvj-g1a1u5</div>

正如一些人所指出的,clipboard.js是启动和处理这些请求的javascript所在。您可以通过检查元素的事件监听器或通过跟踪请求的发起程序堆栈来实现。这有一些行可以用来编写一个Python函数来清除它们。有一个名为PyQuery(docs)的库,它允许您在HTML上使用类似jQuery的选择器,这样可以加快速度

相关问题 更多 >