实验楼的php比赛题,网页数据提取。

题目的地址:https://www.shiyanlou.com/contests/lou5/challenges

以下代码是题目的答案

<?php
header("Content-Type:text/html;charset=utf-8");
class Crawler{
private $content;
private $data;
static private $mysql; public function __construct(){
echo "开始爬取内容....";
} public function loadFile($file_path){
echo "正在加载文件";
$this->content = file_get_contents($file_path);
} public function parseCourseBody(){
$regex = "/<body[^>]*?>(.*\s*?)<\/body>/is";
if(preg_match_all($regex, $this->content, $matches)){
$this->content = $matches[0];
}
} public function parseContent(){
echo "开始解析内容...<br/>";
$this->parseCourseBody();
$this->parseTitle();
$this->parseDesc();
$this->parseType();
$this->titleIsLong();
$this->saveData();
echo "解析内容结束!<br/>";
} public function saveData(){
echo "存入数据库...<br/>";
self::$mysql = mysql_connect("localhost","root","root");
mysql_query("set names utf8");
mysql_select_db("databases",self::$mysql);
$cnames = $this->data['cnames'];
$cdescs = $this->data['cdescs'];
$ctypes = $this->data['ctypes'];
$nlongs = $this->data['nlongs'];
foreach ($cnames as $key => $value) {
$sql = "insert into `course_data`(`cname`,`cdesc`,`ctype`,`nlong`) values('".$cnames[$key]."','".$cdescs[$key]."','".$ctypes[$key]."','".$nlongs[$key]."')";
mysql_query($sql);
}
mysql_close();
} public function parseTitle(){
echo "解析课程标题...<br/>";
$regex= "/<div class=\"course-name\".*?>.*?<\/div>/ism";
if(preg_match_all($regex, $this->content, $matches)){
$cnames = $matches[0];
}
foreach ($cnames as &$value) {
$value = str_replace("</div>","",str_replace("<div class=\"course-name\">", "", $value));
}
$this->data['cnames'] = $cnames;
} public function parseDesc(){
echo "解析课程简介...<br/>";
$regex4= "/<div class=\"course-desc\".*?>.*?<\/div>/ism";
if(preg_match_all($regex, $this->content, $matches)){
$cdescs = $matches[0];
}
foreach ($cdescs as &$value) {
$value = str_replace("</div>","",str_replace("<div class=\"course-desc\">", "", $value));
}
$this->data['cdescs'] = $cdescs;
} public function parseType(){
echo "解析课程类型...<br/>";
$regex= "/<div class=\"course-footer\".*?>.*?<\/div>/ism";
if(preg_match_all($regex, $this->content, $matches)){
$ctypes = $matches[0];
}
foreach ($ctypes as &$value) {
$str = str_replace("</div>","",str_replace("<div class=\"course-footer\">", "", $value));
if(preg_match_all("/([\x{4e00}-\x{9fa5}])/u", $str, $match)){
$value = join("",$match[0]);
}else{
$value = "免费";
}
$this->data['ctypes'] = $ctypes;
} public function titleIsLong(){
echo "判断课程名是否超长...<br/>";
$cnames = $this->data['cnames'];
foreach ($cnames as $value) {
$nlongs[] = mb_strlen($value) > 16 : "true" : "false";
}
$this->data['nlongs'] = $nlongs;
}
}
$Crawler = new Crawler();
$Crawler->loadFile("test.html");
$Crawler->parseContent(); /**
表结构
cname(varchar):完整的课程名
cdesc(varchar):课程描述
ctype(varchar):课程类型,值为 免费,会员,训练营。
nlong(enum('true','false')):课程名是否过长,课程名称超过16字符的时候为 true,否则为 false create table `course_data`(
`id` int(11) not null auto_increment,
`cname` varchar(255) default null,
`cdesc` varchar(255) default null,
`ctype` varchar(255) default null,
`nlong` enum('true','false') default null,
primary key (`id`)
)engine=InnoDB default charset=utf8;
*/

  

实验楼的php比赛题,网页数据提取。的更多相关文章

  1. 使用 CSS 选择器从网页中提取数据

    在 R 中,关于网络爬虫最简单易用的扩展包是 rvest.运行以下代码从 CRAN 上安装:install.packages("rvest")首先,加载包并用 read_html( ...

  2. Python【BeautifulSoup解析和提取网页数据】

    [解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...

  3. python爬虫-提取网页数据的三种武器

    常用的提取网页数据的工具有三种xpath.css选择器.正则表达式 1.xpath 1.1在python中使用xpath必须要下载lxml模块: lxml官方文档 :https://lxml.de/i ...

  4. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  5. 分享: 利用Readability解决网页正文提取问题

    原文:http://www.cnblogs.com/iamzyf/p/3529740.html 做数据抓取和分析的各位亲们, 有没有遇到下面的难题呢? - 如何从各式各样的网页中提取正文!? 虽然可以 ...

  6. API例子:用Python驱动Firefox采集网页数据

    1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...

  7. 使用HtmlAgilityPack批量抓取网页数据

    原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页  Htm ...

  8. 利用Readability解决网页正文提取问题

    分享: 利用Readability解决网页正文提取问题   做数据抓取和分析的各位亲们, 有没有遇到下面的难题呢? - 如何从各式各样的网页中提取正文!? 虽然可以用SS为各种网站写脚本做解析, 但是 ...

  9. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

随机推荐

  1. 九度OJ 1016:火星A+B (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4913 解决:1334 题目描述:     读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的, ...

  2. php中一些比常见做法更好的实践

    有些被我们习以为常的做法未必就是最好的,它们可能存在一些安全问题,而解决这些隐患的成本,其实并不高: 密码 常见做法是直接MD5进行加密,比如这样: //加密 $passwordStr = md5($ ...

  3. BZOJ 2142 礼物 数论

    这道题是求组合数终极版. C(n,m) mod P n>=1e9 m>=1e9 P>=1e9且为合数且piqi<=1e5 拓展lucas定理. 实际上就是一点数论小知识的应用. ...

  4. Exception of type 'System.OutOfMemoryException' was thrown

    最近刚换了服务器,开始测试的时候未发现什么问题,可是一旦同一时间段操作的人比较多的时候,就会抛出如下错误: Server Error in '/' Application. Exception of ...

  5. UVA11330 Andy's Shoes —— 置换分解

    题目链接:https://vjudge.net/problem/UVA-11330 题意: 给出n双鞋子,鞋子按左右左右地摆放,但“左右”是否为一对鞋子是不确定的.问:至少交换多少次鞋子,才能把每双鞋 ...

  6. 最全面的HashMap和HashTable的区别

    找工作期间不少企业都会问到有关HashMap和HashTable两者直接的区别,很多博客里虽然有提及但总是没有那么全面,只是一些常用的不同,现在就我自己所总结的比较全面的不同,归纳以下: HashMa ...

  7. JAVA- 清除数组重复元素

    清除数组重复元素并打印新数组. import java.util.*; public class Repeat { public static void main(String[] args) { / ...

  8. block implicitly retains self to indicate this is 警告消除

    Build Settings 输入CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 设置为No

  9. BZOJ 1206 [HNOI2005]虚拟内存:模拟

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1206 题意: 内存大小为n(外存无限大),共有m次访问,每一次访问的信息编号为p. 对于每 ...

  10. utf8_general_ci和utf8_unicode_ci的比较

    看到很多数据库的设计对于中文字符都是选择选用utf8_general_ci而非utf8_unicode_ci utf8_general_ci和utf8_unicode_ci的区别并不大:utf8_un ...