使用PHP或Python的网页爬虫技术

3 投票
4 回答
4291 浏览
提问于 2025-04-16 09:20

我需要从大约100个内容非常相似的网站上抓取数据。

我第一个疑问是:是否可以写一个通用的脚本来抓取这100个网站,还是说抓取技术只能为特定网站写脚本?(这个问题可能有点傻)。我觉得我应该问一下,哪种可能性更简单。为每个网站写100个不同的脚本太难了。

第二个问题是:我的主要编程语言是PHP,但在Stackoverflow上搜索后,我发现“Beautiful Soup”是Python中最先进的抓取工具之一。是否可以在PHP中调用Python的“Beautiful Soup”?还是说最好把所有脚本都用Python写?

给我一些建议,我该怎么做。

抱歉我的英语不太好。

最好的祝愿,

4 个回答

0

我试过几种方法。

第一种:用grep、sed和awk。这些方法和第二种:正则表达式差不多,都是比较直接的方式,但一旦网站的HTML结构发生变化,它们就会失效。

第三种:使用PHP的XML/HTML解析器DomDocument。这种方法比正则表达式更可靠,但我觉得使用起来有点麻烦(我不喜欢PHP数组和对象混在一起)。如果你想用PHP,泰国人提到的PHPQuery可能是个不错的选择。

第四种:用Python和BeautifulSoup。我对BeautifulSoup赞不绝口,这是我推荐的方法。我觉得在Python中写代码更简洁,使用BeautifulSoup也非常简单高效。而且它的文档也很好。

你需要根据每个网站的特点来定制你的脚本。这取决于你想提取什么样的信息。如果是一些标准的内容,比如body title,那当然就不需要改动什么,但你想要的信息可能会更具体吧?

2

因为我更喜欢用PHP而不是Python,所以我曾经用过phpQuery来从网站上抓取数据。这个工具效果挺不错的,我很快就用它做了一个抓取程序,使用CSS选择器(在SelectorGadget的帮助下)来选择网页元素,并获取它们的->text()内容。

不过我发现速度有点慢(因为我需要抓取成千上万的页面),所以最后我改用了正则表达式来抓取数据。D:

2

1.) 一个爬虫可以抓取100个网站吗?这要看你的需求。如果你只需要特定的信息,那就得考虑这100个网站的不同布局。不过,有些通用的功能是可以共享的。

2.) BeautifulSoup 是一个用来解析HTML和XML的工具,不完全是用来抓取网页的。如果你用Python写爬虫,它是一个很不错的选择。虽然可以从PHP调用Python,但这样做不够简洁,所以我建议你考虑用Python和BeautifulSoup来做一个原型。

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

撰写回答