PHP脚本扮演爬虫的角色,可能大家第一时间想到可能会是会正则,个人对正则的规则老是记不住,表示比较难下手,今天工作中有个需求需要爬取某个网站上的一些门店信息

无意间在网上看到一个比较好的类库叫:simple_html_dom

github下载地址:https://github.com/samacs/simple_html_dom

最重要的一步:你得先了解别人网站的结构,知道从哪个tab开始是你想要的数据

下面演示下过程吧

实现过程我分了三步

1、将门店信息的经纬度,名称等一些重要信息先插入本地表

  1. set_time_limit(0);
  2. $host = '127.0.0.1';
  3. $user = 'root';
  4. $user_pwd = '';
  5. $database = 'dataname';
  6. $conn = mysql_connect($host,$user,$user_pwd) or die('sss');
  7. mysql_select_db($database,$conn) or die('dddd');
  8. mysql_query('set names utf8');
  9. include('./simple_html_dom-master/simple_html_dom.php');
  10. $url = '需要爬取的网站URL';
  11. $html = file_get_html($url);
  12. $n = 1;
  13. foreach($html->find('li[data-counts=0]') as $e){
  14. $storeid = $e->storeid;
  15. $star = $e->level.'.0';
  16. $work_time = $e->time;
  17. $mapx = $e->mapx;
  18. $mapy = $e->mapy;
  19. $nickname = $e->mapname;
  20. $mapadd = $e->mapadd;
  21. $maptel = $e->maptel;
  22. $time = date('Y-m-d H:i:s');
  23. $query = "INSERT INTO `store` (`storeid`,`star`,`work_time`,`longitude`,`latitude`,`create_time`,`nickname`,`address`,`tel`)
  24. VALUES ($storeid,'".$star."','".$work_time."','".$mapx."','".$mapy."','".$time."','".$nickname."','".$mapadd."','".$maptel."')";
  25. $res = mysql_query($query);
  26. //echo $query;exit();
  27. if($res){
  28. echo '成功导入第'.$n.'个门店<br>';
  29. $n++;
  30. }else{
  31. die('失败<br>');
  32. }
  33. }

2、跳入站点的另一个页面获取门店LOGO图片

  1. $query = "SELECT storeid FROM store order by id desc";
  2. $row = mysql_query($query);
  3. while($rows = mysql_fetch_array($row)){
  4. $url = 'http://别人站点域名/'.$rows['storeid'].'.jhtml';
  5. $html = file_get_html($url);
  6. foreach($html->find('div.onlyOnePic') as $e){
  7. //获取img的src属性
  8. $img =  $e->firstChild()->src;
  9. //将远程图片保存到本地
  10. $content = file_get_contents($img);
  11. file_put_contents('./store/'.$rows['storeid'].'.jpeg', $content);
  12. }
  13. }

3、更新表中对应门店的LOGO字段

  1. $query = "SELECT storeid FROM store order by id desc";
  2. $row = mysql_query($query);
  3. $n = 1;
  4. while($rows = mysql_fetch_array($row)){
  5. $img = "https://我自己站点域名/".$rows['storeid'].".jpeg";
  6. $sql = "UPDATE store set img_url='".$img."' where storeid=".$rows['storeid'];
  7. $res = mysql_query($sql);
  8. if($res){
  9. echo '成功更新第'.$n.'个门店<br>';
  10. $n++;
  11. }else{
  12. echo '失败';
  13. }
  14. }

OK,功能实现了,不过还没有更深入的了解这个类库的其他功能,这里也只是做个记录,方便以后需要的时候用

php利用simple_html_dom类,获取页面内容,充当爬虫角色的更多相关文章

  1. PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置

    使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的或true. 1.curl获取页面内容, 直接输出例子: <?php $ ...

  2. PHP CURL获取页面内容输出例子

    使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl ...

  3. C#获取页面内容的几种方式

    常见的Web页面获取页面内容用 WebRequest 或者 HttpWebRequest 来操作 Http 请求. 例如,获取百度网站的 html 页面 var request = WebReques ...

  4. python+selenium 页面中存在选项卡时,获取页面内容的小技巧

    最近用selenium读取页面内容时,遇到包含选项卡的页面,由于选项卡多由js加载其中的内容,所以在网址打开时只能获取到默认显示的选项卡中的内容,而tab2.tab3等等都需要傻傻的点击一下才会获取到 ...

  5. 利用Retrofit, RxJava获取网络内容

    Retrofit & RxJava 关于如何使用Retrofit和RxJava请阅读参考中的两篇文章. Retrofit处理数据 Retrofit是在什么时候处理从网络中获取到的json数据的 ...

  6. python 携带cookie获取页面内容

    有时会遇到爬取的页面需要登录,这就要带上cookie了. 下面记录了几种携带cookie的方法 # coding=utf-8 import requests s = requests.Session( ...

  7. POST信息模拟登录获取页面内容

    最近项目里有一个是要模拟登录后,访问固定页面获取内容的要求,一开始用JQ AJAX好像不支持跨域请求.后使用.net中HttpWebRequest对象来获取.一开始访问总是无法在第二个页面正常访问,好 ...

  8. android 利用TrafficStats类获取本应用的流量

    public void getData() { // PackageManager 包管理类 PackageManager packageManager = BrownserActivity.this ...

  9. asp.net 利用Response.Filter 获取输出内容, 变更输出内容

    重写 Response.Filter 就可以获取或更新输出到浏览器的内容       资料: https://weblog.west-wind.com/posts/2009/Nov/13/Captur ...

随机推荐

  1. 国内优秀MVC开源框架jfinal简介

    JFinal简介 JFinal 项目开发始于2011年初,作者詹波(James Zhan)曾任搜格信息技术有限公司Java架构师,北京信息管理科学研究所CTO,现任微格网际(北京)科技有限公司联合创始 ...

  2. js中常用的内置对象

    Arguments 函数参数集合 arguments[ ] 函数参数的数组 Arguments 一个函数的参数和其他属性 Arguments.callee 当前正在运行的函数     Argument ...

  3. MongoDB基础知识(二)

    一.基本概念 1:文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行 2:集合(collection)可以看做是一个拥有动态模式(dynamic schem ...

  4. PPTV(pplive)_forap_1084_9993.exe 木马清除经历

    ## 流氓行经 这几天电脑上突然自动安装pptv,金山毒霸清除了也不管用, 卸载了pptv过一会又自动安装上了,太嚣张了哈. ## 监控进程跟目录变化 接下来使用 ProcessMonitor 监控进 ...

  5. [JAVA]对象的别名问题

    对于JAVA的基本数据类型,a=b就是把b的内容复制给a.若接着又修改了a,对b是没有影响的. 但是在为对象“赋值”的时候,情况发生了变化.对一个对象进行操作时,我们真正操作的是对象的引用. 下面对两 ...

  6. nodejs教程 安装express及配置app.js文件的详细步骤

    来自:http://www.jb51.net/article/36710.htm   express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.下面简单来说说express的 ...

  7. 【python】变量的赋值、深浅拷贝

    python——赋值与深浅拷贝 https://www.cnblogs.com/Eva-J/p/5534037.html 啥都不说,看这个博主的文章!

  8. 黄聪:OTP动态密码_Java代码实现

    OTP认知 动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常 ...

  9. JavaWeb——XML转义符字

    被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”.  此标记用于xml文档中,我们先来看看使用转义符的 ...

  10. day32基于tcp协议的远程执行命令

    客户端 from socket import *import structimport json client = socket(AF_INET, SOCK_STREAM)client.connect ...