首页 新闻 会员 周边 捐助

怎么用C语言对动态网页进行批量抓取?

0
悬赏园豆:50 [已解决问题] 解决于 2018-05-30 09:21

抓取的目标网页源代码中找不到目标信息,是抓取的源代码还需要分析还是因为网页是动态所以没抓取到啊?

另外除了通过获取源代码还有其他方法进行网页资料获取吗?

明天周六了的主页 明天周六了 | 初学一级 | 园豆:149
提问于:2018-05-28 10:33
< >
分享
最佳答案
0

如果网页上的内容是通过 js 加载,仅获取网页源码是不够的,可以考虑用 headless chrome 先加载网页,然后等 js 执行完毕了,网页内容稳定了,再把网页内容导出成 html,参考链接:https://developers.google.com/web/updates/2017/04/headless-chrome#cli

收获园豆:50
不如隐茶去 | 小虾三级 |园豆:559 | 2018-05-28 11:11

这网站得翻墙吧?打不开啊...而且这种操作和延迟抓取一样吗?

明天周六了 | 园豆:149 (初学一级) | 2018-05-28 11:17

@明天周六了: 主要是需要让目标网页中的 js 代码执行完毕,这样通过 js 加载的内容才会输出到页面上

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 12:04

@不如隐茶去: 用谷歌的审查元素看网页上的目标信息是通过访问另一段URL得到的,这也算吗

明天周六了 | 园豆:149 (初学一级) | 2018-05-28 13:05

@明天周六了: 你是指 iframe 标签嘛?这样的话也是最好用一个真实的浏览器去加载的。

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 13:07

@不如隐茶去: 源代码里没显示这个标签。如果想要获取类似谷歌审查元素里的源代码也是像你这么说的做吗?哪这和用selenium一个意思吗?没有什么方法能只用程序实现吗?

明天周六了 | 园豆:149 (初学一级) | 2018-05-28 13:16

@明天周六了: 不借助外部软件实现这种功能的方法也是有的,但是至少都要依赖一个带有浏览器内核的第三方库,比如 Windows 上面的 IE 内核就可以作为一个控件加载到你的程序中,如果你想要跨平台,可以试试 CEF(Chromium Embedded Framework) 这种东西,也是可以作为一个库引用到程序中的。不过显然这么做会麻烦很多。不如 selenium 来得方便。

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 14:05

@不如隐茶去: 我现在是只知道有selenium这种方法,不过还没试过,这东西能用C语言编程吗?用它打开网页后又要怎么获取到动态网页的源代码?能用chrome浏览器然后得到审查元素里的源代码吗?

明天周六了 | 园豆:149 (初学一级) | 2018-05-28 14:11

@明天周六了: 用 C 语言操作 selenium 当然可以,就是会挺麻烦的,具体如何获取网页源码,请看 selenium 的文档。

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 16:26

@明天周六了: 你可以参考一下 C++ 驱动 selenium 做网页自动化的样例:https://stackoverflow.com/questions/17345551/web-automation-from-c

可以看到直接用 C 语言调用 selenium 不怎么现实,可以运行一个 selenium Server,然后用 C 语言对这个 Server 发请求来进行操作。

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 16:33

@明天周六了: 刚刚试了一下可以用下面的命令抓取 IT之家的网页,连动态加载的广告都能捕捉下来:

./chrome --headless --virtual-time-budget=10000000 --print-to-pdf --disable-gpu --enable-logging https://www.ithome.com/html/it/361928.htm

或许你可以试试用 C 语言执行这条命令把网页一个一个导出成 pdf。

不如隐茶去 | 园豆:559 (小虾三级) | 2018-05-28 17:06

@不如隐茶去: 十分感谢

明天周六了 | 园豆:149 (初学一级) | 2018-05-30 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册