Sam*_*son 3 html php regex conflict strip-tags
我有一个每个美国国会议员的网站列表,我正在以编程方式抓取地址.许多网站的底层标记各不相同,但在我开始看到数百个网站没有给出我编写的脚本的预期结果之前,这不是最初的问题.
在花了一些时间来评估潜在的原因之后,我发现调用strip_tags()结果会file_get_contents()多次删除页面的大部分来源!这不仅删除了HTML,而是删除了我想要删除的非HTML!
所以我删除了调用strip_tags(),替换了一个调用以删除所有非字母数字字符并给该进程另一次运行.它出现了其他结果,但仍然缺乏很多.这次是因为我的正则表达式与所需的模式不匹配.在查看返回的代码之后,我意识到我在整个文本中散布了HTML属性的残余,破坏了我的模式.
有没有解决的办法?这是HTML格式错误的结果吗?我可以做些什么吗?
PHP手册中有一条警告:
因为strip_tags()实际上不验证HTML,部分或损坏的标记可能导致删除比预期更多的文本/数据.
由于您正在抓取许多不同的网站,并且您无法解释其HTML的有效性,因此这将始终是一个问题.不幸的是,正则表达式也不会为你做这件事,因为正则表达式并不是简单的文档解析器.
我会使用PHP Simple HTML DOM Parser,甚至是内置的DOMDocument-> loadHTML()方法.
您可以保留一个小型数据库,记录您想要抓取的每个页面,以及在该页面结构中找到信息的位置.每次你抓取它,你都可以快速检查结构是否已经改变,在这种情况下,你可以使用DOM解析器的新路径位置更新数据库,并在下一次刮擦时获取它.
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |