屏幕抓取(也称为网络抓取或数据抓取)是一种用于从用户界面收集和解析信息的软件技术。如果您的问题是关于从网站或Web-API进行抓取,请使用[web-scraping]标记。
我有使用 xpath 爬行的 HTML 网页。某个节点的 etree.tostring 给了我这个字符串: <!-- function escramble_758(){ var a,b,c a='+1 ' b='84-' a...</desc> <question vote="78"> <p>我有使用 xpath 爬行的 HTML 网页。某个节点的 <pre><code>etree.tostring</code></pre> 给出了这个字符串:</p> <pre><code><script> <!-- function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' document.write(a+c+b) } escramble_758() //--> </script> </code></pre> <p>我只需要<pre><code>escramble_758()</code></pre>的输出。我可以编写一个正则表达式来弄清楚整个事情,但我希望我的代码保持整洁。最好的选择是什么?</p> <p>我正在浏览以下库,但没有看到确切的解决方案。他们中的大多数人都试图模拟浏览器,这使得事情变得缓慢。</p> <ul> <li><a href="http://code.google.com/p/python-spidermonkey/">http://code.google.com/p/python-spidermonkey/</a>(清楚地说<pre><code>it's not yet possible to call a function defined in Javascript</code></pre>)</li> <li><a href="http://code.google.com/p/webscraping/">http://code.google.com/p/webscraping/</a>(没有看到任何 JavaScript 内容,我可能是错的)</li> <li><a href="http://pypi.python.org/pypi/selenium">http://pypi.python.org/pypi/selenium</a>(模拟浏览器)</li> </ul> <p>编辑:<em>一个例子会很棒..(准系统就可以)</em></p> </question> <answer tick="false" vote="74"> <p>您还可以使用 Js2Py,它是用纯 python 编写的,能够执行 javascript 并将其翻译为 python。支持几乎整个 JavaScript,甚至标签、getter、setter 和其他很少使用的功能。 </p> <pre><code>import js2py js = """ function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' document.write(a+c+b) } escramble_758() """.replace("document.write", "return ") result = js2py.eval_js(js) # executing JavaScript and converting the result to python string </code></pre> <p>Js2Py 的优点包括可移植性以及与 python 的极其轻松的集成(因为基本上 JavaScript 正在被翻译为 python)。 </p> <p>安装:</p> <pre><code>pip install js2py </code></pre> </answer> <answer tick="true" vote="58"> <p>使用<a href="https://code.google.com/p/pyv8/" rel="noreferrer">PyV8</a>,我可以做到这一点。但是,我必须将 <pre><code>document.write</code></pre> 替换为 <pre><code>return</code></pre>,因为没有 DOM,因此没有 <pre><code>document</code></pre>。</p> <pre><code>import PyV8 ctx = PyV8.JSContext() ctx.enter() js = """ function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' document.write(a+c+b) } escramble_758() """ print ctx.eval(js.replace("document.write", "return ")) </code></pre> <p>或者您可以创建一个模拟文档对象</p> <pre><code>class MockDocument(object): def __init__(self): self.value = '' def write(self, *args): self.value += ''.join(str(i) for i in args) class Global(PyV8.JSClass): def __init__(self): self.document = MockDocument() scope = Global() ctx = PyV8.JSContext(scope) ctx.enter() ctx.eval(js) print scope.document.value </code></pre> </answer> <answer tick="false" vote="33"> <p>还有一个解决方案,因为 PyV8 似乎没有维护并且依赖于旧版本的 libv8。 </p> <p><a href="https://github.com/sqreen/PyMiniRacer" rel="noreferrer">PyMiniRacer</a> 它是 v8 引擎的包装器,可与新版本配合使用并得到积极维护。</p> <p><pre><code>pip install py-mini-racer</code></pre></p> <pre><code>from py_mini_racer import py_mini_racer ctx = py_mini_racer.MiniRacer() ctx.eval(""" function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' return a+c+b; } """) ctx.call("escramble_758") </code></pre> <p>是的,您必须按照其他人的建议将 <pre><code>document.write</code></pre> 替换为 <pre><code>return</code></pre> </p> </answer> <answer tick="false" vote="10"> <p>您可以使用 js2py 上下文来执行 js 代码并使用模拟文档对象从 document.write 获取输出:</p> <pre><code>import js2py js = """ var output; document = { write: function(value){ output = value; } } """ + your_script context = js2py.EvalJs() context.execute(js) print(context.output) </code></pre> </answer> <answer tick="false" vote="9"> <p>您可以使用 <a href="https://github.com/psf/requests-html" rel="noreferrer">requests-html</a> 它将在下面下载并使用 chromium。</p> <pre><code>from requests_html import HTML html = HTML(html="<a href='http://www.example.com/'>") script = """ function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' return a+c+b; } """ val = html.render(script=script, reload=False) print(val) # +1 425-984-7450 </code></pre> <p>更多信息请阅读<a href="https://requests-html.kennethreitz.org/#using-without-requests" rel="noreferrer">这里</a></p> </answer> <answer tick="false" vote="6"> <p>quickjs应该是quickjs出来之后最好的选择。 只需<pre><code>pip install quickjs</code></pre>,您就可以开始了。</p> <p>根据README上的例子修改。</p> <pre><code>from quickjs import Function js = """ function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' document.write(a+c+b) escramble_758() } """ escramble_758 = Function('escramble_758', js.replace("document.write", "return ")) print(escramble_758()) </code></pre> <p><a href="https://github.com/PetterS/quickjs" rel="noreferrer">https://github.com/PetterS/quickjs</a></p> </answer> <answer tick="false" vote="5"> <p>虽然已经晚了,但你可以使用 pyv8 的后继者,它由一个名为 CloudFlare 的信誉良好的组织(主观)定期维护。这是存储库 URL:</p> <p><a href="https://github.com/cloudflare/stpyv8" rel="noreferrer">https://github.com/cloudflare/stpyv8</a></p> </answer> <answer tick="false" vote="5"> <p><a href="https://github.com/Distributive-Network/PythonMonkey" rel="noreferrer">PythonMonkey</a> 是一个使用 Firefox JS 引擎的新替代方案。</p> <p>只需<pre><code>pip install pythonmonkey</code></pre>即可开始。</p> <pre><code>import pythonmonkey as pm some_js_code = """ function escramble_758() { var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' return a+c+b; } escramble_758() """ res = pm.eval(some_js_code) print(res) # +1 425-984-7450 </code></pre> <hr/> <p>您还可以使用 <pre><code>pythonmonkey.require</code></pre></p> 直接从 Python 获取 JavaScript 文件 </answer> <answer tick="false" vote="0"> <p>2024 年,PyMiniRacer 不再维护。 新的 SotA 是它的叉子 <a href="https://bpcreech.com/PyMiniRacer/" rel="nofollow noreferrer">https://bpcreech.com/PyMiniRacer/</a></p> <p><pre><code>pip install mini-racer</code></pre></p> <pre><code>from py_mini_racer import MiniRacer ctx = MiniRacer() ctx.eval(""" function escramble_758(){ var a,b,c a='+1 ' b='84-' a+='425-' b+='7450' c='9' return a+c+b; } """) ctx.call("escramble_758") </code></pre> </answer> </body></html>
我正在尝试弄清楚是否可以以编程方式导航 Linux shell 应用程序 - 基于文本。 具体来说,我想通过使用 PHP 和 phpSecLib 来实现这一点,但如果你......
请原谅我相对较少的硒知识,但我想做的是使用 servicenow 测试实例(开发人员网站允许您免费设置它们),并在那里我试图找到 el...
Powershell Invoke-WebRequest 可以工作,但 Python 请求不行
这是一个奇怪的情况,Powershell Invoke-WebRequest 按预期工作,而 Python 请求却没有。 我正在尝试使用 python 抓取电子商务网站。刮的一部分...
我尝试过获取graph.facebook.com/v20.0/1****************3_7****************1/comments,其中 1****************3 是有效的用户 ID,7****************1 是有效的(且公开的)帖子 ID。 不幸的是,...
我正在使用Python从Rightmove中抓取一些数据。目前,我必须手动查找 rightmove 邮政编码 ID 才能生成 URL。有没有办法通过 API 来做到这一点? 为了考试...
我知道以前有人问过这个问题,但我找不到 Node.js 的好答案 我需要服务器端从获取的 HTML 页面中提取纯文本(无标签、脚本等)。 我知道该怎么做...
如何找到用react制作的下拉菜单的html/react代码?
我正在使用 javascript 和 puppeteer 来抓取似乎是在 React 中制作的网站上的信息。有一个包含一些选项的下拉菜单,触发器是一个包含跨度文本的按钮元素。
我正在使用 BeautifulSoup,好的,正在抓取网站。但在这个网站中有三个列表按钮和四个其他按钮。每当我点击其中一个按钮时,网站就会发生变化......
我无法从该网站抓取域名?当我调用response.json()时,Postman返回json()但通过异常请求
我想从以下网站抓取域名和社交链接(linkedin、twitter)电子邮件。 https://cloud28plus.com/en/partner/resecurity--inc- 我尝试从网络请求中获取数据...
TRAC 移民网站提供了德克萨斯州每个城市按月和按年 ICE 驱逐出境的数据。我想将此数据下载到 R 中,但没有可用的数据文件。我
我正在尝试找出我应该使用的正则表达式是什么,以便从 gov.uk 网站上抓取一些数据。 基本上,我在以下 URL 上使用 file_get_contents:
我有这张地图,https://maps.google.com/maps/ms?msa=0&msid=211195694269703855460.0004a7072cf25d4660761&ie=UTF8&ll=41.40205,2.157927&spn=0.103847,0.1331 32&来源=嵌入 我会...
有没有办法操纵 Discord.py 异步函数中参数的执行顺序?
首先,如果我在这个问题上使用了错误的术语,我深表歉意。希望我能提供详细信息。 我正在尝试发送文件(本地图像)并使用命令等待
有没有办法让同一个IP在Google搜索上发出超过10K的请求?
我目前正在开发一个需要从 Google 搜索结果中抓取数据的应用程序。例如 google.com/search?q=domain.com 等。但谷歌在做了一些之后屏蔽了我的 IP 地址
我正在从亚马逊抓取数据用于教育目的,但我在 cookie 和反机器人方面遇到了一些问题。 我设法抓取数据,但有时,cookie 不会出现在响应中,o...
Selenium - 如何在Python中获取特定父类下的href属性
我正在尝试获取特定类下的 href 属性 这是 HTML 的示例 该类和 href 在整个页面中重复多次 我已经尝试过以下方法,但是...
我必须使用 Java 1.6 对 vt200 telnet 连接进行屏幕抓取。 我尝试欺骗并使用带有 InputStrem 和 OutputStream 的简单 telnet 连接,但服务器很挑剔,而且,w...
我正在尝试编译页面内的链接列表。但是,打印列表时输出是一堆随机数 links = driver.find_elements(By.CSS_SELECTOR, "meta[content*='www.a...