Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP或Python的Web垃圾处理技术_Php_Python_Screen Scraping - Fatal编程技术网

使用PHP或Python的Web垃圾处理技术

使用PHP或Python的Web垃圾处理技术,php,python,screen-scraping,Php,Python,Screen Scraping,我需要刮大约100个网站,是非常相似的内容,他们提供 我的第一个疑问。应该可以编写一个通用脚本来刮取所有100个网站,或者在刮取技术中只能为特定网站编写脚本。(愚蠢的问题)。我想我应该问问什么可能性更容易。为每个网站编写100个不同的脚本是很难的 第二个问题。我的主要语言是PHP,但在这里搜索Stackoverflow之后,我发现最高级的刮刀之一是Python中的“Beauty Soup”。应该可以在PHP中调用Python中的“Beauty Soup”吗?还是最好用Python编写所有脚本 给

我需要刮大约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,所以我曾经从网站上抓取数据。它工作得很好,我很快就找到了一个替罪羊,使用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”