如何抓取HTML页面以生成总体主观网站评分
提前感谢你的帮助。
我一直在努力寻找或编写一个工具,能做到以下几点:
在指定的网站(sitename)上爬取所有的网页,寻找一些特定的字符串(a, b, c, d, e),同时也要查找一个特定的JavaScript文件(javascriptfile.js)。
如果在某个页面上没有找到这个JavaScript文件,就把这个页面的名字或网址记录到一个文件里,然后继续爬取其他页面。
根据每个字符串在页面上出现的次数来计算总分(比如每找到一次字符串"a"得1分,每找到一次字符串"b"得2分),依此类推。
我在第一部分遇到了困难——因为我没有足够的编程技能来写爬虫的部分。我试过Wget、pavuk、mechanize,还有一些PHP脚本,但它们似乎都有一些限制。
有没有人能给我一些例子或者建议,告诉我如何使用或修改这些工具,或者写一个脚本来完成上述任务?
我对C、Java、PHP、Perl等语言都很开放——只想把这个事情做好!
非常感谢你的帮助!!!
5 个回答
我推荐使用Python的urllib库。
获取网页
用Python通过HTTP获取普通网页非常简单:
import urllib
f = urllib.urlopen("http://www.python.org")
s = f.read()
f.close()
--这个内容来自这里
然后可以使用Python的HTML解析器
好吧,第一点其实是这样的(用PHP):
- 加载一个HTML页面 - 你可以使用
file_get_contents()
或者curl
(推荐使用这个)来实现。 - 在网站上用
preg_match
查找一些东西,比如a、b、c,还有那个JavaScript脚本的名字或者使用 http://www.php.net/manual/en/book.dom.php 把页面当作XML加载,然后用一些xpath来处理它们( http://www.php.net/manual/en/book.dom.php#93637 )(推荐使用这个)。
只有这样你才能继续进行第二点和第三点。
在指定的网站(sitename)上爬取所有的html页面,寻找各种字符串(a, b, c, d, e),同时也要查找一个特定的javascript文件(javascriptfile.js)
在Python中,你可以使用urllib库。这个库可以让你很方便地和网络服务器进行交流。接下来,你需要了解一下正则表达式(regexp),它可以帮助你进行爬取和字符串搜索。因为大多数服务器没有公开的索引,你需要找到<a>
标签,然后提取出它们指向的链接,接着再去爬取新的目标。
从锚标签中获取href属性
比较域名,确保它们是相同的,或者是相对路径(以'/'开头)
重复这个过程
你可以考虑使用'beautifulsoup'来帮助你完成这个任务。它可以为你处理HTML的读取工作。 Beautiful Soup
它甚至可以帮助你搜索你的字符串。
如果在某个页面上没有找到javascript文件,就把这个页面的名称/网址输出到一个文件中,然后继续爬取。
你可以再次使用Beautiful Soup或正则表达式来检查页面上是否包含这个文件,格式是<script src='urltofile'>
。然后把你正在爬取的当前页面写入文件。
根据每个字符串在页面上出现的次数来计算总分(每个字符串"a"得1分,每个字符串"b"得2分)等等。
这个过程会在你爬取页面时进行,使用正则表达式可以计算特定文本模式出现的次数,然后把这些次数加到一个字典中,得到你的结果。也许可以创建一个映射,比如score = {'a': 10}; 如果找到a: points += score['a']*出现次数
。
好的正则表达式参考资料: Regexp Info