将网络爬虫与Django前端对接

2 投票
3 回答
3338 浏览
提问于 2025-04-15 12:08

我想做三件事。

第一:每天至少抓取并存档一组预定义的网站。

第二:在这些数据上运行一些批处理的Python脚本(主要是文本分类),最好是在晚上。

第三:给用户提供一个基于Django的前端,让他们可以搜索抓取到的数据。

我试过使用Apache Nutch和Lucene,但让它们和Django配合起来实在太难了,感觉不如直接用其他的爬虫引擎来得简单。

问题950790提到我可以直接在Django里写爬虫,但我不太确定该怎么做。

总的来说,有没有关于如何在Django里写爬虫的建议,或者有没有现成的Python爬虫可以让我改造一下?还是说我应该在第二步中考虑把它变成Django能用的东西,写一些连接代码?最后,是否应该完全放弃Django?不过我确实需要一个能快速搜索的前端。

3 个回答

1

如果你不想用Django的ORM来写爬虫(或者你已经有一个能用的爬虫了),你可以让爬虫和Django做的前端共享同一个数据库。

为了能在Django的后台管理界面中搜索(和编辑)现有的数据库,你需要创建Django模型。最简单的方法可以在这里找到:

http://docs.djangoproject.com/en/dev/howto/legacy-databases/

2

你可以用 urllib2 自己写一个爬虫,来获取网页内容,然后用 Beautiful Soup 来解析这些网页的HTML,找到你需要的信息。

下面是一个读取网页的例子:

http://docs.python.org/library/urllib2.html#examples

这里有一个解析网页的例子:

http://www.crummy.com/software/BeautifulSoup/documentation.html#Parsing HTML

3

如果你把你的Django项目的应用目录放进sys.path里,你就可以写一些标准的Python脚本,来使用Django的ORM功能。我们有一个/admin/目录,里面放着一些脚本,用来执行各种任务——每个脚本的开头都有一段像这样的代码:

sys.path.insert(0,os.path.abspath('../my_django_project'))
sys.path.insert(0,os.path.abspath('../'))
sys.path.insert(0,os.path.abspath('../../'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

接下来,你只需要用你喜欢的工具去抓取网页,然后利用Django的数据库API来存储数据就可以了。

撰写回答