【发布时间】:2014-08-24 21:43:32
【问题描述】:
我正在学习php抓取。我刚开始抓取以下网站:
**[URL]="http://www.youramazingplaces.com/"**
到目前为止,我已经抓取了每个帖子的所有标题、图片来源和链接地址。我对抓取
标签有点困惑,因为我需要每个标题的描述,并且该描述在 2 或 3 标记和该页面上的所有图像也在 标记中。 我正在使用正则表达式好友。 我想从每个帖子中创建一个正则表达式,该表达式应该从页面中提取每个描述,除了包含图像或其他类的段落标签。 现在我的正则表达式提取了所有的段落标签,但我不想全部去掉它们。我只需要那些只包含描述的标签。
到目前为止,我已经制作了以下正则表达式来获取该页面中的所有段落: "%(?P .*?)
%m'".输出如下:" 焦特布尔是印度拉贾斯坦邦的第二大城市。总人口851,051人。它是印度最美丽和访问量最大的地方之一。这座城市有两个绰号:“阳光之城”是指阳光明媚的天气,“蓝色之城”则是因为梅赫兰加尔堡周围有着鲜艳的蓝色房屋。在那里你可以看到令人惊叹的古老建筑、美丽的风景、令人惊叹的建筑…… 焦特布尔的景点有:Mehrangarh For、Jaswant Thada、Rao Jodha Desert Rock Park、Umaid Bhawan Palace、Mandore 和 Mandore 花园以及许多其他有趣的地方。对于那些喜欢旅行和探索一些新的不同地方的人来说,绝对应该去印度的焦特布尔。您可以在下面看到一些地方的照片并享受其中。此外,这些精彩的照片会让您感觉身临其境,享受焦特布尔的美景。如果您想度过难忘的假期,请访问焦特布尔。 图片由 Girish Suryawanshi 通过 Flickr 拍摄 迈克尔·弗利通过 Flickr 拍摄的图片
"
它也包含图像标签,我不需要它们。我只需要从每个页面中抓取描述。
以下是我的代码:
*//$url="http://www.youramazingplaces.com/";
//$curl_scraped_page=initCurl($url);*
$pagenumber=1;
while($pagenumber<=1)
{
$url="http://www.youramazingplaces.com/page/{$pagenumber}/";
$curl_scraped_page=initCurl($url);
*//////////LINKS////////////*
preg_match_all('%<a href="(?P<links>.*?)"><b>(?P<readmore>.*?)</b></a>%m',
$curl_scraped_page,$link_array);
for($x=0; $x<count($link_array['links']); $x++ )
{
$curldata= initCurl($link_array['links'][$x]);
preg_match_all('%<h1 class="(.*?)">(?P<title>.*?)</h1>%s', $curldata,$title);
preg_match_all('%<p><img class="(?P<imageclass>.*?)" src="(?P<imgsrc>.*?)"alt=" (?P<alt>.*?)"/> </p>%m', $curldata,$img_src_array);
preg_match_all('%<p>(?P<description>.*?)</p>%m', $curldata,$description_array);
print_r($description_array['description']['1']);
$pagenumber++;
}
【问题讨论】:
-
通过
标签获取,然后在内容上使用 strip_tags()?
-
不要使用正则表达式解析 HTML
-
@Scuzzy ,如果我使用条形标签,我可以在这些标签之间进行过滤吗?因为我需要仅包含描述的特定两三个段落标签。我不需要其余信息,我很困惑关于那个。:(
标签: php regex preg-match-all