当前位置:编程学习 > C#/ASP.NET >>

如何用C#获取网页中js或ajax执行后的源码

如题,正在做一个网页爬虫,静态网页都可以获取,现在是一些动态网页,或伪静态页面获取不到源码,就是网页中的js或ajax执行后的页面源码,请问有什么办法? --------------------编程问答-------------------- 自己顶一个!!!! --------------------编程问答-------------------- google获取了吗?百度获取了吗? --------------------编程问答-------------------- 用webbrowser加载执行。 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
用webbrowser加载执行。

具体怎么获取了.能说得具体些吗? --------------------编程问答--------------------
引用 2 楼 sp1234 的回复:
google获取了吗?百度获取了吗?

假如我要获取一个网页中的全部链接,但是有些链接在网页的源码中根本不显示,为啥?是因为需要经过js执行后,所有链接才会出现.所以我想获取,前辈你能给点意见吗? --------------------编程问答-------------------- 估计只能使用WebBrowser了。WebBrowser会执行js.
但是js执行完毕是没有事件通知的,只能设置个定时器。到一定时间读取WebBrowser的内容。
--------------------编程问答--------------------
引用 6 楼 findcaiyzh 的回复:
估计只能使用WebBrowser了。WebBrowser会执行js.
但是js执行完毕是没有事件通知的,只能设置个定时器。到一定时间读取WebBrowser的内容。

具体实现怎么做,麻烦啦 --------------------编程问答--------------------
引用 7 楼 vgxpm 的回复:
Quote: 引用 6 楼 findcaiyzh 的回复:

估计只能使用WebBrowser了。WebBrowser会执行js.
但是js执行完毕是没有事件通知的,只能设置个定时器。到一定时间读取WebBrowser的内容。

具体实现怎么做,麻烦啦


webbrowser就是一个winform的浏览器控件,可以打开网页。打开网页后webbrowser有document对象,从document对象里可以获取网页的链接,当然跨域的ifream里的链接获取不到,需要一些其他办法才能跨域获取ifream里的链接 --------------------编程问答-------------------- 6楼正解!想要深入分析还是把你要分析的网址和对象贴出来才能帮你分析!对于ajax加载后的内容只能通过定时器去获取。 --------------------编程问答--------------------
引用 9 楼 xtfnpgy 的回复:
6楼正解!想要深入分析还是把你要分析的网址和对象贴出来才能帮你分析!对于ajax加载后的内容只能通过定时器去获取。

比如我把"http://www.bbsgxu.com/"这个网址作为种子url,当解析这个页面时,会爬取到标题为"招聘求职"这个链接,若进入"招聘求职"这个链接爬取,只能爬取到第一页"http://www.bbsgxu.com/thread.php?fid-58.html"中的链接,那第2"http://www.bbsgxu.com/thread.php?fid-58-page-2.html"页...第115页中链接怎么获取?
所以我在想经过js执行后,这些所有分页中的链接都可以获取到.
如果我说的不清楚,你们可以进入链接看看.谢谢啊 --------------------编程问答-------------------- 1.没有有效率要求的话就用6L的方法
2.有效率要求的话 你只能去分析ajax提交的路径和参数了 --------------------编程问答--------------------
引用 10 楼 vgxpm 的回复:
Quote: 引用 9 楼 xtfnpgy 的回复:

6楼正解!想要深入分析还是把你要分析的网址和对象贴出来才能帮你分析!对于ajax加载后的内容只能通过定时器去获取。

比如我把"http://www.bbsgxu.com/"这个网址作为种子url,当解析这个页面时,会爬取到标题为"招聘求职"这个链接,若进入"招聘求职"这个链接爬取,只能爬取到第一页"http://www.bbsgxu.com/thread.php?fid-58.html"中的链接,那第2"http://www.bbsgxu.com/thread.php?fid-58-page-2.html"页...第115页中链接怎么获取?
所以我在想经过js执行后,这些所有分页中的链接都可以获取到.
如果我说的不清楚,你们可以进入链接看看.谢谢啊


静态页面什么的最简单了 --------------------编程问答-------------------- httprequest就可以搞定  --------------------编程问答--------------------
引用 13 楼 Hsuifengershi 的回复:
httprequest就可以搞定 

