使用PHP或Python进行网络爬虫技术

3
我需要爬取大约100个非常相似的网站提供的内容。
我的第一个疑问是,是否可以编写通用脚本来爬取所有100个网站,或者在爬取技术中只能为特定网站编写脚本。 (愚蠢的问题)。我认为我应该询问哪种可能性更容易。为每个网站编写100个不同的脚本很难。
第二个问题。 我的主要语言是PHP,但在Stackoverflow上搜索后,我发现Python中最先进的爬虫之一是“Beautiful Soup”。 是否可以在PHP中调用Python中的“Beautiful Soup”? 还是最好使用Python编写整个脚本?
给我一些线索,告诉我该如何操作。
抱歉我的英语不太好。
此致敬礼,

Python会是你工具箱中不错的补充,甚至可能会改善你编写PHP的方式。如果脚本将从crontab运行,Python是一个不错的选择 - 同时可以考虑使用SqlSoup进行数据库访问。 - Paulo Scardine
1
你在帖子中提到的是"BeautifulSoup",我猜想你指的不是"美丽的肥皂"。 - Chris R
4个回答

2

1.) 一个爬虫用于100个网站?这取决于您的需求。如果您只需要特定信息,则需要考虑100个不同的网站及其布局。但一些通用功能可以共享。

2.) BeautifulSoup是一个HTML/XML解析器,而不是屏幕爬虫。如果爬虫是用Python编写的,那么它将是首选工具。调用Python从PHP中可以实现,但这肯定不如单一语言解决方案干净。因此,我建议您考虑使用Python和BeautifulSoup来制作原型。

附注:http://scrapy.org/是另一个Python库,专门用于爬取网站并从页面中提取结构化数据。


2
因为我更喜欢PHP而不是Python,所以我曾经使用phpQuery从网站上爬取数据。它运行得很好,我很快就开发出了一个爬虫,使用CSS选择器(借助SelectorGadget的帮助)选择元素并获取其->text()
但是我发现它有点慢(因为我需要爬取成千上万的页面),所以最终我改用正则表达式来爬取数据。D:

0

我以几种不同的方式完成了这个任务。

1:使用grep,sed和awk。与2:正则表达式相比,这些方法非常直接,但是在网页的HTML结构更改时会失败。

3:使用PHP的XML/HTML解析器DomDocument。与正则表达式相比,这种方法更可靠,但是我发现它很烦人(我讨厌PHP数组和对象的混合)。如果你想使用PHP,PHPQuery可能是一个好的解决方案,就像Thai建议的那样。

4:使用Python和BeautifulSoup。关于BeautifulSoup,我无法说出足够多的好话,这也是我推荐的方法。我发现使用Python编写的代码更清晰,而且与BeautifulSoup一起工作非常简单高效。文档也很好。

你需要为每个网站专门定制你的脚本。这取决于你希望提取什么类型的信息。如果你想提取类似“body title”的标准信息,当然你不需要做任何更改,但是你想要的信息可能更具体?


0

我们使用Python处理RSS feeds时,有点类似于这种情况--我们使用ElementTree,因为RSS通常保证是格式良好的。而Beautiful Soup可能更适合解析HTML。

在处理100个不同网站时,尝试编写一个抽象层,可以处理大多数网站并将页面转换为通用数据结构,然后覆盖抽象层的某些部分以处理与规范不同的个别网站。

爬虫通常受到I/O限制--请查看协程库,如eventlet或gevent,以利用一些I/O并行性并加快整个过程的速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接