我已经获得了在许多图书馆网页上抓取/解析和索引可用图书的任务。我通常使用HTML Agility Pack和C#来解析网站内容。其中之一如下:
http://bibliotek.kristianstad.se/pls/bookit/pkg_www_misc.print_index?in_language_id=en_GB
如果您搜索*(所有图书),它将返回许多图书清单,每页分为10本书。
我在本网站上发现的典型网络抓取工具失败了。我还尝试编写自己的爬虫,它将浏览页面上的所有链接并生成post / get变量以动态生成结果。我也没能做到这一点,主要是因为我得到了一些404错误(尽管我确定生成的链接是正确的)。
该网站依赖于javascript来生成内容,并使用GET和POST变量提交的混合模式。
答案 0 :(得分:3)
我出去了,但尝试使用 Fiddler 观察JavaScript GET和POST,然后您可以根据这些请求进行抓取。 Fiddler有 FiddlerCore ,你可以把它放在你自己的C#项目中。使用此方法,您可以监视在WebBrowser控件中发出的请求,然后将其保存以便以后进行爬网等。
沿着C#JavaScript解释器路线听起来就像这样做的“更正确”的方式,但是我打赌它会更加困难,并且会出现错误和错误,除非你有最简单的情况。
祝你好运。答案 1 :(得分:2)
FWIW,C#WebBrowser控件非常非常慢。它也不支持两个以上的同时请求。
使用SHDocVw更快,但信号量也有限。
更快仍在使用MSHTML。这里的工作代码:https://svn.arachnode.net/svn/arachnodenet/trunk/Renderer/HtmlRenderer.cs用户名/密码:公共(没有其他两个在流程用完时有的请求/渲染限制...)
这是无头的,因此没有任何控件被渲染。 (更快)。
谢谢, 麦克
答案 2 :(得分:1)
如果您使用Windows窗体应用程序中的WebBrowser control打开页面,那么您应该能够通过HtmlDocument访问DOM。这适用于HTML链接。
对于通过Javascript生成的链接,您可以查看ObjectForScripting属性,该属性应该允许您通过Javascript与HTML页面进行交互。其余的则成为一个Javascript问题,但它(理论上)应该是可解决的。我没试过,所以我不能说。
答案 3 :(得分:0)
如果网站使用JavaScript生成内容,那么您就不走运了。您需要一个可在C#中使用的完整JavaScript引擎,以便您可以实际执行脚本并捕获它们生成的输出。
看一下这个问题:Embedding JavaScript engine into .NET - 但要知道要做出你需要的“认真”努力。
答案 4 :(得分:0)
AbotX为您渲染javascript。它不是免费的。