静态页面我知道,简单不用你说我也会.上面的不是真正意义上的静态页面吧,我上面说从种子url开始爬取,只能爬取到"http://www.bbsgxu.com/thread.php?fid-58.html"页面中链接,第2页至-第115页中链接获取不到.需要点击按钮也就是执行js才可以跳转到其它页面. --------------------编程问答--------------------
引用 11 楼 Hsuifengershi 的回复:
1.没有有效率要求的话就用6L的方法
2.有效率要求的话 你只能去分析ajax提交的路径和参数了

最后肯定要考虑效率,分析ajax提交路径和参数这种方法不知如何入手?能推荐一些资料或博客介绍么?谢谢 --------------------编程问答--------------------
你可以获取页面上的总页数不

你可以for循环 页面地址不

for
  url+i

--------------------编程问答--------------------
引用 15 楼 vgxpm 的回复:
Quote: 引用 11 楼 Hsuifengershi 的回复:

1.没有有效率要求的话就用6L的方法
2.有效率要求的话 你只能去分析ajax提交的路径和参数了

最后肯定要考虑效率,分析ajax提交路径和参数这种方法不知如何入手?能推荐一些资料或博客介绍么?谢谢

Google浏览器 F12  --------------------编程问答--------------------
引用 16 楼 Hsuifengershi 的回复:

你可以获取页面上的总页数不

你可以for循环 页面地址不

for
  url+i
哥哥,这种情况是特殊情况,难道所有网址都是以这种形式组成的吗?真实情况不是通过执行js跳转到另外的页面吗? --------------------编程问答--------------------
擦 你到底想干什么

你的http://www.bbsgxu.com/thread.php?fid-58-page-17.html这个就是有规则的url

无规则的url 你自求多福把 --------------------编程问答-------------------- 假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分... --------------------编程问答--------------------
引用 19 楼 Hsuifengershi 的回复:

擦 你到底想干什么

你的http://www.bbsgxu.com/thread.php?fid-58-page-17.html这个就是有规则的url

无规则的url 你自求多福把

我是举个例子,,因为在爬取网页的时候,你是不知道你所爬取的网页的网址是什么形式的,就如我上面提到的,如果不考虑js执行,那我就只能爬取到第一页中的链接,其他页我是会漏掉的,所以我在想是不是获取到经过js执行后的源码,当解析第一页页面源码(js执行后)时,是可以找到第二页链接的,依次..是可以找到所有链接的.啊,不知我说清楚了没? --------------------编程问答--------------------
清楚了 给我几分吧 升裤衩 --------------------编程问答-------------------- 你如果是爬站的话
    就是把每个页面的连接都爬下来 然后根据爬到了连接在去爬 判断是否是本站页面的简单有效的方法就是判断域名

如果是爬目标网站
    这个就需要分析网站的url构造了 --------------------编程问答-------------------- 用 WebBroswer 控件,结合 Microsoft.mshtml.dll 中的方式可以取得网页中所有生成后的源码及所有页面控件。 --------------------编程问答--------------------
引用 23 楼 Hsuifengershi 的回复:
你如果是爬站的话
    就是把每个页面的连接都爬下来 然后根据爬到了连接在去爬 判断是否是本站页面的简单有效的方法就是判断域名

如果是爬目标网站
    这个就需要分析网站的url构造了

I know,如果你只回答到这个分子上,我会给你分的,若能实现那个"假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分... ",100分给你不成问题,等着结贴再给分吧 --------------------编程问答--------------------
引用 25 楼 vgxpm 的回复:
Quote: 引用 23 楼 Hsuifengershi 的回复:

你如果是爬站的话
    就是把每个页面的连接都爬下来 然后根据爬到了连接在去爬 判断是否是本站页面的简单有效的方法就是判断域名

如果是爬目标网站
    这个就需要分析网站的url构造了

I know,如果你只回答到这个分子上,我会给你分的,若能实现那个"假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分... ",100分给你不成问题,等着结贴再给分吧

周一来在弄
http://download.csdn.net/detail/hsuifengershi/5886015
这个是显示html源码的
擦 当时上传的时候忘了贴.net代码 擦啊 --------------------编程问答--------------------
引用 24 楼 xm9572 的回复:
用 WebBroswer 控件,结合 Microsoft.mshtml.dll 中的方式可以取得网页中所有生成后的源码及所有页面控件。

哥哥,我只听说可以获取,问题是获取js执行后的源码实现,我是实现不了(学艺不精)才来问的,之前试了很久,获取到的都是没有被js执行后的源码,你说行,能否给出个代码实现,就以"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"这个链接为例.获取到了该网页js执行后的源码,给你高分,若你用ajax分析实现,100分+ --------------------编程问答--------------------
引用 26 楼 Hsuifengershi 的回复:
Quote: 引用 25 楼 vgxpm 的回复:

