2011-04-04 74 views
2

可能重复:
Where shall I start in making a scraper or a bot using python?如何编写Python机器人浏览

我知道这是明显的可能...... 我被要求执行某种机器人是一个访问网站,登录,访问一组链接,用日期输入填充搜索表单以获取XLS文件并注销。 如果手动完成,整个考验需要将近一个小时,所以脚本/机器人会为我们节省很多时间。

想法?图书馆?我想我需要urllib?
或者可能根本不使用Python?
在此先感谢!

编辑:我搜索了很多关于“python crawler”的内容,并没有在Mechanize或Scrapy上找到,直到评论之前:/
我会先看看Mechanize。谢谢。

+3

请参见[我应该从哪里开始使用python制作刮刀或bot?](http://stackoverflow.com/questions/3075792/where-shall-i-start-in-making-a-scraper-or -a-BOT,使用的Python)。 – 2011-04-04 20:35:55

+1

机械化如何? http://wwwsearch.sourceforge.net/mechanize/ – GWW 2011-04-04 20:36:00

+1

更好的是http://scrapy.org/ – 2011-04-04 20:46:58

回答

3

我是twill python模块的粉丝。这里有一小段来自它的代码,我不久前用它来做基本的浏览和抓取。

import twill 
import twill.commands as c 

def login(): 
    c.clear_cookies() 
    c.go('http://icfpcontest.org/icfp10/login') 
    c.fv(1, 'j_username', 'Side Effects May Include...') 
    c.fv(1, 'j_password', '<redacted>') 
    c.submit() 
    c.save_cookies('/tmp/icfp.cookie') 

all_cars_rx = re.compile(r'<td style="width: 20%;">(\d+)</td><td>(\d+)</td>') 
def list_cars(): 
    c.go('http://icfpcontest.org/icfp10/score/instanceTeamCount') 
    cars = re.findall(all_cars_rx, c.show()) 
    if not cars: 
     sys.stderr.write(c.show()) 
     sys.stderr.write('Could not find any cars') 
    return cars; 

值得一提的是,应该使用正则表达式来解析HTML。你在这里所做的是在非常短的时间表上为ICFP完成的肮脏的黑客攻击。

0

最近我发现了PhantomJS,并将它用于类似的任务。它是内置全功能Webkit引擎的命令行JavaScript解释器。恕我直言,这是一个非常容易使用的工具,可以处理像你这样的任务,并且你可以使用Firebug提供的各种脚本功能。此外它还有内置的屏幕截图并将其保存到图像文件。