[Python-mx] Scrapear una página con Python requests + beautifoulSoup4 + Mysql
Héctor de la Rosa Mondragón
hrosa at cesvimexico.com.mx
Wed Nov 9 19:00:09 EST 2016
Buenas Tardes
Estoy comenzando con python anteriormente he programado con PHP y he hecho
algunos scripts para scrapear algunas páginas y me gustaría me ayudaran a
codificar esto lo más rápido posible si es que se pudiese ya que el script
que tengo en PHP no me permite ejecutarlo
<?php
error_reporting(0);
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('upload_max_filesize', '60M');
ini_set('memory_limit', '128M');
ini_set('post_max_size', '60M');
include_once("rhtml.php");
include_once("funciones.php");
//////////////////////////////////////
conect();
echo 'Al principio:'.round(memory_get_usage()/1000),' KB<br>';
// $sql="SELECT
// rbt_truckpaper_s_modelos.id_categoria,
// rbt_truckpaper_s_modelos.id_marca,
// rbt_truckpaper_s_modelos.id_modelo,
// rbt_truckpaper_s_marcas.marca,
// rbt_truckpaper_s_modelos.url_modelo,
// rbt_truckpaper_s_modelos.modelo,
// rbt_truckpaper_s_categorias.categoria
// FROM
// rbt_truckpaper_s_modelos
// INNER JOIN rbt_truckpaper_s_marcas ON
(rbt_truckpaper_s_modelos.id_categoria =
rbt_truckpaper_s_marcas.id_categoria)
// AND (rbt_truckpaper_s_modelos.id_marca =
rbt_truckpaper_s_marcas.id_marca)
// INNER JOIN rbt_truckpaper_s_categorias ON
(rbt_truckpaper_s_marcas.id_categoria =
rbt_truckpaper_s_categorias.id_categoria)
// WHERE rbt_truckpaper_s_marcas.id_categoria =
'$_GET[id_categoria]' AND
// rbt_truckpaper_s_marcas.id_marca = '$_GET[id_marca]' AND
// rbt_truckpaper_s_modelos.id_modelo = '$_GET[id_modelo]'";
// $res=mysql_query($sql) or die(mysql_error());
// $row=mysql_fetch_assoc($res);
// $categoria=$row['categoria'];
// $marca=$row['marca'];
// $modelo=$row['modelo'];
// $url_modelo=$row['url_modelo'];
// $url = strtolower("$url_modelo/");
////////////////////////////////////////////////////////////////
$url='http://www.truckpaper.com/listings/trucks/for-sale/list/category/27/tr
ucks/manufacturer/freightliner/model-group/business-class-m2-106';
////////////////////////////////////////////////////////////////
$fcategoria=$row['categoria'];
$fmarca=$row['marca'];
$fmodelo=$row['modelo'];
$reg=0;
$regv=0;
if (url_exists($url)){
$url_base=$url;
$pag=1;
//conecta_proxy($url_base.'?page='.$pag);
$html = file_get_html($url_base.'?page='.$pag);
echo
"Paginas:".$paginas=(int)strval(trim(substr($html->find('div[class=paginatio
n] span', 0)->innertext,3,3)));
$html->clear();
unset($html);
echo "<br/>";
for($pag=1; $pag<=$paginas; $pag++){
//conecta_proxy($url_base.'?page='.$pag);
echo "Pagina :"."<a href=".$url_base.'?page='.$pag.">$pag de
$paginas</a><hr>";
foreach($html->find('div[class=border-bottom p-top-20 p-bottom-10 cf
listing]') as $vtracto) {
//echo $tprecio = trim($vtracto->find('span.bold',
0)->plaintext);
//echo "Pthimg:".$pathimagen=
trim($vtracto->find('img.laziload', 0)->src);
//echo "<img width=\"42\" height=\"54\" src=\"$pathimagen\" />";
//echo "<img width=\"90\" style=\" margin:10px\"
src=\"[$pathimagen]\" >";
$reg=$reg+1;
echo "<br />";
date_default_timezone_set('UTC');
date_default_timezone_set("America/Mexico_City");
echo 'Registro :'.$reg;
echo "<br />";
echo 'Fecha: '.$datee= date("Y-m-d H:i:s");
echo "<br />";
$cadena = trim($vtracto->find('.listing-name a', 0)->plaintext);
$array = explode(" ", $cadena);
echo 'Marca: '.$marca =$array[1];
echo "<br />";
echo 'Modelo: '.$modelo = $array[2]." ".$array[3]." ".$array[4];
echo "<br />";
echo 'Version: '.$version= $array[2]." ".$array[3]."
".$array[4]." ".$array[5]." ".$array[6];
echo "<br />";
echo 'Año:'.$ano =$array[0];
echo "<br />";
unset($cadena);
unset($array);
// Segmento de Detalle Equipamiento de Tracto extraigo VIN si se
encuentra aqui? //
echo 'Equipamiento : '."<br />".$DetEquipa =
str_replace("'","",trim($vtracto->find('div[class=col equip-details cf]',
0)->plaintext));
echo "<br />";
$patronvin='/[A-Za-z0-9]{17}/';
if (preg_match($patronvin,trim($vtracto->find('div[class=col
equip-details cf]', 0)->plaintext), $vin)){
echo 'VIN : '.strtoupper($vin[0]);
echo "<br />";
}else{
echo "VIN :".$vin[0]="No hay VIN...";
echo "<br />";
}
////////////////////////////////////////////////////////////////
$patrontprecio='/For Sale Price:/i';
if (preg_match($patrontprecio,trim($vtracto->find('span.bold',
0)->plaintext), $tprecio)){
echo 'Tipo de Precio : '.$tprecio[0]="A la venta";
echo "<br />";
}else{
echo 'Tipo de Precio : '.$tprecio[0]="Subasta";
echo "<br />";
}
//echo $tprecio = trim($vtracto->find('span.bold',
0)->plaintext);
echo 'Precio : '.$precio =
strval(str_replace(",","",str_replace(" ","",str_replace("USD
$","",trim($vtracto->find('span.nobr', 0)->plaintext)))));
$ubica="";
echo "<br />";
$patrontmoneda='/USD/';
if (preg_match($patrontmoneda,trim($vtracto->find('span.nobr',
0)->plaintext), $moneda)){
echo 'Moneda : '.$moneda[0];
echo "<br />";
}else{
echo 'Moneda : '.$moneda[0]="";
echo "<br />";
}
//echo memory_get_usage() . "\n";
echo "<br /><br />";
if ($tprecio[0]=='A la venta'){
$upsql=utf8_decode("INSERT INTO rbt_truckpaper_scrap_modelos(
url,
fecha_scrap,
marca,
modelo,
version,
ano,
vin,
caracteristicas,
drive_side,
engine_manufacturer,
engine_type,
fuel_type,
horsepower,
mileage,
number_of_rear_axles,
suspension,
transmission,
precio,
moneda,
imagen
)
VALUE (
'$url',
'$datee',
'$marca',
'$modelo',
'$version',
'$ano',
'$vin[0]',
'$DetEquipa',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$ubica',
'$precio',
'$moneda[0]',
'$pathimagen'
)");
$result = mysql_query($upsql) OR die("Error:
".$upsql.mysql_error());
$regv=$regv+1;
}
}
unset($DetEquipa);
unset($vtracto);
echo 'Antes:'.round(memory_get_usage()/1000),' KB<br>';
$root->clear();
unset($root);
$html->clear();
unset($html);
echo 'Despues:'.round(memory_get_usage()/1000),' KB<br>';
}
echo "<center>Extracto exitoso de ". $url ."</center><br /><br />";
echo "<center><h3>".$regv." Registros en venta agregados a la Base de
".$fcategoria." ".$fmarca." ".$fmodelo." </h3></center><br />";
}
?>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-mx/attachments/20161109/1dd6ffc0/attachment-0001.html>
More information about the Python-mx
mailing list