Quote: 引用 23 楼 Hsuifengershi 的回复:

你如果是爬站的话
    就是把每个页面的连接都爬下来 然后根据爬到了连接在去爬 判断是否是本站页面的简单有效的方法就是判断域名

如果是爬目标网站
    这个就需要分析网站的url构造了

I know,如果你只回答到这个分子上,我会给你分的,若能实现那个"假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分... ",100分给你不成问题,等着结贴再给分吧

周一来在弄
http://download.csdn.net/detail/hsuifengershi/5886015
这个是显示html源码的
擦 当时上传的时候忘了贴.net代码 擦啊

哥哥,就是要这个,具体代码呢?不过,为啥里面就显示一部分页面源码 --------------------编程问答--------------------
引用 26 楼 Hsuifengershi 的回复:
Quote: 引用 25 楼 vgxpm 的回复:

Quote: 引用 23 楼 Hsuifengershi 的回复:

你如果是爬站的话
    就是把每个页面的连接都爬下来 然后根据爬到了连接在去爬 判断是否是本站页面的简单有效的方法就是判断域名

如果是爬目标网站
    这个就需要分析网站的url构造了

I know,如果你只回答到这个分子上,我会给你分的,若能实现那个"假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分... ",100分给你不成问题,等着结贴再给分吧

周一来在弄
http://download.csdn.net/detail/hsuifengershi/5886015
这个是显示html源码的
擦 当时上传的时候忘了贴.net代码 擦啊

哥哥,还是你给力啊,能否发给小弟呢.唉,要是我工作了,我就付钱给你了 --------------------编程问答-------------------- 通读webbrowers类msdn解释就能写出来了。 --------------------编程问答--------------------
引用 30 楼 yuwenge 的回复:
通读webbrowers类msdn解释就能写出来了。

既然这么简单,你就花个几分钟给个demo呗. --------------------编程问答--------------------
HtmlDocument curDoc = wb.Document;
            HtmlElementCollection elems = wb.Document.GetElementsByTagName("a");
            List<string> _urls = new List<string>();
            foreach (HtmlElement elem in elems)
            {
                string strHref = elem.GetAttribute("href");
                _urls.Add(strHref);
            }

目前使用webbrowse可以获取一部分的链接,应该是没有加载完.这个时间挺难把握的,看来还是得分析ajax提交的路径和参数.不过还是挺想这两种方法的源码实现.拜求...学习... --------------------编程问答--------------------
引用 5 楼 vgxpm 的回复:
Quote: 引用 2 楼 sp1234 的回复:

google获取了吗?百度获取了吗?

假如我要获取一个网页中的全部链接,但是有些链接在网页的源码中根本不显示,为啥?是因为需要经过js执行后,所有链接才会出现.所以我想获取,前辈你能给点意见吗?
这个SP1234超级能装逼的,你可千万不要请教他。。。 --------------------编程问答--------------------
引用 33 楼 imtns59521 的回复:
Quote: 引用 5 楼 vgxpm 的回复:

Quote: 引用 2 楼 sp1234 的回复:

google获取了吗?百度获取了吗?

假如我要获取一个网页中的全部链接,但是有些链接在网页的源码中根本不显示,为啥?是因为需要经过js执行后,所有链接才会出现.所以我想获取,前辈你能给点意见吗?
这个SP1234超级能装逼的,你可千万不要请教他。。。

...这个他装逼不装逼,我不清楚,反正他贡献了这个帖子就行(为这个帖子人气出了30分之一的力气)嘿嘿... --------------------编程问答--------------------
引用 20 楼 vgxpm 的回复:
假如我要获取"http://www.gxu.edu.cn/administration/kjc/List-notice.htm"下所有链接,直接查看源码是js,麻烦哪位大哥能用webbrowse做个例子给我,或者用分析ajax例子更好.答得好,再加分...


这个我可以做到,这个你就搞个定时器,定时3秒去滚动滚动条就可以实现刷新出来新的内容;同时在滚动之前就把webbrowser的源代码获取出来,再判断下最大记录数和源代码的记录数,就可以知道是否加载完了;

