PHP抓取豆瓣读书爬虫代码
<?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抓取豆瓣读书爬虫代码的更多相关文章
- 用python+selenium抓取豆瓣读书中最受关注图书并按评分排序
抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评 方法一: #coding=utf-8 ...
- 基于Casperjs的网页抓取技术【抓取豆瓣信息网络爬虫实战示例】
CasperJS is a navigation scripting & testing utility for the PhantomJS (WebKit) and SlimerJS (Ge ...
- Python爬虫----抓取豆瓣电影Top250
有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...
- Scrapy爬虫入门系列4抓取豆瓣Top250电影数据
豆瓣有些电影页面需要登录才能查看. 目录 [隐藏] 1 创建工程 2 定义Item 3 编写爬虫(Spider) 4 存储数据 5 配置文件 6 艺搜参考 创建工程 scrapy startproj ...
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
<哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...
- Python小爬虫——抓取豆瓣电影Top250数据
python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...
- python爬虫:利用正则表达式爬取豆瓣读书首页的book
1.问题描述: 爬取豆瓣读书首页的图书的名称.链接.作者.出版日期,并将爬取的数据存储到Excel表格Douban_I.xlsx中 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目 ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- python2.7抓取豆瓣电影top250
利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...
随机推荐
- 【转】安装Django
原文网址:http://www.crifan.com/record_install_django/ 1.参考Quick install guide,最终找到下载的地址: http://bitnami. ...
- TextView及其子类
1.TextView控件(TextView是EditView.Button等类的父类) <1>android:id 给当前控件定义了一个唯一标识符 <2>android:l ...
- 配置java环境时,java的path地址放在其他地址的前面还是后面?
PATH环境变量里是按顺序查找的,如果电脑里只有一个jdk,放哪都一样,有多个放前面的会优先. 一般是放在最前面吧,以免其他在path中的程序需要用到Java环境而由于在JAVA_PATH之前 ...
- 使用rsync+inotify+apache做分布式图片服务器的部署方法
图片服务器一般是做成分布式的,但要使得所有的图片服务器的文件一致,可以由一个主服务器将文件推送到各个备份服务器上. rsync:文件差异检查及文件推送 inotify:事件触发,实时检测到添加.删除. ...
- 锋利的jQuery读书笔记---jQuery中Ajax--序列化元素、Ajax全局事件
serialize()方法: 作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. <!DOCTYPE html> <html> <hea ...
- php 序列化(serialize)格式详解
1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...
- Android项目中单实例数据库类,解决database is locked
一.数据库操作 package com.ping.db; import android.content.Context; import android.database.sqlite.SQLiteDa ...
- android启动页优化实践
最近观看友盟统计发现App启动页跳出率很高,观看启动页的平均启动时间为2.8s,如下图: 所以一个很现实的问题就出来了,优化启动页面... (一)做了什么? 我们的启动页面主要用于展示启动页面,加载网 ...
- Lucene 入门需要了解的东西
全文搜索引擎的原理网上大段的内容,要想深入的学习,最好的办法就是先用一下,lucene 发展比较快,下面是写第一个demo 要注意的一些事情: 1.Lucene的核心jar包,下面几个包分别位于不同 ...
- [Lua]入门教程
什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...