찾다
php教程php手册PHP爬取糗事百科首页糗事

PHP爬取糗事百科首页糗事

突然想获取一些网上的数据来玩玩,因为有SAE的MySql数据库,让它在那呆着没有什么卵用!于是就开始用PHP编写一个爬取糗事百科首页糗事的小程序,数据都保存在MySql中,岂不是很好玩!

说干就干!首先确定思路

获取HTML源码--->解析HTML--->保存到数据库

没有什么难的

1、创建PHP文件“getDataToDB.php”,

2、获取指定URL的HTML源码

这里我用的是curl函数,详细内容参见PHP手册

代码为

 

<span new="" style="font-family:Times">// 获取对应链接的HTMLCODE
function GetHtmlCode($url) {
	$ch = curl_init (); // 初始化一个cur对象
	curl_setopt ( $ch, CURLOPT_URL, $url ); // 设置需要抓取的网页
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // 设置crul参数,要求结果保存到字符串中还是输出到屏幕上
	curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 1000 ); // 设置链接延迟
	$HtmlCode = curl_exec ( $ch ); // 运行curl,请求网页
	return $HtmlCode;
}</span>
3、引入第三方文件’simple_html_dom.php‘来解析HTML

 

这里我没有能力使用正则表达式,就在网上海搜,终于找到这个,就像Java使用Jsoup(使用Jsoup解析滁州学院官网获取新闻列表)一样,具体参见BLOG

代码如下

 

