使用PHP或Python的Web垃圾处理技术
我需要刮大约100个网站,是非常相似的内容,他们提供 我的第一个疑问。应该可以编写一个通用脚本来刮取所有100个网站,或者在刮取技术中只能为特定网站编写脚本。(愚蠢的问题)。我想我应该问问什么可能性更容易。为每个网站编写100个不同的脚本是很难的 第二个问题。我的主要语言是PHP,但在这里搜索Stackoverflow之后,我发现最高级的刮刀之一是Python中的“Beauty Soup”。应该可以在PHP中调用Python中的“Beauty Soup”吗?还是最好用Python编写所有脚本 给我一些我该怎么走的线索 对不起,我英语不好 致以最诚挚的问候,1。)100个站点一个刮刀?这取决于你的要求。如果你只需要特定的信息,你需要考虑100个不同的网站,以及它们的布局。不过,一些通用功能可以共享 2.)BeautifulSoup是一个HTML/XML解析器,而不是屏幕刮刀本身。如果scraper是用python编写的,那么它将是任务的首选。从php调用python是可以做到的,但它肯定不如单一语言解决方案干净。这就是为什么我建议您为了原型而研究python和BeautifulSoup 旁注:是另一个专门设计的python库 抓取网站并从其页面中提取结构化数据使用PHP或Python的Web垃圾处理技术,php,python,screen-scraping,Php,Python,Screen Scraping,我需要刮大约100个网站,是非常相似的内容,他们提供 我的第一个疑问。应该可以编写一个通用脚本来刮取所有100个网站,或者在刮取技术中只能为特定网站编写脚本。(愚蠢的问题)。我想我应该问问什么可能性更容易。为每个网站编写100个不同的脚本是很难的 第二个问题。我的主要语言是PHP,但在这里搜索Stackoverflow之后,我发现最高级的刮刀之一是Python中的“Beauty Soup”。应该可以在PHP中调用Python中的“Beauty Soup”吗?还是最好用Python编写所有脚本 给
因为我更喜欢PHP而不是Python,所以我曾经从网站上抓取数据。它工作得很好,我很快就找到了一个替罪羊,使用CSS选择器(在的帮助下)来选择元素,并获得它的
->text()
但我发现它有点慢(因为我必须刮取数千页),所以最后我改为使用正则表达式刮取数据。D:我用了几种方法 1:与grep、sed和awk合作。这与2:regex差不多。这些方法非常直接,但是只要站点的HTML结构发生变化,它们就会失败 3:PHP的XML/HTML解析器文档。这比正则表达式可靠得多,但我发现使用它很烦人(我讨厌PHP数组和对象的混合)。如果您想使用PHP,PHPQuery可能是一个很好的解决方案,正如Thai所建议的那样 4:Python和BeautifulSoup。关于BeautifulSoup,我说的太多了,这就是我推荐的方法。我发现我的代码在Python中感觉更干净,而且BeautifulSoup非常容易使用,效率也很高。还有很好的文档
您必须为每个站点专门化脚本。这取决于您希望提取的信息类型。如果它是一些标准的东西,比如
正文标题
,当然你不需要做任何更改,但是你想要的信息可能更具体一些?我们使用Python对RSS提要做类似的事情——我们使用ElementTree,因为RSS通常保证格式良好。BeautifulSoup可能更适合解析HTML
在处理100个不同的站点时,尝试编写一个适用于大多数站点的抽象,并将页面转换为您可以使用的通用数据结构。然后重写抽象的部分,以处理不同于规范的各个站点
刮取器通常是I/O绑定的——查看诸如eventlet或gevent之类的协同程序库,以利用一些I/O并行性并加快整个过程。Python将是您的工具带上的一个不错的补充,甚至可能改进您编写PHP的方式。如果脚本将从crontab运行,那么Python是一个很好的选择——还可以看看SqlSoup的数据库访问功能。我猜想,您在文章中提到的是“BeautifulSoup”,而不是“BeautifulSOAP”