我对网页抓取、编程和StackOverflow还不熟悉,所以我会尽可能清晰地表达我的想法
我正在使用Python请求库尝试从本地的一家电影院连锁店中获取一些信息。当我查看网络部分的Chrome开发者工具响应/预览选项卡时,我可以看到看起来非常干净和有用的JSON:
然而,当我尝试使用请求来获取相同的信息时,我得到的是整个页面内容(一页接一页的html)。在进一步检查Chrome开发者工具中的级联之后,我可以看到有两个名为GetNowPlayingByCity的事件:一个包含JSON信息,另一个似乎是HTML
如何将两者分开,并仅使用Python请求库获取JSON响应?
我已经尝试过修改requests.post(Chrome开发者工具表明这是一个post方法)中的标题,以包含“accept:application/json,text/plain,*/*”,但没有看到我在requests.post中得到的响应有什么不同。目前,我无法解析requests.post响应中的任何JSON,并出现以下错误:
“json.decoder.JSONDecodeError:预期值:第4行第1列(字符3)”
我总是可以尝试解析完整的HTML,但是它太长太复杂了,我更愿意使用友好的JSON信息。任何帮助都将不胜感激
这可能是因为页面发送到浏览器的javascript向API发出请求,以获取有关电影的json信息
您可以尝试直接将请求发送到他们的API(请参见编辑2),使用类似Beautiful Soup的库解析html,也可以使用python中的专用刮取库。我对scrapy有很好的经验。它比请求快得多
编辑:
如果页面使用动态加载的内容(我认为是这种情况),则必须在PhantomJS浏览器中使用selenium,而不是请求。以下是一个例子:
或者你可以load the dynamic content with scrapy
如果你想进入刮削行业,我推荐后者。这将需要更多的时间来学习,但这是一个更好的解决方案
编辑2:
要直接向他们的api发出请求,您只需复制您看到的请求即可。使用google chrome,如果您单击请求并转到“标题”,您可以看到该请求:
之后,您只需使用请求库复制请求:
您可以根据需要修改url,例如,如果它类似于
http://api.movies.com/?page=1&movietype=3
,您可以将movietype=3
修改为movietype=2
以观看不同类型的电影,等等相关问题 更多 >
编程相关推荐