<?php
//演示地址 http://asizu.sinaapp.com/reptile_douban.php
//数据量不是特别大,没有写抓完数据便停止。 喜欢的朋友拿去自己改改就好了
header("Content-Type:text/html;charset=utf-8"); define("MYSQL_HOST",SAE_MYSQL_HOST_M);
define("MYSQL_NAME","douban");
define("MYSQL_USER",SAE_MYSQL_USER);
define("MYSQL_PASSWORD",SAE_MYSQL_PASS);
define("MYSQL_PORT",SAE_MYSQL_PORT); $action = $_GET['url']; if(!empty($action))
{
$data = getLink($action);
$data = str_substr('<div class="article">','<div class="aside">',$data);
$dataArray = explode('<dl>',$data); array_splice($dataArray,0,1); foreach($dataArray as $key => $item)
{
$bookArray[$key]['title'] = str_substr('class="title" target="_blank">','</a>',$item);
$bookArray[$key]['rating'] = str_substr('<span class="rating_nums">','</span>',$item);
$bookArray[$key]['book_id'] = str_substr('/subject/','/?from',$item); if(!selectBookSaveed($bookArray[$key]['title']))
{
insertMysql($bookArray[$key]);
} //$dataArray[$key] = htmlspecialchars($item);
} $page = explode('book?start=',$action);
$new_url = $page[0] ."book?start=". ($page[1] + 15);
// var_dump($page); // var_dump($bookArray);
} //获取连接
function getLink($url)
{
$data = getData($url);
return $data;
} //抓取数据的函数
function getData($url)
{
//初始化
$ch = curl_init(); //设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11'); //执行并获取HTML文档内容
$output = curl_exec($ch); //释放curl句柄
curl_close($ch); //返回数据
return $output;
} //保存入库
function insertMysql($dataArray)
{
$field = "";
$value = "";
foreach($dataArray as $key => $item)
{
$field .= ",".$key;
$value .= ",'".$item."'";
}
$field = substr($field,1,strlen($field)-1);
$value = substr($value,1,strlen($value)-1); $sql = "INSERT INTO douban (".$field.") VALUES(".$value.")";
// var_dump($sql);
// exit;
$result = mysqlOperation($sql); return $result;
} //查询是否已经录入
function selectBookSaveed($title)
{
$sql = "SELECT * FROM douban WHERE title = '".$title."'";
$result = mysqlOperation($sql,"select");
if(empty($result))
{
return false;//未存在
}
return true;
} //数据库操作方法
function mysqlOperation($sql,$method = "query")
{
$mysqli = new mysqli(
SAE_MYSQL_HOST_M,
SAE_MYSQL_USER,
SAE_MYSQL_PASS,
SAE_MYSQL_DB,
SAE_MYSQL_PORT
);
if( mysqli_connect_errno() )
echo 'error';
// return false; if($method == "select")
return mysqli_fetch_assoc($mysqli->query($sql)); if($method == "query")
return $mysqli->query($sql); } // 字符串截取函数
function str_substr($start, $end, $str)
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.min.js"></script>
<script>
$(document).ready(function(){
if($("#input").val() != ""){
$("#froms").submit();
}
});
</script>
<form action="?" method="get" id="froms">
<input id="input" value="<?php echo $new_url; ?>" type="text" name="url">
<input type="submit">
</form>

PHP抓取豆瓣读书爬虫代码的更多相关文章

  1. 用python+selenium抓取豆瓣读书中最受关注图书并按评分排序

    抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评 方法一: #coding=utf-8 ...

  2. 基于Casperjs的网页抓取技术【抓取豆瓣信息网络爬虫实战示例】

    CasperJS is a navigation scripting & testing utility for the PhantomJS (WebKit) and SlimerJS (Ge ...

  3. Python爬虫----抓取豆瓣电影Top250

    有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...

  4. Scrapy爬虫入门系列4抓取豆瓣Top250电影数据

    豆瓣有些电影页面需要登录才能查看. 目录 [隐藏]  1 创建工程 2 定义Item 3 编写爬虫(Spider) 4 存储数据 5 配置文件 6 艺搜参考 创建工程 scrapy startproj ...

  5. 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说

    <哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...

  6. Python小爬虫——抓取豆瓣电影Top250数据

    python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...

  7. python爬虫:利用正则表达式爬取豆瓣读书首页的book

    1.问题描述: 爬取豆瓣读书首页的图书的名称.链接.作者.出版日期,并将爬取的数据存储到Excel表格Douban_I.xlsx中 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目 ...

  8. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  9. python2.7抓取豆瓣电影top250

    利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...

随机推荐

  1. 在centOS中加入本地ISO yum源

    注:本文转载自<liujun_live的博客>,感谢原博主的辛勤写作:原文地址:http://blog.sina.com.cn/s/blog_8ea8e9d50101em6f.html 在 ...

  2. gcc/交叉编译

    一.gcc编译的情况: 1.linux gcc包含的c/c++编译器,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译. 2.linux gcc的应用: ...

  3. php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况.   解决方法:使用 imagesavealpha ...

  4. 服务器中判断客户端socket断开连接的方法

    1, 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源. 所以,必须等客户端先关闭Socket后,服务器端再关闭Socket才能避免TIME_ ...

  5. IOS AutoLayout 遍历修改约束

    self.cvv2View.hidden = YES; self.periodView.hidden = YES; [self.contentView.constraints enumerateObj ...

  6. grails中报Cannot create a session after the response has been committed异常的解决办法

    在grails中,我们在layouts\main.gsp中使用类似如下的代码来判断当前用户处于登录状态时显示相关的登录信息: <g:if test="${session.users}& ...

  7. jquery选择器的使用

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. ubuntu 错误 & 解决

    1.ssh时出现“段错误(核心已转储)” 原因:说明与ssh有关的内核代码被修改过并且部分代码访问内存过界 解决:1.将内核代码被修改过的部分修改回来        2.sudo apt-get re ...

  9. mongdb创建自增主键(primary key)的相关讨论 - Jason.Zhi

    根据mongodb官方文档介绍,如果在插入(insert)操作时,没有指定主键id,那么它会自动给插入行自动附上一个主键id.看起来不错,但是详细看看,就会发现这个id值有点复杂. 如下图: mong ...

  10. Ajax禁止缓存的几个解决方案

    最常用的方法是 方法1:服务器端代码加入  代码如下 复制代码 response.setHeader("Cache-Control", "no-cache, must-r ...