php利用simple_html_dom类,获取页面内容,充当爬虫角色
PHP脚本扮演爬虫的角色,可能大家第一时间想到可能会是会正则,个人对正则的规则老是记不住,表示比较难下手,今天工作中有个需求需要爬取某个网站上的一些门店信息
无意间在网上看到一个比较好的类库叫:simple_html_dom
github下载地址:https://github.com/samacs/simple_html_dom
最重要的一步:你得先了解别人网站的结构,知道从哪个tab开始是你想要的数据
下面演示下过程吧
实现过程我分了三步
1、将门店信息的经纬度,名称等一些重要信息先插入本地表
- set_time_limit(0);
- $host = '127.0.0.1';
- $user = 'root';
- $user_pwd = '';
- $database = 'dataname';
- $conn = mysql_connect($host,$user,$user_pwd) or die('sss');
- mysql_select_db($database,$conn) or die('dddd');
- mysql_query('set names utf8');
- include('./simple_html_dom-master/simple_html_dom.php');
- $url = '需要爬取的网站URL';
- $html = file_get_html($url);
- $n = 1;
- foreach($html->find('li[data-counts=0]') as $e){
- $storeid = $e->storeid;
- $star = $e->level.'.0';
- $work_time = $e->time;
- $mapx = $e->mapx;
- $mapy = $e->mapy;
- $nickname = $e->mapname;
- $mapadd = $e->mapadd;
- $maptel = $e->maptel;
- $time = date('Y-m-d H:i:s');
- $query = "INSERT INTO `store` (`storeid`,`star`,`work_time`,`longitude`,`latitude`,`create_time`,`nickname`,`address`,`tel`)
- VALUES ($storeid,'".$star."','".$work_time."','".$mapx."','".$mapy."','".$time."','".$nickname."','".$mapadd."','".$maptel."')";
- $res = mysql_query($query);
- //echo $query;exit();
- if($res){
- echo '成功导入第'.$n.'个门店<br>';
- $n++;
- }else{
- die('失败<br>');
- }
- }
2、跳入站点的另一个页面获取门店LOGO图片
- $query = "SELECT storeid FROM store order by id desc";
- $row = mysql_query($query);
- while($rows = mysql_fetch_array($row)){
- $url = 'http://别人站点域名/'.$rows['storeid'].'.jhtml';
- $html = file_get_html($url);
- foreach($html->find('div.onlyOnePic') as $e){
- //获取img的src属性
- $img = $e->firstChild()->src;
- //将远程图片保存到本地
- $content = file_get_contents($img);
- file_put_contents('./store/'.$rows['storeid'].'.jpeg', $content);
- }
- }
3、更新表中对应门店的LOGO字段
- $query = "SELECT storeid FROM store order by id desc";
- $row = mysql_query($query);
- $n = 1;
- while($rows = mysql_fetch_array($row)){
- $img = "https://我自己站点域名/".$rows['storeid'].".jpeg";
- $sql = "UPDATE store set img_url='".$img."' where storeid=".$rows['storeid'];
- $res = mysql_query($sql);
- if($res){
- echo '成功更新第'.$n.'个门店<br>';
- $n++;
- }else{
- echo '失败';
- }
- }
OK,功能实现了,不过还没有更深入的了解这个类库的其他功能,这里也只是做个记录,方便以后需要的时候用
php利用simple_html_dom类,获取页面内容,充当爬虫角色的更多相关文章
- PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置
使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的或true. 1.curl获取页面内容, 直接输出例子: <?php $ ...
- PHP CURL获取页面内容输出例子
使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl ...
- C#获取页面内容的几种方式
常见的Web页面获取页面内容用 WebRequest 或者 HttpWebRequest 来操作 Http 请求. 例如,获取百度网站的 html 页面 var request = WebReques ...
- python+selenium 页面中存在选项卡时,获取页面内容的小技巧
最近用selenium读取页面内容时,遇到包含选项卡的页面,由于选项卡多由js加载其中的内容,所以在网址打开时只能获取到默认显示的选项卡中的内容,而tab2.tab3等等都需要傻傻的点击一下才会获取到 ...
- 利用Retrofit, RxJava获取网络内容
Retrofit & RxJava 关于如何使用Retrofit和RxJava请阅读参考中的两篇文章. Retrofit处理数据 Retrofit是在什么时候处理从网络中获取到的json数据的 ...
- python 携带cookie获取页面内容
有时会遇到爬取的页面需要登录,这就要带上cookie了. 下面记录了几种携带cookie的方法 # coding=utf-8 import requests s = requests.Session( ...
- POST信息模拟登录获取页面内容
最近项目里有一个是要模拟登录后,访问固定页面获取内容的要求,一开始用JQ AJAX好像不支持跨域请求.后使用.net中HttpWebRequest对象来获取.一开始访问总是无法在第二个页面正常访问,好 ...
- android 利用TrafficStats类获取本应用的流量
public void getData() { // PackageManager 包管理类 PackageManager packageManager = BrownserActivity.this ...
- asp.net 利用Response.Filter 获取输出内容, 变更输出内容
重写 Response.Filter 就可以获取或更新输出到浏览器的内容 资料: https://weblog.west-wind.com/posts/2009/Nov/13/Captur ...
随机推荐
- 公众号及H5支付
本篇主要记录微信支付中公众号及H5支付全过程. 1|1准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 1|2配置篇 公众号或者服务号中 -------开发-- ...
- JSP本质的理解(浏览器调试,response里面的文本都是out.write写入网络流)
一.请求转发到一个Servlet 请求重定向后,url显示的是/abc1234这个url 这个jsp页面就是一个servlet[通过our把文本输入的网络流里面去了]
- Makefile中的ifeq 多条件使用
Makefile中的ifeq 多条件使用 网上关于makefile中ifeq的介绍已经很多了,为什么我还要在写这篇文章,因为他们只说了if else两种条件的情况,并没有讲多于两种条件情况的使用. 多 ...
- php读取不到指定的php.ini配置
新建启动脚本 启动时指定路径 解决方案一:修改 /etc/init.d/php-fpm 文件 1 # 在这行命令上添加 指定的配置路径 2 php_opts="--fpm-config $ ...
- 100道JS构造函数面试题
1. var User = { count: 1, getCount: function () { return this.count; } }; console.log(User.getCount( ...
- caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)
[转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...
- PTA上Java问题自查与提问方法
自查 首先请一定先看这篇文章<PTA中提交Java程序的一些套路>.该文囊括了PTA中提交Java程序的几乎所有常见问题,请仔细阅读可以少踩很多坑 题目测试方法:复制样例输入,然后打开一个 ...
- Spring Boot-基础教程
一.关于RESTfull API风格 import java.util.Date; /** * 实体类 */public class User { private int id; private St ...
- cocos2dx自带物理引擎-创建物理世界
首先在createScene()里 auto scene = Scene::createWithPhysics(); 创建带有物理的场景 然后再OnEnter里创建边界框 auto body = Ph ...
- 删除文件夹下各级子目录中的.svn文件
建立一个文本文件,取名为removeSvn.reg(扩展名由txt改为reg),内容如下 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHIN ...