从htmlfi中的JavaScript代码中获取数据

2024-10-01 13:23:53 发布

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

我使用scrapy(Python)从http://www.heteropharmacy.com/outlets.html获取所有地址。城市/城镇下拉列表包含许多城市。每当我选择一个城市时,都会显示新地址。在

但是,服务器没有请求。我在Chrome中使用了firebug-Lite和开发工具。没有向服务器发出POST/GET请求。在

当我查看源代码时,我发现:

<script src="jScript/myScript.js" type="text/javascript"></script>

当“jScript”时/myScript.js”被单击,我将被重定向到http://www.heteropharmacy.com/jScript/myScript.js。这个源代码是一个javascript文件,在下拉框中包含所有城市的所有地址。这些地址在数组中。在

我的问题是如何获得这个javascript代码的html代码,以便使用scrapy提取它。或者我可以直接从javascript文件中提取,我会很感激所有可能的解决方案,并且愿意使用任何API而不仅仅是蹩脚的。在

我在互联网上搜索了很多,我只能为那些向服务器发出请求的情况找到解决方案。在


Tags: 文件服务器comhttp源代码地址htmlwww
3条回答

最好的方法就是使用beauthoulsoup。首先,转换原始数据myScript.js文件到HTML中。您可以使用这个HTML文件来创建soup。在

创建soup之后,使用regex提取所需的数据。 假设你的HTML是在HTML文档中

html_code = html_doc.encode('utf-8')
soup = BeautifulSoup(html_code)
script = soup.find_all("script")

“script”将包含一个可以使用regex解析的javascript文件字符串。希望这有帮助。在

我将提取Javascript代码并使用一些库来执行JS代码并从中检索结果,因为正如我所看到的,代码将生成一个JS数组,您可以提取它。在

也许这个用Python运行JS代码的库可以帮上忙 https://pypi.python.org/pypi/PyExecJS

这里有多种选择:

  • 使用正则表达式直接从javascript提取数据
  • 使用javascript解析器直接从javascript中提取数据(例如slimit-example here
  • {{a3}使用javascript
  • 让一个真正的浏览器在^{}的帮助下执行javascript-浏览器可以是无头的(就像幻影js)

如果您选择使用正则表达式,下面是如何制作州/gt;药店列表的字典:

from pprint import pprint
import re

import requests


url = 'http://www.heteropharmacy.com/jScript/myScript.js'
with requests.Session() as session:
    response = session.get(url)

    pattern = re.compile(r"states_arr\['(\w+)'\]= new Array\((.*?)\);", re.MULTILINE | re.DOTALL)

    results = {state: [item.strip()[1:] for item in pharmacies.split('",')]
               for state, pharmacies in pattern.findall(response.content)}

    pprint(results)

印刷品:

^{pr2}$

相关问题 更多 >