从数据表中抓取数据
Scraping data from DataTables
我的任务是从 Wall Street Journal 中抓取一些数据。
选择城市后,给我一个漂亮的,sortable,分页table;但是,在下载 HTML 源后,我无法找到任何数据。
一些侦探工作显示 DataTables 正在显示数据,但我无法召唤 scriptable-data。
如何通过脚本访问 DataTables 中的数据?
似乎提交按钮调用了一个 AJAX 请求来检索数据,这意味着数据不包含在页面源中,您可以通过浏览器实用程序跟踪网络。顺便说一下,我发现正在向 this url 发出 AJAX 请求,其中包含一些定义其搜索条件的参数,并且在请求此 url 之后返回的响应来了采用 JSON 格式,非常容易解析,幸运的是该服务不需要身份验证方法,这意味着您可以下载所有可用数据。
Example url,玩得开心:)
您可以尝试以下 curl 调用的变体。如果你不确定从哪里开始,最好的办法是在你最喜欢的浏览器中打开你的开发者控制台,并在你引入数据时观察网络部分。从我看来,很明显他们正在使用各种数据源——地图、医生列表、每个的内容。他们有一个相当复杂的小应用程序。
curl 'http://projects.wsj.com/medicarebilling/js/doc-cards.json' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: http://projects.wsj.com/medicarebilling/' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: __gads=ID=646810c03a66f80b:T=1427824722:S=ALNI_MbI1faJHjFHYyBE5Rc3RQEAACeljg; DJCOOKIE=ORC%3Dna%2Cus%7C%7CFCFGOOGLE%3D0%7C%7CFCFEXPGOOGLE%3D1431107109182; wsjregion=na%2Cus; utag_main=v_id:014c70fc41b60002799e4a2c78f90d078006007000fb8$_sn:3$_ss:1$_st:1431022512625$_pn:1%3Bexp-session$ses_id:1431020712625%3Bexp-session; s_fid=2A4A81015DE138F0-0436DAF9EC0F16F9; bkuuid=pjKMOz6q99OAYVkD; cX_P=i2xkpuyp35cvld6r; s_vnum=1432229868915%26vn%3D2; rsi_ct=2015_5_13:2; s_cc=true; s_invisit=true; gpv_pn=WSJ_infogrfx_interactive_MEDDATA1214_Medicare%20Unmasked%3A%20Behind%20the%20Numbers; s_sq=%5B%5BB%5D%5D' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed
我的任务是从 Wall Street Journal 中抓取一些数据。 选择城市后,给我一个漂亮的,sortable,分页table;但是,在下载 HTML 源后,我无法找到任何数据。
一些侦探工作显示 DataTables 正在显示数据,但我无法召唤 scriptable-data。
如何通过脚本访问 DataTables 中的数据?
似乎提交按钮调用了一个 AJAX 请求来检索数据,这意味着数据不包含在页面源中,您可以通过浏览器实用程序跟踪网络。顺便说一下,我发现正在向 this url 发出 AJAX 请求,其中包含一些定义其搜索条件的参数,并且在请求此 url 之后返回的响应来了采用 JSON 格式,非常容易解析,幸运的是该服务不需要身份验证方法,这意味着您可以下载所有可用数据。 Example url,玩得开心:)
您可以尝试以下 curl 调用的变体。如果你不确定从哪里开始,最好的办法是在你最喜欢的浏览器中打开你的开发者控制台,并在你引入数据时观察网络部分。从我看来,很明显他们正在使用各种数据源——地图、医生列表、每个的内容。他们有一个相当复杂的小应用程序。
curl 'http://projects.wsj.com/medicarebilling/js/doc-cards.json' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: http://projects.wsj.com/medicarebilling/' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: __gads=ID=646810c03a66f80b:T=1427824722:S=ALNI_MbI1faJHjFHYyBE5Rc3RQEAACeljg; DJCOOKIE=ORC%3Dna%2Cus%7C%7CFCFGOOGLE%3D0%7C%7CFCFEXPGOOGLE%3D1431107109182; wsjregion=na%2Cus; utag_main=v_id:014c70fc41b60002799e4a2c78f90d078006007000fb8$_sn:3$_ss:1$_st:1431022512625$_pn:1%3Bexp-session$ses_id:1431020712625%3Bexp-session; s_fid=2A4A81015DE138F0-0436DAF9EC0F16F9; bkuuid=pjKMOz6q99OAYVkD; cX_P=i2xkpuyp35cvld6r; s_vnum=1432229868915%26vn%3D2; rsi_ct=2015_5_13:2; s_cc=true; s_invisit=true; gpv_pn=WSJ_infogrfx_interactive_MEDDATA1214_Medicare%20Unmasked%3A%20Behind%20the%20Numbers; s_sq=%5B%5BB%5D%5D' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed