我在业余时间做了一个项目,我遇到了将网页数据导入程序的问题。
这是我目前的代码:
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打印它的任何建议吗?
答案 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
也许这会返回您要查找的信息。