<span new="" style="font-family:Times">function getFmlDataToDB() {
	$link = mysql_connect ( SAE_MYSQL_HOST_M . &#39;:&#39; . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS );
	// 获取源码
	$html = str_get_html ( GetHtmlCode ( http://www.qiushibaike.com/ ) );
	
	if ($link) {
		mysql_select_db ( SAE_MYSQL_DB, $link );
		mysql_query ( &#39;set names utf8&#39; );
		// class=article block untagged mb15
		foreach ( $html->find ( &#39;div[class=article block untagged mb15]&#39; ) as $per ) {
			
			$z = null;
			$t = null;
			$w = null;
			$d = null;
			$p = null;
			$ds = null;
			$ps = null;
			
			// //作者
			$author = $per->find ( &#39;div[class=author]&#39; );
			if ($author != null) {
				$a = $author [0]->find ( &#39;a&#39; );
				$z = $a [1]->innertext;
			} else {
				$z = &#39;no author&#39;;
			}
			
			// 头像链接
			
			if ($author != null) {
				$icon = $author [0]->find ( &#39;a&#39; );
				$t = $icon [0]->src->innertext;
			} else {
				$t = &#39;...............&#39;;
			}
			
			// 文章内容
			$content = $per->find ( &#39;div[class=content]&#39; );
			$w = $content [0]->innertext;
			
			// 点赞数
			$vote1 = $per->find ( &#39;div[class=stats]&#39; );
			$vote2 = $vote1 [0]->find ( &#39;span[class=stats-vote]&#39; );
			$vote3 = $vote2 [0]->find ( &#39;i[class=number]&#39; );
			
			$d = $vote3 [0]->innertext;
			// 评论数
			$comments1 = $vote1 [0]->find ( &#39;span[class=stats-comments]&#39; );
			$comments2 = $comments1 [0]->find ( &#39;a[class=qiushi_comments]&#39; );
			$comments3 = $comments2 [0]->find ( &#39;i[class=number]&#39; );
			$p = $comments3 [0]->innertext;
			// 顶 数
			$up_down = $per->find ( &#39;div[class=stats-buttons bar clearfix]&#39; );
			
			$up_down1 = $up_down [0]->find ( &#39;ul&#39; );
			$li = $up_down1 [0]->find ( &#39;li&#39; );
			$up = $li [0]->find ( &#39;span[class=number hidden]&#39; );
			$ds = $up [0]->innertext;
			// 拍 数
			$down = $li [1]->find ( &#39;span[class=number hidden]&#39; );
			$ps = $down [0]->innertext;

		}
	} else {
		echo &#39;数据库链接KO&#39;;
	}
}</span>
这个代码写的有点纠结,我试了一下不能直接获取子节点的数据,只能从外层一层一层的剥开解析,如果有新的写法,我会更新,也请各位看官看看。

 

4、创建数据库,将数据插入到数据库中

这里我使用的SAE中的MySQL,具体的连接方发参见使用PHP连接SAE中的MySql数据库

需要注意的就是编码格式,区要在执行语句前加上这样一句话

 

<span style="font-family:Microsoft">mysql_query ( &#39;set names utf8&#39; );</span>
核心代码如下:

 

 

<span style="font-family:Microsoft">			$sql = INSERT INTO `app_bmhjqs`.`db_fml` (`id`, `author`, `icon_url`, `content`, `vote`, `comments`, `up`, `down`) VALUES (NULL, &#39;$z&#39;, &#39;$t&#39;, &#39;$w&#39;, &#39;$d&#39;, &#39;$p&#39;, &#39;$ds&#39;, &#39;$ps&#39;);;
			// 解决乱码
			mysql_query ( &#39;set names utf8&#39; );
			$result = mysql_query ( $sql );</span>

这样一来,获取--->解析--->插入就完成了,效果就是运行一次PHP文件,数据库就添加了糗事百科首页上的糗事!我想可不可以写个定时器,每隔一定时间就运行一次代码,这一点在java我可以实现,在php我不会,毕竟是个没长毛的小鸟!百度吧。。。搜到这样的写法

 

 

<span new="" style="font-family:Times">// 定时器
// ignore_user_abort (); // run script. in background
// set_time_limit ( 0 ); // run script. forever
// $interval = 30; // do every 15 minutes..

// do {
// 	echo date ( &#39;Y-m-d H:i:s&#39;, time () );
// 	echo &#39;写入数据库&#39;;
// 	//getFmlDataToDB ();
	
// } while ( true );</span>
在文件里加上这样的代码,正好在学校断网前,发布到了SAE上,我没有测试!只能等到第二天来查看结果了!

 

今天早上,我迫不及待的打开电脑,打开SAE数据库,情况如下:

额滴神!受不鸟了,赶紧把定时器关掉了,写了个按钮触发事件!这样下去,数据库会被挤满的!

 

 

 

 


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
如何设置谷歌浏览器首页如何设置谷歌浏览器首页Mar 02, 2024 pm 04:04 PM

如何设置谷歌浏览器首页?谷歌浏览器是如今最受欢迎的一款网络浏览器软件,这款浏览器拥有简洁高效的特性,神兽用户喜欢,在使用浏览器的时候,不同的人有不同的设置喜好,有人喜欢将谷歌浏览器设置成默认首页,也有人喜欢将首页设置成其他搜索引擎,那么具体要在哪里设置呢。接下来小编就给大家带来快速设置谷歌浏览器首页方法,希望能够给大家带来帮助。快速设置谷歌浏览器首页方法1、打开谷歌浏览器(如图所示)。2、点击界面右上角的菜单键(如图所示)。3、选择“设置”选项(如图所示)。4、在设置菜单中,找到“搜索引擎”(如

谷歌浏览器首页变360了怎么办?谷歌浏览器首页恢复谷歌浏览器首页变360了怎么办?谷歌浏览器首页恢复Mar 15, 2024 am 08:16 AM

谷歌浏览器首页变360了怎么办?谷歌浏览器是一款简洁便利的浏览器,不过很多小伙伴在使用的过程中却发现简洁的首页被替换成了360首页,想要将它恢复为原来的样式,那么应该怎么设置呢?下面就由小编为大家带来谷歌浏览器首页恢复的方法。  解决方法  1、首先打开谷歌浏览器。  2、想要改成默认,那就点击右上角的三个点。  3、点击【设置】打开设置页面。  4、点击【启动时】。  5、如图所示,这里【打开特定网页或一组网页】是360导航的网址。  6、点击360导航右侧的三个点。  7、点击【移除】。  

UniApp实现首页与导航页的设计与开发方法UniApp实现首页与导航页的设计与开发方法Jul 07, 2023 pm 09:09 PM

UniApp实现首页与导航页的设计与开发方法一、简介UniApp是一款基于Vue.js框架构建的跨平台开发工具,能够实现一套代码编译出多个平台的应用程序。在UniApp中,首页和导航页是开发应用时必备的两个页面,本文将介绍UniApp中如何设计和开发这两个页面,并提供相应的代码示例。二、首页设计与开发方法页面结构UniApp的首页一般包含标题栏、轮播图、分类

html子页如何返回到首页html子页如何返回到首页Nov 15, 2023 am 10:33 AM

html子页返回到首页的方法:1、使用超链接;2、使用JavaScript;3、使用浏览器的历史记录。详细介绍:1、使用超链接,在子页中添加一个超链接,将其链接到首页的URL,在子页的底部或导航栏中添加一个"返回首页"的链接,使用”<a>“标签来创建超链接,设置“href”属性为首页的URL;2、使用JavaScript,通过JavaScript代码来实现返回首页的功能等等。

《冒险寻宝然后打败魔王》首页NPC作用一览《冒险寻宝然后打败魔王》首页NPC作用一览Feb 10, 2024 am 11:00 AM

《冒险寻宝然后打败魔王》是一款西幻背景的RogueLike战棋游戏、新游上线,大家新玩家进入遇到不少问题,其中4个首页NPC的作用是什么?接下来就由小编给大家带来了《冒险寻宝然后打败魔王》4个首页NPC作用分享一览。冒险寻宝然后打败魔王首页NPC作用介绍4个首页NPC的作用:1、冒险团:冒险团升级,赛季冒险团升级,装备数量上限升级(背包一场冒险结束后记得去清理一下一些废物装备,要不然占格子空间),角色数量上限升级(初始只有8个角色位,金色角色可以超)2、训练官:训练角色(紫色和金色可以训练),升

如何设计首页轮播图功能的Java开关买菜系统如何设计首页轮播图功能的Java开关买菜系统Nov 01, 2023 am 11:20 AM

如何设计首页轮播图功能的Java开关买菜系统随着互联网的发展,人们的生活方式也在不断改变。越来越多的人开始选择在线购物,其中包括买菜。为了满足用户的需求,许多买菜平台推出了网上订购买菜的功能。而在这些平台中,首页轮播图是一个非常重要的功能之一。本文将介绍如何设计首页轮播图功能的Java开关买菜系统。一、功能需求分析在设计首页轮播图功能之前,我们需要先分析和明

360浏览器首页怎么设置360浏览器首页怎么设置Apr 07, 2024 pm 01:40 PM

360浏览器首页怎么设置?360浏览器是一款安全性非常高的网络浏览器软件,这款浏览器拥有丰富的功能和服务,很多用户喜欢使用这款浏览器办公,360浏览器的主页内容十分丰富,不少用户很喜欢这个主页,也有不少用户比较喜欢更简约的主页,那么我们如何设置360浏览器的主页呢。接下来小编就给大家带来360浏览器首页设置方法介绍,大家快来看看吧。360浏览器首页设置方法介绍1、首先需要先进入360安全浏览器的主界面(如图所示)。2、点击右上方的“三条杠”选项,再点击下拉出现的“设置”选项进入到设置界面就可以进

射雕博物百科四灵水院答题攻略射雕博物百科四灵水院答题攻略Mar 28, 2024 pm 06:31 PM

博物百科四灵水院的答题是游戏中的一个博物百科的答题挑战,那么这个答题挑战的答案是什么呢?小编今天就为大家对这个博物百科的答题答案进行了整理,并且为大家提供了答题的详细的位置,可以帮助你更好的去完成这个博物百科的答题挑战,详细的内容可以在这篇博物百科四灵水院全答题答案大全之中进行了解,一起来看看吧。射雕博物百科四灵水院答题攻略1、首先来到如下图所示的位置。2、在这里可以找到一个叫做孟珙的角色,随后和他进行对话,就可以进行四灵水院的答题挑战了。1、灵水院是由谁建成的?答案:【完颜璟】2、行秀排师又被

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기