如何打印div data-reactid?

时间:2016-10-07 13:27:45

标签: python html regex

我在业余时间做了一个项目,我遇到了将网页数据导入程序的问题。

这是我目前的代码:

import urllib
import re

htmlfile = urllib.urlopen("http://www.superliga.dk/klub/aab?sub=squad")

htmltext = htmlfile.read()

regex = r'<div data-reactid=".3.$squad content.0.$=11:0.0.0.0.1:0.2.0.0">([^<]*)</div>'

pattern = re.compile(regex)

goal = re.findall(pattern,htmltext)

print goal

除了这部分外,它的工作正常:

regex = r'<div data-reactid=".3.$squad content.0.$=11:0.0.0.0.1:0.2.0.0">([^<]*)</div>'

我无法使用此reactid显示网页上的所有值,而我无法找到此问题的任何解决方案。 有关如何让Python打印它的任何建议吗?

1 个答案:

答案 0 :(得分:1)

您正试图匹配您在浏览器的开发者控制台上看到的标记,对吧? 不幸的是,你看到的html只是&#34;最终形式&#34;动态页面:你用urlopen下载的内容只是网页的骨架,然后在浏览器中使用从某些后端服务器获取的数据通过javascript动态填充其他元素。

如果您尝试打印htmltest中存储的实际值,您将发现与正在尝试与正则表达式匹配的内容,因为它错过了通常执行的所有进一步处理javascript。

您可以尝试做的是监控(通过开发控制台)获取的资源并对API调用进行反向工程以恢复所需的信息。有可能这些API调用的响应是JSON格式,或者具有比html主体更容易解析的结构方式。

更新:例如,在Chrome的开发工具中,我可以看到异步调用,如:

http://ss2.tjekscores.dk/pro-stats/tournaments/46/top-players?sortBy=eventsStats.goals&limit=5&skip=0&positionId=&q=&seasonId=10392&teamId[]=8470

也许这会返回您要查找的信息。