<?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. 【转】bzero, memset ,setmem 区别

    原文网址:http://blog.csdn.net/agathe/article/details/6066157 bzero  原型: extern void bzero(void *s, int n ...

  2. OpenGL学习之路(三)

    1 引子 这些天公司一次次的软件发布节点忙的博主不可开交,另外还有其它的一些事也占用了很多时间.现在坐在电脑前,在很安静的环境下,与大家分享自己的OpenGL学习笔记和理解心得,感到格外舒服.这让我回 ...

  3. ACE_SOCK

    该类属中的类都位于ACE_SOCK之下:它提供使用BSD socket编程接口的Internet域和UNIX域协议族的接口.这个类属中的类被进一步划分为: Dgram类, Acceptor类和Stre ...

  4. 职业操盘手内部教材 z

    重 点抢筹区:   是主力机构在低位拉高建仓后的一个相当尴尬的区域!因为在这个区域,场外的绝大多数投资者不敢买,而场内持有的人却很想卖!所以会出现成片的卖盘挂单! 由于主力向上做的意图已经非常明显,所 ...

  5. 1、android源代码下载与跟踪

     学习Android源代码的目的 理解Android API查找API(Activity.Content Provider等) 高级应用开发(ROM定制)  在不同平台下载Android源代码 W ...

  6. 选择下拉列表最大索引值 Select From List By Max Index

    Select是网页表单中较为常见的元素,在Selenium2Library 中也有相应关键字可以操作,比如: (1)通过指定索引选择 Name: Select From List By Index   ...

  7. SSD Cloud Hosting - Linode的配置和部署,搭建Java环境

    0.发牢骚 前一个月在淘宝购买了个Jsp空间,挺便宜的,才38元/年.部署了程序,然后ALIMAMA验证网站,一直提示验证失败.最后找卖家,他说可能是因为空间太慢,照他的推荐换了最好的空间,138元/ ...

  8. 从cocos2dx中寻找函数指针传递的方法

    目的 看到群里有个朋友搞了好几天函数指针传递,没搞好.所以写一篇文章,旨在从cocos2dx中帮朋友们找到如何传递指针. 旧版本的函数指针传递 全局函数函数指针调用 一般在C++11之前,我们一般是这 ...

  9. scala初学

    起因:新公司的程序用scala,为了不落后,不落伍,跟上时代的浪潮,咱们测试也得学学新东西 适合读者:有java经验的IT人士 scala:所有变量都是对象,所有操作都是方法 1.定义变量:变量:类型 ...

  10. Configuring and troubleshooting a Schema Provider

    原文:https://codesmith.atlassian.net/wiki/display/Generator/Configuring+and+troubleshooting+a+Schema+P ...