其他网页你要知道ajax或js触发的条件是什么,手动触发它,然后获取它的内容就可以了; --------------------编程问答--------------------
引用 5 楼 vgxpm 的回复:
假如我要获取一个网页中的全部链接,但是有些链接在网页的源码中根本不显示,为啥?是因为需要经过js执行后,所有链接才会出现.所以我想获取,前辈你能给点意见吗?


具体方法在此我不想多说了。重点是你要先知道一个背景知识:

google、百度等等,也是“爬网页”的,以他们的技术实力,也不会去抓你说的这个东西。

如果你发现有工业级的、比较可行的做法,那么你就可以教google、百度如何做搜索引擎了! --------------------编程问答-------------------- 如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。 --------------------编程问答--------------------
引用 37 楼 sp1234 的回复:
如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。

maybe,网页爬虫的真正原理我没深入理解.但是我求代码不是说拿过来完成任务,而是学习别人的实现技巧,任何人初学不都是从模仿开始的吗?你自己都说要整理别人的资料,那拿别人的资料学习有何不可,你又怎么知道我没有自己搜索整理资料呢? --------------------编程问答-------------------- http://download.csdn.net/detail/hsuifengershi/6605357 --------------------编程问答--------------------
分 --------------------编程问答-------------------- 看来只能用WebBrowser了。 --------------------编程问答--------------------
引用 38 楼 vgxpm 的回复:
Quote: 引用 37 楼 sp1234 的回复:

如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。

maybe,网页爬虫的真正原理我没深入理解.但是我求代码不是说拿过来完成任务,而是学习别人的实现技巧,任何人初学不都是从模仿开始的吗?你自己都说要整理别人的资料,那拿别人的资料学习有何不可,你又怎么知道我没有自己搜索整理资料呢?

msdn都不读,探索个毛啊。 --------------------编程问答--------------------
引用 42 楼 yuwenge 的回复:
Quote: 引用 38 楼 vgxpm 的回复:

Quote: 引用 37 楼 sp1234 的回复:

如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。

maybe,网页爬虫的真正原理我没深入理解.但是我求代码不是说拿过来完成任务,而是学习别人的实现技巧,任何人初学不都是从模仿开始的吗?你自己都说要整理别人的资料,那拿别人的资料学习有何不可,你又怎么知道我没有自己搜索整理资料呢?

msdn都不读,探索个毛啊。

你怎么知道我不读,烦得就是你们这种装逼的,不爽可以不发言。 --------------------编程问答--------------------
引用 43 楼 vgxpm 的回复:
Quote: 引用 42 楼 yuwenge 的回复:

Quote: 引用 38 楼 vgxpm 的回复:

Quote: 引用 37 楼 sp1234 的回复:

如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。

maybe,网页爬虫的真正原理我没深入理解.但是我求代码不是说拿过来完成任务,而是学习别人的实现技巧,任何人初学不都是从模仿开始的吗?你自己都说要整理别人的资料,那拿别人的资料学习有何不可,你又怎么知道我没有自己搜索整理资料呢?

msdn都不读,探索个毛啊。

你怎么知道我不读,烦得就是你们这种装逼的,不爽可以不发言。

不爽你可以不问。 --------------------编程问答--------------------
引用 44 楼 yuwenge 的回复:
Quote: 引用 43 楼 vgxpm 的回复:

Quote: 引用 42 楼 yuwenge 的回复:

Quote: 引用 38 楼 vgxpm 的回复:

Quote: 引用 37 楼 sp1234 的回复:

如果你不去思考深入一点的背景的东西,你就不会学会在技术上去真正探索原理。只会从csdn上求代码。

能够接受启发而去分门别类地整理你听到、看到的资料,往往比无头苍蝇般地去乱叮别人的资料要好。

maybe,网页爬虫的真正原理我没深入理解.但是我求代码不是说拿过来完成任务,而是学习别人的实现技巧,任何人初学不都是从模仿开始的吗?你自己都说要整理别人的资料,那拿别人的资料学习有何不可,你又怎么知道我没有自己搜索整理资料呢?

msdn都不读,探索个毛啊。

你怎么知道我不读,烦得就是你们这种装逼的,不爽可以不发言。

不爽你可以不问。

呵呵,请你回答了吗?是你自己舔着脸过来的,就算来了,什么实质性的问题没解决,就知道说别人,有意思吗?你是觉得你自己有多厉害啊! --------------------编程问答-------------------- 结贴了,还是感谢那些提供了真正帮助的人,不像某些人。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,