从特定的远程站点PHP

时间:2019-04-12 12:55:55

标签: javascript php web-scraping

我正试图从该站点使用PHP抓取信息,但是我正在寻找的信息似乎是通过Javascript或类似方法生成的。对于采用哪种方法的任何建议,我将不胜感激!

这是我试图从以下站点获取数据的远程站点:http://www.riksdagen.se/sv/webb-tv/video/debatt-om-forslag/yrkestrafik-och-taxi_H601TU11

该页面包含一个视频,并且标题为“Anförandelista”,在视频中有许多指向各个时间点的名称/链接。

我想使用PHP自动获取此列表中的名称和链接并将其存储在数据库中。但是,此信息未包含在HTML源代码中,因此我无法检索它。

关于如何使用自动化脚本远程访问信息的任何想法?还是应该朝哪个方向寻找解决方案?非常感谢任何指针。

2 个答案:

答案 0 :(得分:1)

您可以从页面调用的API中以JSON响应的形式获取此信息。我还不知道PHP,但是Google可以快速显示处理json是可能的,而且非常简单。我在底部给出了一个python脚本示例。

API调用是这个

http://www.riksdagen.se/api/videostream/get/H601TU11

它返回json如下(仅显示摘录。json还包括语音):

探索完整的json响应here


PHP

看看this question,您可以从类似以下内容开始:

$array = json_decode(file_get_contents('http://www.riksdagen.se/api/videostream/get/H601TU11'));

示例Python(如果需要)

import requests
import pandas as pd

r = requests.get('http://www.riksdagen.se/api/videostream/get/H601TU11').json()    
results = []

for item in r['videodata'][0]['speakers']:
    start = item['start']
    duration = item['duration']
    speaker = item['text']
    row = [speaker, start, duration]
    results.append(row)

df = pd.DataFrame(results, columns = ['Speaker', 'Start', 'Duration'])
print(df)

示例输出:

答案 1 :(得分:0)

仅使用PHP解决方案无法获得JS加载的信息。 Curl,file_get_contents和类似选项仅会为您获取服务器响应,它们不会执行JS,因为它是客户端脚本。

为此,您将需要使用无头浏览器(有多种选择:Chromium,具有新的无头模式的Google Chrome或Selenium网络驱动程序只是最受欢迎的几种)