简单的爬虫爬的完整的<img>标签,修改正则即可修改爬取内容
简单的爬虫爬的完整的<img>标签,生成<img>标签结果文件与爬虫经历的网页。
<?php
/*
* 从给定的url获取html内容
*
*
*/
function _getUrlContent($url){
$handle = fopen($url, "r");
if($handle){
$content = stream_get_contents($handle,1024*1024);
return $content;
}else{
return false;
}
}
/**
* 从html内容中筛选链接
*
*/
function _filterUrl($web_content){
$reg_tag_a = '/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/';
$reg_tag_b = '/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i'; //修改这个就可以修改爬取内容
$result = preg_match_all($reg_tag_a,$web_content,$match_result);
$result1 = preg_match_all($reg_tag_b,$web_content,$match_result1);
if($result){
//var_dump($match_result1);
foreach ($match_result1 as $img) {
if(is_string($img))
{
$file = fopen("img.txt","a");
fputs($file,$img."\r\n");
}
else
{
foreach ($img as $img1)
{
if(is_string($img1))
{
$file = fopen("img.txt","a");
fputs($file,$img1."\r\n");
}
else
{
foreach ($img1 as $img2)
{
if(is_string($img2))
{
$file = fopen("img.txt","a");
fputs($file,$img2."\r\n");
}
else
{
foreach ($img2 as $img3)
{
if(is_string($img3))
{
$file = fopen("img.txt","a");
fputs($file,$img3."\r\n");
}
}
}
}
}
}
}
}
return $match_result[1];
}
}
/**
* 修正相对路径
*
*
*/
function _reviseUrl($base_url,$url_list){
$url_info = parse_url($base_url);
$base_url = $url_info["scheme"].'://';
if($url_info["user"]&&$url_info["pass"]){
$base_url .= $url_info["user"].":".$url_info["pass"]."@";
}
$base_url .= $url_info["host"];
if($url_info["port"]){
$base_url .= ":".$url_info["port"];
}
$base_url .= $url_info["path"];
print_r($base_url);
if(is_array($url_list)){
foreach ($url_list as $url_item) {
if(preg_match('/^http/',$url_item)){
//已经是完整的url
$result[] = $url_item;
}else {
//不完整的url
$real_url = $base_url.'/'.$url_item;
$result[] = $real_url;
}
}
return $result;
}else {
return;
}
}
/**
* 爬虫
*
* @param string $url
* @return array
*/
function crawler($url){
$content = _getUrlContent($url);
if($content){
$url_list = _reviseUrl($url,_filterUrl($content));
if($url_list){
return $url_list;
}else {
return ;
}
}else{
return ;
}
}
/**
* 测试用主程序
*
*/
function main(){
$current_url = "https://www.baidu.com/";//初始url
$fp_puts = fopen("url.txt","ab");//记录url列表
$fp_gets = fopen("url.txt","r");//保存url列表
do{
$result_url_arr = crawler($current_url);
if($result_url_arr){
foreach ($result_url_arr as $url) {
fputs($fp_puts,$url."\r\n");
}
}
}while ($current_url = fgets($fp_gets,1024));//不断获得url
}
main();
?>
简单的爬虫爬的完整的<img>标签,修改正则即可修改爬取内容的更多相关文章
- 一个简单java爬虫爬取网页中邮箱并保存
此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...
- 纯手工打造简单分布式爬虫(Python)
前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. ...
- asp.net简单小爬虫
所谓爬虫简单点说,就是把别人网站上的东西爬下来,至于爬做什么用就看你自己了,比如:把别人网站上的东西爬下来放在自己网站中(感觉有点像小偷^v^). 这里随便写了一个爬虫代码(可以自己再去进行完善): ...
- python (1)一个简单的爬虫: python 在windows下 创建文件夹并写入文件
1.一个简单的爬虫:爬取豆瓣的热门电影的信息 写在前面:如何创建本来存在的文件夹并写入 t_path = "d:/py/inn" #本来不存在inn,先定义路径,然后如果不存在,则 ...
- 用python3.x与mysql数据库构建简单的爬虫系统(转)
这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言, ...
- NodeJs实现简单的爬虫
1.爬虫:爬虫,是一种按照一定的规则,自动地抓取网页信息的程序或者脚本:利用NodeJS实现一个简单的爬虫案例,爬取Boss直聘网站的web前端相关的招聘信息,以广州地区为例: 2.脚本所用到的nod ...
- python爬虫系列(1)——一个简单的爬虫实例
本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容:分析html中 ...
- 【转】使用webmagic搭建一个简单的爬虫
[转]使用webmagic搭建一个简单的爬虫 刚刚接触爬虫,听说webmagic很不错,于是就了解了一下. webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代 ...
- 使用python实现简单的爬虫
python爬虫的简单实现 开发环境的配置 python环境的安装 编辑器的安装 爬虫的实现 包的安装 简单爬虫的初步实现 将数据写入到数据库-简单的数据清洗-数据库的连接-数据写入到数据库 开发环境 ...
随机推荐
- js 回调函数理解
function A(callback) { console.log('我是主函数'); setTimeout(function () { callback("我是主函数传出的") ...
- 开始PYTHON之路
曾经的功献给了球场酒精 曾经的激情也献给了爱情 曾经的智商用来副本求生 曾经的VB6老迈的只剩点0 曾经的SQL2000都不兼容 曾经........ 还有一些理想没有实现 还得继续在这个世界谋生 岁 ...
- echarts 自定义主题
https://blog.csdn.net/flitrue/article/details/52841338 import $echarts from 'echarts' import 'echar ...
- CnPack组件包的安装与使用
如果你用过Eclipse.NotePad++等等工具,再试试用刚装好Delphi写代码会很痛苦,你是否觉得Delphi的代码编辑器很不友好? 那就去了解一下CnPack吧,给你的Delphi装上它绝对 ...
- SVG分组和引用
这是我在掘金中的文章链接地址:https://juejin.im/post/5bcfe0fa51882577e3760467
- yii2下载
我发现yii2下载贼困难,不过折腾了很久终于搞下来了. 一,设置镜像 安装composer , 下载 composer.phar 添加中国镜像 composer config -g repo. ...
- AVL Tree Deletion
Overview 知识点: 1. delete函数的signature public AVLTreeNode Delete(AVLTreeNode node, int key) 2. 算法,如何删除节 ...
- 在android studio写car的app代码时遇到的问题
1 Cannot resolve symbol '@drawable/XXX'等问题解决办法方法1."Build " -> "Clean project" ...
- 《Java编程思想》读书笔记-类与对象
欢迎各位读者关注我的微信公众号,共同探讨Java相关技术.生命不止,学习不休! 也许你慢慢地对程序有了这样的认识:程序只是一些列带有方法的对象的组合,这些方法以其它对象为参数,可在任何地方返回,并发送 ...
- leetcode 381.Insert Delete GetRandom
这道题中要求使用O(1)的方法来删除和插入元素的,那么首先需要寻找到对应的元素,这个可以使用map的O(1)的查询时间的,然后是删除对应的元素的,那么可以根据 堆排序中类似的做法把最后面的元素插入到前 ...