2013-03-24 139 views
1

我对编程非常陌生,需要一些帮助从网站获取数据并将其传递到我的PHP脚本中。Php从网站上抓取数据

该网站是http://www.birthdatabase.com/

我想插入一个名字(First and Last)并检索结果。我知道你可以通过在URL中传递名称来查询网站,但是我在查找结果时遇到问题。

http://www.birthdatabase.com/cgi-bin/query.pl?textfield=FIRST&textfield2=LAST&age=&affid=

我使用的file_get_contents($ URL)函数来获取页面,但需要之后帮助。具体而言,如果该名称有多个结果,我只想从特定状态中删除结果。

感谢您的帮助。

+0

它为我工作...请参阅:http://code.google.com/p/php-html2array/downloads/detail?name=class.htmlParser.php – Arvind 2013-03-24 17:24:28

+0

我试过使用preg_match,但我不知道如果这是最好的方法 – ChanCanasta 2013-03-24 17:25:15

+0

如何使用该HTML解析器? – ChanCanasta 2013-03-24 17:28:26

回答

2

你需要真棒simple_html_dom类。

通过这个类,你可以用类似jQuery的方式查询网页的DOM。

首先包括在你的网页类,然后让页面内容与此片段:

$html = file_get_html('http://www.birthdatabase.com/cgi-bin/query.pl?textfield=' . $first . '&textfield2=' . $last . '&age=&affid='); 

然后你可以使用CSS选择刮你的数据(像这样):

$n = 0; 
foreach($html->find('table tbody tr td div font b table tbody') as $element) { 
    @$row[$n]['tr'] = $element->find('tr')->text; 
    $n++; 
} 

// output your data 
print_r($row); 
+0

感谢您的帮助。这个班级看起来像我所需要的。 birthdatabase.com的输出包含多个表格,并且没有唯一标签可供刮取。我希望我使用正确的术语。我是这样一个小菜鸟,所以任何帮助,将不胜感激。 – ChanCanasta 2013-03-24 18:58:18

+0

我不是来自美国,所以我不知道这个答案,但你可以使用邮政编码来强制你想要的状态吗? – atwright147 2013-03-24 19:47:30

+0

这些状态被列为输出的一部分。我大概可以在数组中搜索适当的值,然后输出相应的生日。我想我的问题仍然与首先获得该数组有关。数据库的输出有多个表,其中包含我不想在数组中放置的广告和其他废话。我如何解决这个问题? – ChanCanasta 2013-03-24 20:01:50