热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:PHP页面爬虫

篇首语:本文由编程笔记#小编为大家整理,主要介绍了PHP页面爬虫相关的知识,希望对你有一定的参考价值。爬虫想必大家都很了解,通过脚本对目标文件进行抓

篇首语:本文由编程笔记#小编为大家整理,主要介绍了PHP页面爬虫相关的知识,希望对你有一定的参考价值。



爬虫想必大家都很了解,通过脚本对目标文件进行抓取。

我想获取每天菜市场菜价。

查看控制台,如果有相关信息得接口自然方便不过了,直接请求接口获取数据就可以了。

对于页面信息,需要过滤筛选。

图中信息很规律易于筛选。

首先获取整个页面,可以使用CURL方式请求页面地址,CURL方式也便于需要验证信息的页面传递参数。

过滤页面数据可以使用正则表达式匹配替换。


php
header( "Content-type:text/html;Charset=utf-8" );
$ch = curl_init();
$url ="http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml";
curl_setopt (
$ch , CURLOPT_USERAGENT ,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36" );
curl_setopt(
$ch,CURLOPT_URL,$url);
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER, 1);
$content=curl_exec($ch);
preg_match_all("/(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>/",$content,$matchs,PREG_SET_ORDER);
print_r($matchs);

 

这样就完成了,主要就是使用正则表达式对页面进行过滤筛选,爬取图片也是一样。

接下来将数据存起来就可以了。


DROP TABLE IF EXISTS `tb_commodity_data`;
CREATE TABLE `tb_commodity_data` (
`id`
int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT \'数据id\',
`name`
varchar(50) NOT NULL DEFAULT \'\' COMMENT \'商品名\',
`summary`
varchar(50) NOT NULL DEFAULT \'\' COMMENT \'规格/产地\',
`mini_price`
decimal(16,4) unsigned NOT NULL DEFAULT \'0.0000\' COMMENT \'最低价\',
`avg_price`
decimal(16,4) unsigned NOT NULL DEFAULT \'0.0000\' COMMENT \'平均价\',
`max_price`
decimal(16,4) unsigned NOT NULL DEFAULT \'0.0000\' COMMENT \'最高价\',
`unit`
varchar(10) NOT NULL DEFAULT \'\' COMMENT \'商品单位\',
`category`
varchar(45) NOT NULL DEFAULT \'\' COMMENT \'商品分类\',
`release_time`
datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\' COMMENT \'发布时间\',
`create_time`
datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\',
`source_from`
tinyint(1) NOT NULL DEFAULT \'0\' COMMENT \'0:未知来源 1:新发地\',
PRIMARY KEY (`id`)
) ENGINE
=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT=\'商品数据表\';


php
header("Content-Type: text/html;charset=utf-8");
set_time_limit(1000);
$host = \'127.0.0.1\';
$username = \'root\';
$password = \'root\';
$database = \'yii2_shop\';
$connect = mysqli_connect($host,$username,$password,$database);
$category = [
\'1\'=>\'蔬菜\',
\'2\'=>\'水果\',
\'3\'=>\'肉禽蛋\',
\'4\'=>\'水产\',
\'5\'=>\'粮油\',
];
foreach ($category as $key => $value) {
$count=0;
$pageSize = 20;
header( "Content-type:text/html;Charset=utf-8" );
$ch = curl_init();
$url ="http://www.xinfadi.com.cn/marketanalysis/".$key."/list/1.shtml";
curl_setopt (
$ch , CURLOPT_USERAGENT ,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36" );
curl_setopt(
$ch,CURLOPT_URL,$url);
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER, 1);
$content=curl_exec($ch);
preg_match_all("/(.*?)<\\/em>/",$content,$count,PREG_SET_ORDER);//匹配该表所用的正则
$page = floor($count[0][1]/$pageSize)+1;
if($count % $pageSize == 0){
$page = $count/$pageSize;
}
for ($i=1; $i<= $page; $i++) {
// header( "Content-type:text/html;Charset=utf-8" );
$ch = curl_init();
$url ="http://www.xinfadi.com.cn/marketanalysis/".$key."/list/".$i.".shtml";
echo $url.PHP_EOL;
curl_setopt (
$ch , CURLOPT_USERAGENT ,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36" );
curl_setopt(
$ch,CURLOPT_URL,$url);
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER, 1);
$content=curl_exec($ch);
preg_match_all("/(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>(.*?)<\\/td>/",$content,$pageData,PREG_SET_ORDER);//匹配该表所用的正则
foreach ($pageData as $k => $v) {
$sql = "insert into tb_commodity_data(name, summary, mini_price, avg_price, max_price, unit,category,release_time, source_from) values(\'".$v[1]."\',\'".$v[5]."\',\'".$v[2]."\',\'".$v[3]."\',\'".$v[4]."\',\'".$v[6]."\',\'".$value."\',\'".$v[7]."\',\'1\');";
mysqli_query($connect,"set names \'utf8\'");//写库
if(!mysqli_query($connect,$sql)){
$sql = "insert into tb_commodity_data(name, summary, mini_price, avg_price, max_price, unit,category,release_time, source_from) values(\'".$v[1]."\',\'".$v[5]."\',\'".str_replace(",", "", $v[2])."\',\'".str_replace(",", "", $v[3])."\',\'".str_replace(",", "", $v[4])."\',\'".$v[6]."\',\'".$value."\',\'".$v[7]."\',\'1\');";
if(!mysqli_query($connect,$sql)){
echo json_encode($v);
}
}
}
sleep(0);
}
sleep(0);
}
?>

 



推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 在使用豆瓣OAuth登录接口时,我们需要发送这样的HTTPREQUEST请求:GETv2user~meHTTP1.1Host:https:api.douban.com ... [详细]
  • 这个问题发生在重新安装系统后,丢失了之前的privatekey等。所以解决方法就是提示的revokeandrequest。到developercenter中找到certificat ... [详细]
author-avatar
zhaoxiao2012_549
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有