Basic eBay Search Parsing (continued)
Finding the search results
Now that we have tables seperated into array elements, we need to figure out which table contains the search result data. We can do this by searching for words, a picture, some kind of unique identifier around the data we need to grab. In the case of eBay's pages at the time of this article, I found that "Customize Display" occured right before the search results list started.
<?
$URL = "http://search.ebay.com/search/search.dll?query=".$searchstring."&sosortproperty=1&ht=1&from=R10&BasicSearch=";
$file = fopen("$URL", "r");
$r = "";
do{
$data = fread($file, 8192);
$r .= $data;
}
while(strlen($data) != 0);
$ebayTABLEArray = preg_split ("/<table.*?>/", $r);
// Now try to find which <table> contains the search results are
for($x=0; $x<count($ebayTABLEArray); $x++){
// text that occurs right before search results
if(strstr($ebayTABLEArray[$x],"Customize Display")){
$resultTable = $x+1;
}
}
?>
Explanation:
- Search for the table containing the words "Customize Display", which help us find where the search results begin.
Second verse, same as the first..
Now that we know what table contains "Customize Display" (table number was stored in $resultTable), we can use the same technique for seperating the individual table elements into an array. We can then use some regular expressions to grab the specific titles, price, item number, etc out of the data.
<?
$URL = "http://search.ebay.com/search/search.dll?query=".$searchstring."&sosortproperty=1&ht=1&from=R10&BasicSearch=";
$file = fopen("$URL", "r");
$r = "";
do{
$data = fread($file, 8192);
$r .= $data;
}
while(strlen($data) != 0);
$ebayTABLEArray = preg_split ("/<table.*?>/", $r);
// now try to find which <table> contains the search results are
for($x=0; $x<count($ebayTABLEArray); $x++){
if(strstr($ebayTABLEArray[$x],"Customize Display")){
$resultTable = $x+1;
}
}
$ebayTRArray = preg_split("/<tr.*?>/",$ebayTABLEArray[$resultTable]);
echo "<BR><B>Ebay Results:</B><BR><BR>";
$start=2;
$end = $start + count($ebayTRArray);
for($i=$start;$i<$end;$i++){
$ebayTDArray = preg_split ("/<td.*?>/",$ebayTRArray[$i]);
//print_r($ebayTDArray);
preg_match("/<a.*?<\/a>/",$ebayTDArray[4],$match);
$item = strip_tags($match[0],"<A></A>");
if($item!=""){
$item_name = $item;
$price = strip_tags($ebayTDArray[6]);
// see if there's a Buy-It-Now price
$priceArray = explode("$",$price);
$item_price = $priceArray[1];
$item_bin = $priceArray[1];
$item_bids = strip_tags($ebayTDArray[7]);
$item_timeleft = strip_tags($ebayTDArray[8]);
echo $item_name." ".$item_price." ".$item_bids." ".$item_timeleft."<BR>";
}
}
?>
Explanation:
- Seperate on <tr> tags to place item data into seperate array elements
- Use regular expressions to seperate item data into useable variables.
| Continue to Page 3 --> |
Comments:
| Thanks! |
| Posted 04/23/06 12:27AM by Anonymous Techdoser |
|
Thanks for writing this article. I appreciate all the work you've put into it and wanted to say IT WORKS! :O) Best article with a working example I have ever found online! |
| Completed listings? |
| Posted 12/24/06 3:26AM by Anonymous Techdoser |
| Is it possible to search through completed listings? So, is it possible to log-in (without the visitor of my site knowing the log-in/password) and extract these auctions as well? |
| Re: Completed listings |
| Posted 03/23/08 11:23AM by AceBHound |
| I don't have specifics on how to pass the password credentials to a site, but I know it's possible because there are programs and applications out there that are capable of doing this. |

