我想从另一个url获取数据,我使用的是urllib和Beautiful Soup,我的数据在table标记中(我已经用Firefox控制台找到了)。但是当我试图使用他的id获取表时,结果是None,那么我想这个表必须通过一些js代码动态添加。
我已经尝试了所有这两个解析器,但仍然无法获取表数据。
我还试过一件事:
web = urllib.urlopen("my url")
html = web.read()
soup = BeautifulSoup(html, 'lxml')
js = soup.find("script")
ss = js.prettify()
print ss
结果:
<script type="text/javascript">
myPage = 'ETFs';
sectionId = 'liQuotes'; //section tab
breadCrumbId = 'qQuotes'; //page
is_dartSite = "quotes";
is_dartZone = "news";
propVar = "ETFs";
</script>
但现在我不知道如何获取这些js变量的数据。
现在我有两个选项,要么获取表内容,要么获取js变量,其中任何一个都可以完成我的任务,但不幸的是,我不知道如何获取这些变量,所以请告诉我如何才能解决任何一个问题。
谢谢
编辑
这将使用re模块来提取数据并将其作为JSON加载:
问题是脚本标记偏移量是硬编码的,并且没有可靠的方法在页面中定位它。对页面的更改可能会破坏您的代码。
原始答案
您可以从http://www.nasdaq.com/quotes/nasdaq-100-stocks.aspx?render=download下载同一数据的CSV表示,而不是尝试对数据进行屏幕擦写。
然后使用Pythoncsv模块来解析和处理它。这不仅更方便,而且将是一个更具弹性的解决方案,因为对HTML的任何更改都可能很容易破坏您的屏幕抓取代码。
否则,如果查看实际的HTML,您将发现数据在以下脚本标记中的页面中可用:
只需添加到@mhawke的答案中,而不是硬编码脚本标记的偏移量,您可以循环遍历所有脚本标记并匹配与您的模式匹配的脚本标记
相关问题 更多 >
编程相关推荐