
php 网页内容抓取
php 网页内容抓取( Google的URL变了,音乐播放没有中断的原因是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2021-11-07 06:12
Google的URL变了,音乐播放没有中断的原因是什么?)
如何让搜索引擎抓取AJAX内容解决方案
越来越多的网站开始采用“单页应用”。
整个网站只有一个网页,利用Ajax技术根据用户的输入加载不同的内容。
这种方式的优点是用户体验好,节省流量。缺点是 AJAX 内容无法被搜索引擎抓取。例如,您有一个 网站。
http://example.com
用户可以通过井号构造的 URL 看到不同的内容。
http://example.com#1 http://example.com#2 http://example.com#3
但是,搜索引擎只会抓取并忽略井号,因此它们无法索引内容。
为了解决这个问题,谷歌提出了“井号+感叹号”的结构。
http://example.com#!1
当谷歌找到上述网址时,它会自动抓取另一个网址:
http://example.com/?_escaped_fragment_=1
只要你把 AJAX 内容放到这个 URL 上,Google 就会收录。但问题是“井号+感叹号”非常丑陋和繁琐。Twitter曾经使用这种结构,它把
http://twitter.com/ruanyf
改成
http://twitter.com/#!/ruanyf
结果,用户抱怨连连,只用了半年时间就废了。
那么,有没有什么办法可以让搜索引擎在保持一个更直观的URL的同时抓取AJAX内容呢?
一直觉得没有办法,直到两天前看到Discourse创始人之一Robin Ward的解决方案,我才忍不住尖叫起来。
Discourse 是一个严重依赖 Ajax 的论坛程序,但它必须让 Google收录 内容。它的解决方案是放弃hash结构,使用History API。
所谓History API,是指在不刷新页面的情况下,改变浏览器地址栏中显示的URL(准确的说是改变网页的当前状态)。这是一个示例,您单击上面的按钮开始播放音乐。然后,点击下面的链接看看发生了什么?
地址栏中的网址已更改,但音乐播放并未中断!
History API 的详细介绍超出了本文章的范围。简单的说到这里,它的作用就是给浏览器的History对象添加一条记录。
window.history.pushState(state object, title, url);
上面这行命令可以让地址栏中出现一个新的 URL。History对象的pushState方法接受三个参数,新的URL为第三个参数,前两个参数可以为null。
window.history.pushState(null, null, newURL);
目前主流浏览器都支持这种方式:Chrome(26.0+)、Firefox(20.0+)、IE(10.0+)、Safari(5.1+)、歌剧 (12.1+)。
这是罗宾沃德的方法。
首先,用History API替换hash结构,让每个hash符号变成一个正常路径的URL,这样搜索引擎就会抓取每一个网页。
example.com/1 example.com/2 example.com/3
然后,定义一个 JavaScript 函数来处理 Ajax 部分并根据 URL 抓取内容(假设使用 jQuery)。
function anchorClick(link) {<br /> var linkSplit = link.split('/').pop();<br /> $.get('api/' + linkSplit, function(data) {<br /> $('#content').html(data);<br /> });<br /> }
然后定义鼠标的点击事件。
$('#container').on('click', 'a', function(e) {<br /> window.history.pushState(null, null, $(this).attr('href'));<br /> anchorClick($(this).attr('href'));<br /> e.preventDefault();<br /> });
还要考虑用户单击浏览器的“前进/后退”按钮。这时候会触发History对象的popstate事件。
window.addEventListener('popstate', function(e) { <br /> anchorClick(location.pathname); <br /> });
定义以上三段代码后,无需刷新页面即可显示正常路径URL和AJAX内容。
最后,设置服务器端。
因为没有使用 hashtag 结构,所以每个 URL 都是不同的请求。因此,服务器需要向所有这些请求返回具有以下结构的网页,以防止 404 错误。
<br /> <br /> <br /> <br /> ... ...<br /> <br /> <br />
仔细看上面的代码,你会发现一个noscript标签,这就是秘密。
我们将所有我们想要搜索引擎的内容放在了 noscript 标签中。在这种情况下,用户仍然可以在不刷新页面的情况下进行AJAX操作,但是搜索引擎会收录每个页面的主要内容! 查看全部
php 网页内容抓取(
Google的URL变了,音乐播放没有中断的原因是什么?)
如何让搜索引擎抓取AJAX内容解决方案
越来越多的网站开始采用“单页应用”。
整个网站只有一个网页,利用Ajax技术根据用户的输入加载不同的内容。
这种方式的优点是用户体验好,节省流量。缺点是 AJAX 内容无法被搜索引擎抓取。例如,您有一个 网站。
http://example.com
用户可以通过井号构造的 URL 看到不同的内容。
http://example.com#1 http://example.com#2 http://example.com#3
但是,搜索引擎只会抓取并忽略井号,因此它们无法索引内容。
为了解决这个问题,谷歌提出了“井号+感叹号”的结构。
http://example.com#!1
当谷歌找到上述网址时,它会自动抓取另一个网址:
http://example.com/?_escaped_fragment_=1
只要你把 AJAX 内容放到这个 URL 上,Google 就会收录。但问题是“井号+感叹号”非常丑陋和繁琐。Twitter曾经使用这种结构,它把
http://twitter.com/ruanyf
改成
http://twitter.com/#!/ruanyf
结果,用户抱怨连连,只用了半年时间就废了。
那么,有没有什么办法可以让搜索引擎在保持一个更直观的URL的同时抓取AJAX内容呢?
一直觉得没有办法,直到两天前看到Discourse创始人之一Robin Ward的解决方案,我才忍不住尖叫起来。
Discourse 是一个严重依赖 Ajax 的论坛程序,但它必须让 Google收录 内容。它的解决方案是放弃hash结构,使用History API。
所谓History API,是指在不刷新页面的情况下,改变浏览器地址栏中显示的URL(准确的说是改变网页的当前状态)。这是一个示例,您单击上面的按钮开始播放音乐。然后,点击下面的链接看看发生了什么?
地址栏中的网址已更改,但音乐播放并未中断!
History API 的详细介绍超出了本文章的范围。简单的说到这里,它的作用就是给浏览器的History对象添加一条记录。
window.history.pushState(state object, title, url);
上面这行命令可以让地址栏中出现一个新的 URL。History对象的pushState方法接受三个参数,新的URL为第三个参数,前两个参数可以为null。
window.history.pushState(null, null, newURL);
目前主流浏览器都支持这种方式:Chrome(26.0+)、Firefox(20.0+)、IE(10.0+)、Safari(5.1+)、歌剧 (12.1+)。
这是罗宾沃德的方法。
首先,用History API替换hash结构,让每个hash符号变成一个正常路径的URL,这样搜索引擎就会抓取每一个网页。
example.com/1 example.com/2 example.com/3
然后,定义一个 JavaScript 函数来处理 Ajax 部分并根据 URL 抓取内容(假设使用 jQuery)。
function anchorClick(link) {<br /> var linkSplit = link.split('/').pop();<br /> $.get('api/' + linkSplit, function(data) {<br /> $('#content').html(data);<br /> });<br /> }
然后定义鼠标的点击事件。
$('#container').on('click', 'a', function(e) {<br /> window.history.pushState(null, null, $(this).attr('href'));<br /> anchorClick($(this).attr('href'));<br /> e.preventDefault();<br /> });
还要考虑用户单击浏览器的“前进/后退”按钮。这时候会触发History对象的popstate事件。
window.addEventListener('popstate', function(e) { <br /> anchorClick(location.pathname); <br /> });
定义以上三段代码后,无需刷新页面即可显示正常路径URL和AJAX内容。
最后,设置服务器端。
因为没有使用 hashtag 结构,所以每个 URL 都是不同的请求。因此,服务器需要向所有这些请求返回具有以下结构的网页,以防止 404 错误。
<br /> <br /> <br /> <br /> ... ...<br /> <br /> <br />
仔细看上面的代码,你会发现一个noscript标签,这就是秘密。
我们将所有我们想要搜索引擎的内容放在了 noscript 标签中。在这种情况下,用户仍然可以在不刷新页面的情况下进行AJAX操作,但是搜索引擎会收录每个页面的主要内容!
php 网页内容抓取(以人教版地理七年级地理上册为例子(图)循环)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-10-28 15:23
php/161342.html">thinkphp 抓取网站的内容并保存到本地
我需要写一个这样的例子并从电子教科书网站下载一本电子书。
的电子书把书的每一页都看成一幅图,然后一本书就有很多图。我需要批量下载图片。
这是代码部分:
public function download() {
$http = new \Org\Net\Http();
$url_pref = "http://www.dzkbw.com/books/rjb/dili/xc7s/";
$localUrl = "Public/bookcover/";
$reg="|showImg\('(.+)'\);|";
$i=1;
do {
$filename = substr("000".$i,-3).".htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_pref.$filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
curl_close($ch);
$result = preg_match_all($reg,$html,$out, PREG_PATTERN_ORDER);
if($result==1) {
$picUrl = $out[1][0];
$picFilename = substr("000".$i,-3).".jpg";
$http->curlDownload($picUrl, $localUrl.$picFilename);
}
$i = $i+1;
} while ($result==1);
echo "下载完成";
}
这里我以人民教育出版社出版的七年级地理第一册为例。
网页从001.htm开始,然后不断增加
每个网页都有一张图片,与课本的内容相对应。课本内容以图片的形式展示。
我的代码是做一个循环,从第一页开始,直到在网页中找不到图片。
抓取网页内容后,抓取网页中的图片到本地服务器
爬取后的实际效果:
以上就是thinkphp抓取网站的内容并保存到本地的例子的详细说明。如有疑问,请留言或到本站社区讨论讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
注:请移步PHP教程频道阅读相关教程知识。 查看全部
php 网页内容抓取(以人教版地理七年级地理上册为例子(图)循环)
php/161342.html">thinkphp 抓取网站的内容并保存到本地
我需要写一个这样的例子并从电子教科书网站下载一本电子书。
的电子书把书的每一页都看成一幅图,然后一本书就有很多图。我需要批量下载图片。
这是代码部分:
public function download() {
$http = new \Org\Net\Http();
$url_pref = "http://www.dzkbw.com/books/rjb/dili/xc7s/";
$localUrl = "Public/bookcover/";
$reg="|showImg\('(.+)'\);|";
$i=1;
do {
$filename = substr("000".$i,-3).".htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_pref.$filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
curl_close($ch);
$result = preg_match_all($reg,$html,$out, PREG_PATTERN_ORDER);
if($result==1) {
$picUrl = $out[1][0];
$picFilename = substr("000".$i,-3).".jpg";
$http->curlDownload($picUrl, $localUrl.$picFilename);
}
$i = $i+1;
} while ($result==1);
echo "下载完成";
}
这里我以人民教育出版社出版的七年级地理第一册为例。
网页从001.htm开始,然后不断增加
每个网页都有一张图片,与课本的内容相对应。课本内容以图片的形式展示。
我的代码是做一个循环,从第一页开始,直到在网页中找不到图片。
抓取网页内容后,抓取网页中的图片到本地服务器
爬取后的实际效果:

以上就是thinkphp抓取网站的内容并保存到本地的例子的详细说明。如有疑问,请留言或到本站社区讨论讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
注:请移步PHP教程频道阅读相关教程知识。
php 网页内容抓取(SEO实测:新站上线,有内容,还是空内容好?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-10-24 02:14
在做SEO的过程中,这段时间220段和116段的百度蜘蛛是否访问过,似乎成为了SEO从业者的热门话题。很多SEO从业者都在绞尽脑汁提高搜索引擎的抓取频率。概率 收录 页面内容。
但是有时候我们在运营一个新网站的时候,很多SEO从业者希望每天不断输出文章的内容,并保持较高的每日更新频率,从而提高百度蜘蛛的抓取频率。
这个想法不错,但是我们是否有更完美的解决方案,可能还需要进一步分析。
那么,实际的SEO测试:新网站上线,有内容,还是空内容?
后续SEO诊断经验,蝙蝠侠IT,将详细阐述以下内容:
1个频率
可持续的内容输出总是会吸引高频抓取。这是毋庸置疑的事情。长期以来,各个搜索引擎优化者都采用这种策略来保持网站的高频率访问,从而提高网站页面的收录率。
但是这里面有一个微妙的细节,就是爬取频率的量级:我们认为每一个网站页面爬取都有一个数量级,一个新站点已经有10页和100页了。页面之间,必须有一个初始的爬行量级。
此频率通常会影响后续访问的次数。最近我们也做了一些基础测试,发现新站内容丰富的网站或者新网站内容比较空的网站,爬取频率要高很多,如下图所示:
这是大约150个网站的初始内容。基本上我们看到搜索引擎给出的抓取频率还是比较高的。
2 结构
在SEO运营过程中,我们发现网站的结构设计往往也是高频爬取的重要因素。通常我们认为:
① 页面随机内容
新网站上线了。一般来说,除了链接提交策略之外,我们更希望整个网站页面能够展示更多的整个网站内容。因此,有时,我们可能需要充分利用随机内容来填充大量页面的主要内容,以及相关的侧边栏。
一是我们可以不断提高页面呈现的概率。
二是我们可以不断地保持页面的变化,从而吸引搜索引擎频繁访问并发现新页面。
② 页面目录结构
在做SEO的过程中,我们总会听到一些概念,比如:pan-directory,这个词往往和蜘蛛池有关,主要是为了获取大量的搜索引擎蜘蛛,从而增加目标URL地址的爬取概率.
这不免让我们思考,为什么某些特定的目录结构会吸引更多的蜘蛛访问。如果我们试图吸引大量的蜘蛛,我们真的需要大量的域名吗?
我们一直认为事实并非如此,所以有时间的时候,我们就在思考如何使用单个域名来最大限度地提高抓取频率。我们发现常规 URL 地址通常是最容易抓取的。它包括:页面URL的ID,页面URL的目录。
如果你的ID是按逻辑顺序生成的,特别容易吸引搜索引擎按顺序抓取,比如:/a/1.html, /a/2.html, /a/< @k25@ >html,/a/*.html。
如果你的目录简洁,比如:/a/1.html、/b/2.html、/c/.3.html,也会吸引对方频繁爬取。
因此,良好的目录结构和有效的页面展示策略往往是搜索引擎爬虫偏爱的特性。
3个主题
我们知道,当搜索引擎第一次遇到一个网站时,他们通常会根据页面的内容来查看一个网站的主题相关性。一般来说,这个判断过程可能是:对所有页面内容进行中文分词之后,对特定的关键词标签分类进行数据分析。如果某个行业的hashtag比例比较高,那么整个网站的属性可能会比较清晰。
基于这个因素,我们认为新网站的丰富内容是有利于决定整个网站主题垂直度的重要因素。
所以我们建议网站新站,在提交前尽量丰富整个站的内容,可能比较空,然后按照一定的输出频率提交更有效。
总结:SEO测度:新站上线,理论上内容丰富的网站可能在初期抓取频次的幅度上更占优势,后期会根据特定的频次输出,搜索引擎也可能收到比较高的关注度。 查看全部
php 网页内容抓取(SEO实测:新站上线,有内容,还是空内容好?)
在做SEO的过程中,这段时间220段和116段的百度蜘蛛是否访问过,似乎成为了SEO从业者的热门话题。很多SEO从业者都在绞尽脑汁提高搜索引擎的抓取频率。概率 收录 页面内容。
但是有时候我们在运营一个新网站的时候,很多SEO从业者希望每天不断输出文章的内容,并保持较高的每日更新频率,从而提高百度蜘蛛的抓取频率。
这个想法不错,但是我们是否有更完美的解决方案,可能还需要进一步分析。

那么,实际的SEO测试:新网站上线,有内容,还是空内容?
后续SEO诊断经验,蝙蝠侠IT,将详细阐述以下内容:
1个频率
可持续的内容输出总是会吸引高频抓取。这是毋庸置疑的事情。长期以来,各个搜索引擎优化者都采用这种策略来保持网站的高频率访问,从而提高网站页面的收录率。
但是这里面有一个微妙的细节,就是爬取频率的量级:我们认为每一个网站页面爬取都有一个数量级,一个新站点已经有10页和100页了。页面之间,必须有一个初始的爬行量级。
此频率通常会影响后续访问的次数。最近我们也做了一些基础测试,发现新站内容丰富的网站或者新网站内容比较空的网站,爬取频率要高很多,如下图所示:

这是大约150个网站的初始内容。基本上我们看到搜索引擎给出的抓取频率还是比较高的。
2 结构
在SEO运营过程中,我们发现网站的结构设计往往也是高频爬取的重要因素。通常我们认为:
① 页面随机内容
新网站上线了。一般来说,除了链接提交策略之外,我们更希望整个网站页面能够展示更多的整个网站内容。因此,有时,我们可能需要充分利用随机内容来填充大量页面的主要内容,以及相关的侧边栏。
一是我们可以不断提高页面呈现的概率。
二是我们可以不断地保持页面的变化,从而吸引搜索引擎频繁访问并发现新页面。
② 页面目录结构
在做SEO的过程中,我们总会听到一些概念,比如:pan-directory,这个词往往和蜘蛛池有关,主要是为了获取大量的搜索引擎蜘蛛,从而增加目标URL地址的爬取概率.
这不免让我们思考,为什么某些特定的目录结构会吸引更多的蜘蛛访问。如果我们试图吸引大量的蜘蛛,我们真的需要大量的域名吗?
我们一直认为事实并非如此,所以有时间的时候,我们就在思考如何使用单个域名来最大限度地提高抓取频率。我们发现常规 URL 地址通常是最容易抓取的。它包括:页面URL的ID,页面URL的目录。
如果你的ID是按逻辑顺序生成的,特别容易吸引搜索引擎按顺序抓取,比如:/a/1.html, /a/2.html, /a/< @k25@ >html,/a/*.html。
如果你的目录简洁,比如:/a/1.html、/b/2.html、/c/.3.html,也会吸引对方频繁爬取。
因此,良好的目录结构和有效的页面展示策略往往是搜索引擎爬虫偏爱的特性。
3个主题
我们知道,当搜索引擎第一次遇到一个网站时,他们通常会根据页面的内容来查看一个网站的主题相关性。一般来说,这个判断过程可能是:对所有页面内容进行中文分词之后,对特定的关键词标签分类进行数据分析。如果某个行业的hashtag比例比较高,那么整个网站的属性可能会比较清晰。
基于这个因素,我们认为新网站的丰富内容是有利于决定整个网站主题垂直度的重要因素。
所以我们建议网站新站,在提交前尽量丰富整个站的内容,可能比较空,然后按照一定的输出频率提交更有效。
总结:SEO测度:新站上线,理论上内容丰富的网站可能在初期抓取频次的幅度上更占优势,后期会根据特定的频次输出,搜索引擎也可能收到比较高的关注度。
php 网页内容抓取(这篇文章介绍闲来无事,刚学会把git部署到远程服务器)
网站优化 • 优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-10-15 17:20
本文文章介绍了如何在java中使用url实现网页内容爬取
无事可做,刚学会了将git部署到远程服务器上,无事可做,就简单的做了个抓取网页信息的小工具。如果将其中的一些值设置为参数,扩展性能会更好!我希望这是一个好的开始,它也让我更熟练地阅读字符串。值得注意的是JAVA1.8在使用String拼接字符串时会自动询问你。拼接后的字符串由StringBulider处理,极大的优化了String的性能。废话不多说,晒出我的XXX码~
运行结果:
先打开百度百科,搜索一个词条,比如“演员”,然后按F12查看源码
然后抓取你想要的标签并将其注入到 LinkedHashMap 中。这很容易,对吧?看代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
以上就是java中如何使用url实现网页内容爬取的详细内容。更多详情请关注其他相关php中文网站文章!
免责声明:本文原创发表于php中文网。转载请注明出处。感谢您的尊重!如果您有任何疑问,请与我们联系 查看全部
php 网页内容抓取(这篇文章介绍闲来无事,刚学会把git部署到远程服务器)
本文文章介绍了如何在java中使用url实现网页内容爬取
无事可做,刚学会了将git部署到远程服务器上,无事可做,就简单的做了个抓取网页信息的小工具。如果将其中的一些值设置为参数,扩展性能会更好!我希望这是一个好的开始,它也让我更熟练地阅读字符串。值得注意的是JAVA1.8在使用String拼接字符串时会自动询问你。拼接后的字符串由StringBulider处理,极大的优化了String的性能。废话不多说,晒出我的XXX码~
运行结果:

先打开百度百科,搜索一个词条,比如“演员”,然后按F12查看源码

然后抓取你想要的标签并将其注入到 LinkedHashMap 中。这很容易,对吧?看代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
以上就是java中如何使用url实现网页内容爬取的详细内容。更多详情请关注其他相关php中文网站文章!

免责声明:本文原创发表于php中文网。转载请注明出处。感谢您的尊重!如果您有任何疑问,请与我们联系
php 网页内容抓取(php/管理员发布于3年前22方法(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-10-09 21:00
管理员3年前 22发的php php  / 爬取网页内容的详细例子
php抓取网页内容的详细例子
方法一:
使用file_get_contents方法实现
$url = "http://news.sina.com.cn/c/nd/2 ... 3B%3B $html = file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent = iconv("gb2312", "utf-8",$html); echo "".$html."";
代码很简单,一看就懂,就不解释了。
方法二:
使用curl来实现
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
添加此代码表示如果请求被重定向,则可以访问最终的请求页面,否则请求结果将显示如下内容:
Object movedObject MovedThis object may be found here.
如有问题,欢迎留言或到本站社区交流讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持! 查看全部
php 网页内容抓取(php/管理员发布于3年前22方法(图))
管理员3年前 22发的php php  / 爬取网页内容的详细例子
php抓取网页内容的详细例子
方法一:
使用file_get_contents方法实现
$url = "http://news.sina.com.cn/c/nd/2 ... 3B%3B $html = file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent = iconv("gb2312", "utf-8",$html); echo "".$html."";
代码很简单,一看就懂,就不解释了。
方法二:
使用curl来实现
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
添加此代码表示如果请求被重定向,则可以访问最终的请求页面,否则请求结果将显示如下内容:
Object movedObject MovedThis object may be found here.
如有问题,欢迎留言或到本站社区交流讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
php 网页内容抓取(Python时间函数及正则匹配的相关操作技巧(一))
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-09-30 00:35
阅读:5193
本文文章主要介绍Python周期性抓取网页内容的方法,涉及Python时间函数和正则匹配的相关操作技巧。有一定的参考价值。有需要的朋友可以参考
本文介绍如何在 Python 中实现对网页内容的周期性抓取。分享给大家,供大家参考,如下:
1.使用sched模块定期执行指定的函数
2.在指定函数的周期性执行中抓取指定网页,并解析出想要的网页内容,代码为六维论坛在线人数
统计论坛人数的代码:
<p> #coding=utf-8 import time,sched,os,urllib2,re,string #初始化sched模块的scheduler类 #第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 s = sched.scheduler(time.time,time.sleep) #被周期性调度触发的函数 def event_func(): req = urllib2.Request('http://bt.neu6.edu.cn/') respOnse= urllib2.urlopen(req) rawdata = response.read() response.close() usernump = re.compile(r'总计 .*&#63; 人在线') usernummatch = usernump.findall(rawdata) if usernummatch: currentnum=usernummatch[0] currentnum=currentnum[string.index(currentnum,'>')+1:string.rindex(currentnum,' 查看全部
php 网页内容抓取(Python时间函数及正则匹配的相关操作技巧(一))
阅读:5193
本文文章主要介绍Python周期性抓取网页内容的方法,涉及Python时间函数和正则匹配的相关操作技巧。有一定的参考价值。有需要的朋友可以参考
本文介绍如何在 Python 中实现对网页内容的周期性抓取。分享给大家,供大家参考,如下:
1.使用sched模块定期执行指定的函数
2.在指定函数的周期性执行中抓取指定网页,并解析出想要的网页内容,代码为六维论坛在线人数
统计论坛人数的代码:
<p> #coding=utf-8 import time,sched,os,urllib2,re,string #初始化sched模块的scheduler类 #第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 s = sched.scheduler(time.time,time.sleep) #被周期性调度触发的函数 def event_func(): req = urllib2.Request('http://bt.neu6.edu.cn/') respOnse= urllib2.urlopen(req) rawdata = response.read() response.close() usernump = re.compile(r'总计 .*&#63; 人在线') usernummatch = usernump.findall(rawdata) if usernummatch: currentnum=usernummatch[0] currentnum=currentnum[string.index(currentnum,'>')+1:string.rindex(currentnum,'
php 网页内容抓取(php网页内容抓取框架可以很方便的抓取所能抓取)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2021-09-24 12:05
php网页内容抓取框架可以很方便的抓取各种常用抓取框架所能抓取的内容,包括但不限于按钮获取,文字提取,样式提取等。但是它也有一个问题,就是需要安装框架,如果使用web框架的话,这个安装过程肯定是非常麻烦的。而且更为恐怖的是,这些框架可能只提供了一些特殊的网页抓取方法,对于普通网页来说,抓取几乎都是无法实现的。
php网页内容抓取框架又被称为框架抓取器(rapturesorlibraryforframeworks)。因为通常框架抓取器不止一个,会用不同的框架去抓取网页的不同部分。使用框架抓取器在网页抓取上会比用其他框架抓取省时省力。框架本身提供一个稳定的抓取框架(frameworkframework),它的作用是快速抓取页面的结构,将特定网页抓取后的内容储存到一个对象中。
但是对于网页中各个部分的内容来说,要设计一个framework的抓取框架几乎是不可能完成的。所以php框架抓取框架的目的就是解决这一问题。php框架抓取框架必须实现一个php代码封装的通用接口。而提供一个通用的接口其实也并不难。写一个非常简单的爬虫,就可以封装好一个php代码封装的通用接口:$script=["";$thepath='//pre/lib/script/xxx/xxx.php';$origin='//pre/lib/script/xxx/xxx.php';$href='//pre/lib/script/xxx/xxx.php';$successvalue='';$err1=null;$err2=null;$event=null;$timestop=0;$sigstop=0;$click='';$location='';...];抓取原理其实也非常简单:1.编写好抓取的代码2.用python按照代码爬取网页3.php就把抓取好的网页给封装为接口4.然后设置php框架的编译参数,最后用object_get_construct方法拿到网页原始信息php框架抓取框架就是给一个framework提供特定接口就行了,并不要求框架必须提供抓取功能。
所以其实无论是框架,还是非框架抓取框架,抓取原理相同,不需要去管是用框架还是非框架。如果你使用框架抓取框架的话,可以通过一些提供抓取接口的框架,实现在框架内的抓取。如果你想自己实现框架抓取框架,可以使用web框架中已有的框架。本文首发于我的个人博客公众号《牛气冲天》,如果需要对爬虫框架有更深入的了解,可以阅读《php框架抓取框架设计指南》和《php网络框架实践》。 查看全部
php 网页内容抓取(php网页内容抓取框架可以很方便的抓取所能抓取)
php网页内容抓取框架可以很方便的抓取各种常用抓取框架所能抓取的内容,包括但不限于按钮获取,文字提取,样式提取等。但是它也有一个问题,就是需要安装框架,如果使用web框架的话,这个安装过程肯定是非常麻烦的。而且更为恐怖的是,这些框架可能只提供了一些特殊的网页抓取方法,对于普通网页来说,抓取几乎都是无法实现的。
php网页内容抓取框架又被称为框架抓取器(rapturesorlibraryforframeworks)。因为通常框架抓取器不止一个,会用不同的框架去抓取网页的不同部分。使用框架抓取器在网页抓取上会比用其他框架抓取省时省力。框架本身提供一个稳定的抓取框架(frameworkframework),它的作用是快速抓取页面的结构,将特定网页抓取后的内容储存到一个对象中。
但是对于网页中各个部分的内容来说,要设计一个framework的抓取框架几乎是不可能完成的。所以php框架抓取框架的目的就是解决这一问题。php框架抓取框架必须实现一个php代码封装的通用接口。而提供一个通用的接口其实也并不难。写一个非常简单的爬虫,就可以封装好一个php代码封装的通用接口:$script=["";$thepath='//pre/lib/script/xxx/xxx.php';$origin='//pre/lib/script/xxx/xxx.php';$href='//pre/lib/script/xxx/xxx.php';$successvalue='';$err1=null;$err2=null;$event=null;$timestop=0;$sigstop=0;$click='';$location='';...];抓取原理其实也非常简单:1.编写好抓取的代码2.用python按照代码爬取网页3.php就把抓取好的网页给封装为接口4.然后设置php框架的编译参数,最后用object_get_construct方法拿到网页原始信息php框架抓取框架就是给一个framework提供特定接口就行了,并不要求框架必须提供抓取功能。
所以其实无论是框架,还是非框架抓取框架,抓取原理相同,不需要去管是用框架还是非框架。如果你使用框架抓取框架的话,可以通过一些提供抓取接口的框架,实现在框架内的抓取。如果你想自己实现框架抓取框架,可以使用web框架中已有的框架。本文首发于我的个人博客公众号《牛气冲天》,如果需要对爬虫框架有更深入的了解,可以阅读《php框架抓取框架设计指南》和《php网络框架实践》。
php 网页内容抓取(php网页抓取将webgis系统的所有内容抓取下来,标签页)
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-16 15:09
php网页内容抓取将webgis系统的所有内容抓取下来,标签页抓取,抓取标签页里面的内容。请求对象http的header参数有host、connection和user-agent三个参数,当请求的url后缀加php的话,将根据该后缀的base64编码格式的host、connection和user-agent参数进行抓取,以此避免反爬虫爬取不到需要的数据。
php网页内容抓取当请求的url加php,则可以被抓取到内容信息。php网页内容抓取的内容分成两种,一种是网页自身带有的内容,另一种是php解析后,从webgis系统获取的内容,当然可以都保存到数据库里。php网页内容抓取数据库的类型sqlite存储数据。php网页内容抓取网页自身带有的内容数据被加密保存在数据库里,若想对数据库进行操作,则需要对数据库进行加密处理,或对数据库进行处理。
php网页内容抓取,就是获取php网页内容,其区别在于php网页的加密解密和php从网页获取数据两个过程。php从网页获取数据数据库的操作过程:第一步:php编程人员编写sqlite语句,在php解析完网页,并且数据库内容也提交完毕后,对数据库进行分析和处理。第二步:php解析完毕后,将数据在数据库里加密,然后将加密后的内容返回给php解析人员。
php的formdata数据可以进行加密和解密处理,所以很多的数据库管理系统都会收集这类数据,如access、mysql、oracle、ibmdb等。但是,php不支持从网页获取数据,所以需要php脚本进行php网页内容抓取,比如mysql数据库的脚本在解析完数据库内容后,直接返回给php脚本。 查看全部
php 网页内容抓取(php网页抓取将webgis系统的所有内容抓取下来,标签页)
php网页内容抓取将webgis系统的所有内容抓取下来,标签页抓取,抓取标签页里面的内容。请求对象http的header参数有host、connection和user-agent三个参数,当请求的url后缀加php的话,将根据该后缀的base64编码格式的host、connection和user-agent参数进行抓取,以此避免反爬虫爬取不到需要的数据。
php网页内容抓取当请求的url加php,则可以被抓取到内容信息。php网页内容抓取的内容分成两种,一种是网页自身带有的内容,另一种是php解析后,从webgis系统获取的内容,当然可以都保存到数据库里。php网页内容抓取数据库的类型sqlite存储数据。php网页内容抓取网页自身带有的内容数据被加密保存在数据库里,若想对数据库进行操作,则需要对数据库进行加密处理,或对数据库进行处理。
php网页内容抓取,就是获取php网页内容,其区别在于php网页的加密解密和php从网页获取数据两个过程。php从网页获取数据数据库的操作过程:第一步:php编程人员编写sqlite语句,在php解析完网页,并且数据库内容也提交完毕后,对数据库进行分析和处理。第二步:php解析完毕后,将数据在数据库里加密,然后将加密后的内容返回给php解析人员。
php的formdata数据可以进行加密和解密处理,所以很多的数据库管理系统都会收集这类数据,如access、mysql、oracle、ibmdb等。但是,php不支持从网页获取数据,所以需要php脚本进行php网页内容抓取,比如mysql数据库的脚本在解析完数据库内容后,直接返回给php脚本。
php 网页内容抓取(牛逼闪闪的curl也束手无策了,你想采集这些处理过后的内容 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2021-09-11 23:14
)
对于一般的页面数据,我们可以很方便的抓取带有querylist的页面,分析里面的dom树,抓取我们需要的数据,存入数据库,但是有时候我们会遇到我们想通过JavaScript抓取的数据渲染,这次
Puppeteer 插件派上用场,
composerrequirenesk/puphpeteer
npminstall@nesk/puphpeteer --->cnpminstall@nesk/puphpeteer
供参考,按照文档做的时候发现
错误:无法下载 Chromium r672088!设置“PUPPETEER_SKIP_CHROMIUM_DOWNLOAD”环境变量以跳过下载。错误,
解决方案
采集Web 内容是一个很常见的需求,相比传统的静态页面,curl 可以处理。但是如果页面中有动态加载的内容,比如某些页面中通过ajax加载的文章body内容,并且如果某些页面经过一些额外的处理(图片地址替换等...)而你想要采集这些经过处理的内容。那么厉害的curl就无奈了。
做过类似需求的人可能会说,老铁,去PhantomJS吧!
是的,这是一种方式,长期以来,PhantomJS 是少数可以解决这种需求的工具之一。
但是今天我要介绍一个更新的工具-puppeteer,它随着Chrome Headless 技术的兴起而迅速发展。而且非常重要的是,puppeteer 由 Chrome 官方团队开发和维护,可以说是相当可靠!
puppeteer 是一个 js 包,如果你想在 Laravel 中使用它,你必须求助于另一个神器 spatie/browsershot。
安装
安装 spatie/browsershot
Browsershot 是一个 Composer 包,来自大神团队的 Spatie
$ composer require spatie/browsershot
安装 puppeteer
$ npm i puppeteer --save
也可以全局保护puppeteer,但从个人经验来看,建议安装在项目中,因为不同的项目不会同时受到全局安装的puppeteer的影响,在项目中安装是使用phpdeployer升级也很方便(phpdeploy升级不会影响线上项目的运行。要知道升级/安装puppeteer是很费时间的,有时还不能保证一次成功)。
安装 puppeteer 后,将下载 Chromium-Browser。由于我们特殊的国情,很可能无法下载。为此,请施展你的魔法……
使用
以采集今日头条手机版页面文章内容为例。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
$html = Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->bodyHtml();
\Log::info($html);
}
运行后可以在日志中看到如下内容(截图只是其中的一部分)
此外,您可以将页面另存为图片或 PDF 文件。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->setDelay(1000)
->save(public_path('images/toutiao.jpg'));
}
图中方框与系统字体有关。代码中使用了 setDelay() 方法,用于在内容加载后进行截图。它既简单又粗鲁,可能不是最好的解决方案。
可能出现的问题
总结
puppeteer 用于测试、采集 等场景。这是一个非常强大的工具。对于温和的采集 任务,就足够了。比如一些像采集这样的小页面在本文的Laravel(php)中使用,但是如果你需要快速采集很多内容,那就是Python什么的。
查看全部
php 网页内容抓取(牛逼闪闪的curl也束手无策了,你想采集这些处理过后的内容
)
对于一般的页面数据,我们可以很方便的抓取带有querylist的页面,分析里面的dom树,抓取我们需要的数据,存入数据库,但是有时候我们会遇到我们想通过JavaScript抓取的数据渲染,这次
Puppeteer 插件派上用场,
composerrequirenesk/puphpeteer
npminstall@nesk/puphpeteer --->cnpminstall@nesk/puphpeteer
供参考,按照文档做的时候发现
错误:无法下载 Chromium r672088!设置“PUPPETEER_SKIP_CHROMIUM_DOWNLOAD”环境变量以跳过下载。错误,
解决方案
采集Web 内容是一个很常见的需求,相比传统的静态页面,curl 可以处理。但是如果页面中有动态加载的内容,比如某些页面中通过ajax加载的文章body内容,并且如果某些页面经过一些额外的处理(图片地址替换等...)而你想要采集这些经过处理的内容。那么厉害的curl就无奈了。
做过类似需求的人可能会说,老铁,去PhantomJS吧!
是的,这是一种方式,长期以来,PhantomJS 是少数可以解决这种需求的工具之一。
但是今天我要介绍一个更新的工具-puppeteer,它随着Chrome Headless 技术的兴起而迅速发展。而且非常重要的是,puppeteer 由 Chrome 官方团队开发和维护,可以说是相当可靠!
puppeteer 是一个 js 包,如果你想在 Laravel 中使用它,你必须求助于另一个神器 spatie/browsershot。
安装
安装 spatie/browsershot
Browsershot 是一个 Composer 包,来自大神团队的 Spatie
$ composer require spatie/browsershot
安装 puppeteer
$ npm i puppeteer --save
也可以全局保护puppeteer,但从个人经验来看,建议安装在项目中,因为不同的项目不会同时受到全局安装的puppeteer的影响,在项目中安装是使用phpdeployer升级也很方便(phpdeploy升级不会影响线上项目的运行。要知道升级/安装puppeteer是很费时间的,有时还不能保证一次成功)。
安装 puppeteer 后,将下载 Chromium-Browser。由于我们特殊的国情,很可能无法下载。为此,请施展你的魔法……
使用
以采集今日头条手机版页面文章内容为例。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
$html = Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->bodyHtml();
\Log::info($html);
}
运行后可以在日志中看到如下内容(截图只是其中的一部分)

此外,您可以将页面另存为图片或 PDF 文件。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->setDelay(1000)
->save(public_path('images/toutiao.jpg'));
}

图中方框与系统字体有关。代码中使用了 setDelay() 方法,用于在内容加载后进行截图。它既简单又粗鲁,可能不是最好的解决方案。
可能出现的问题
总结
puppeteer 用于测试、采集 等场景。这是一个非常强大的工具。对于温和的采集 任务,就足够了。比如一些像采集这样的小页面在本文的Laravel(php)中使用,但是如果你需要快速采集很多内容,那就是Python什么的。

php 网页内容抓取(这里收集了3种利用php获得网页源代码抓取网页内容的方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-10 20:08
这里汇总了3种利用php获取网页源码抓取网页内容的方法,大家可以根据实际需要选择。 1、使用file_get_contents获取网页的源代码是最常用的方法。它只需要两行代码,非常简单方便。参考代码:
$fh= file_get_contents('https://www.itbiancheng.com/');
echo $fh;
2、使用fopen获取网页源代码。这个方法很多人用,但是代码有点多。参考代码:
$fh = fopen('https://www.itbiancheng.com/', 'r');
if($fh){
while(!feof($fh)) {
echo fgets($fh);
}
}
3、使用 curl 获取网页源代码。使用curl获取网页源代码的做法,往往被要求较高的人采用。 ENCODING 代码的使用,USERAGENT 的使用等等。参考代码一:
$ch = curl_init();// 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "https://www.itbiancheng.com/");// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);// 抓取URL并把它传递给浏览器
echo $data;//输入结果
curl_close($ch);//关闭cURL资源,并且释放系统资源
参考代码二:
$szUrl = "https://www.itbiancheng.com/";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0); //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息
exit();
上例中用到了几个curl_setopt()参数定义,如HEADER、ENCODING、USERAGENT等,更多参数和用法可以参考这里。需要注意的是,在使用curl_init()之前,需要对php.ini进行安全设置,否则函数无法执行 查看全部
php 网页内容抓取(这里收集了3种利用php获得网页源代码抓取网页内容的方法)
这里汇总了3种利用php获取网页源码抓取网页内容的方法,大家可以根据实际需要选择。 1、使用file_get_contents获取网页的源代码是最常用的方法。它只需要两行代码,非常简单方便。参考代码:
$fh= file_get_contents('https://www.itbiancheng.com/');
echo $fh;
2、使用fopen获取网页源代码。这个方法很多人用,但是代码有点多。参考代码:
$fh = fopen('https://www.itbiancheng.com/', 'r');
if($fh){
while(!feof($fh)) {
echo fgets($fh);
}
}
3、使用 curl 获取网页源代码。使用curl获取网页源代码的做法,往往被要求较高的人采用。 ENCODING 代码的使用,USERAGENT 的使用等等。参考代码一:
$ch = curl_init();// 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "https://www.itbiancheng.com/");// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);// 抓取URL并把它传递给浏览器
echo $data;//输入结果
curl_close($ch);//关闭cURL资源,并且释放系统资源
参考代码二:
$szUrl = "https://www.itbiancheng.com/";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0); //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息
exit();
上例中用到了几个curl_setopt()参数定义,如HEADER、ENCODING、USERAGENT等,更多参数和用法可以参考这里。需要注意的是,在使用curl_init()之前,需要对php.ini进行安全设置,否则函数无法执行
php 网页内容抓取( Google的URL变了,音乐播放没有中断的原因是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2021-11-07 06:12
Google的URL变了,音乐播放没有中断的原因是什么?)
如何让搜索引擎抓取AJAX内容解决方案
越来越多的网站开始采用“单页应用”。
整个网站只有一个网页,利用Ajax技术根据用户的输入加载不同的内容。
这种方式的优点是用户体验好,节省流量。缺点是 AJAX 内容无法被搜索引擎抓取。例如,您有一个 网站。
http://example.com
用户可以通过井号构造的 URL 看到不同的内容。
http://example.com#1 http://example.com#2 http://example.com#3
但是,搜索引擎只会抓取并忽略井号,因此它们无法索引内容。
为了解决这个问题,谷歌提出了“井号+感叹号”的结构。
http://example.com#!1
当谷歌找到上述网址时,它会自动抓取另一个网址:
http://example.com/?_escaped_fragment_=1
只要你把 AJAX 内容放到这个 URL 上,Google 就会收录。但问题是“井号+感叹号”非常丑陋和繁琐。Twitter曾经使用这种结构,它把
http://twitter.com/ruanyf
改成
http://twitter.com/#!/ruanyf
结果,用户抱怨连连,只用了半年时间就废了。
那么,有没有什么办法可以让搜索引擎在保持一个更直观的URL的同时抓取AJAX内容呢?
一直觉得没有办法,直到两天前看到Discourse创始人之一Robin Ward的解决方案,我才忍不住尖叫起来。
Discourse 是一个严重依赖 Ajax 的论坛程序,但它必须让 Google收录 内容。它的解决方案是放弃hash结构,使用History API。
所谓History API,是指在不刷新页面的情况下,改变浏览器地址栏中显示的URL(准确的说是改变网页的当前状态)。这是一个示例,您单击上面的按钮开始播放音乐。然后,点击下面的链接看看发生了什么?
地址栏中的网址已更改,但音乐播放并未中断!
History API 的详细介绍超出了本文章的范围。简单的说到这里,它的作用就是给浏览器的History对象添加一条记录。
window.history.pushState(state object, title, url);
上面这行命令可以让地址栏中出现一个新的 URL。History对象的pushState方法接受三个参数,新的URL为第三个参数,前两个参数可以为null。
window.history.pushState(null, null, newURL);
目前主流浏览器都支持这种方式:Chrome(26.0+)、Firefox(20.0+)、IE(10.0+)、Safari(5.1+)、歌剧 (12.1+)。
这是罗宾沃德的方法。
首先,用History API替换hash结构,让每个hash符号变成一个正常路径的URL,这样搜索引擎就会抓取每一个网页。
example.com/1 example.com/2 example.com/3
然后,定义一个 JavaScript 函数来处理 Ajax 部分并根据 URL 抓取内容(假设使用 jQuery)。
function anchorClick(link) {<br /> var linkSplit = link.split('/').pop();<br /> $.get('api/' + linkSplit, function(data) {<br /> $('#content').html(data);<br /> });<br /> }
然后定义鼠标的点击事件。
$('#container').on('click', 'a', function(e) {<br /> window.history.pushState(null, null, $(this).attr('href'));<br /> anchorClick($(this).attr('href'));<br /> e.preventDefault();<br /> });
还要考虑用户单击浏览器的“前进/后退”按钮。这时候会触发History对象的popstate事件。
window.addEventListener('popstate', function(e) { <br /> anchorClick(location.pathname); <br /> });
定义以上三段代码后,无需刷新页面即可显示正常路径URL和AJAX内容。
最后,设置服务器端。
因为没有使用 hashtag 结构,所以每个 URL 都是不同的请求。因此,服务器需要向所有这些请求返回具有以下结构的网页,以防止 404 错误。
<br /> <br /> <br /> <br /> ... ...<br /> <br /> <br />
仔细看上面的代码,你会发现一个noscript标签,这就是秘密。
我们将所有我们想要搜索引擎的内容放在了 noscript 标签中。在这种情况下,用户仍然可以在不刷新页面的情况下进行AJAX操作,但是搜索引擎会收录每个页面的主要内容! 查看全部
php 网页内容抓取(
Google的URL变了,音乐播放没有中断的原因是什么?)
如何让搜索引擎抓取AJAX内容解决方案
越来越多的网站开始采用“单页应用”。
整个网站只有一个网页,利用Ajax技术根据用户的输入加载不同的内容。
这种方式的优点是用户体验好,节省流量。缺点是 AJAX 内容无法被搜索引擎抓取。例如,您有一个 网站。
http://example.com
用户可以通过井号构造的 URL 看到不同的内容。
http://example.com#1 http://example.com#2 http://example.com#3
但是,搜索引擎只会抓取并忽略井号,因此它们无法索引内容。
为了解决这个问题,谷歌提出了“井号+感叹号”的结构。
http://example.com#!1
当谷歌找到上述网址时,它会自动抓取另一个网址:
http://example.com/?_escaped_fragment_=1
只要你把 AJAX 内容放到这个 URL 上,Google 就会收录。但问题是“井号+感叹号”非常丑陋和繁琐。Twitter曾经使用这种结构,它把
http://twitter.com/ruanyf
改成
http://twitter.com/#!/ruanyf
结果,用户抱怨连连,只用了半年时间就废了。
那么,有没有什么办法可以让搜索引擎在保持一个更直观的URL的同时抓取AJAX内容呢?
一直觉得没有办法,直到两天前看到Discourse创始人之一Robin Ward的解决方案,我才忍不住尖叫起来。
Discourse 是一个严重依赖 Ajax 的论坛程序,但它必须让 Google收录 内容。它的解决方案是放弃hash结构,使用History API。
所谓History API,是指在不刷新页面的情况下,改变浏览器地址栏中显示的URL(准确的说是改变网页的当前状态)。这是一个示例,您单击上面的按钮开始播放音乐。然后,点击下面的链接看看发生了什么?
地址栏中的网址已更改,但音乐播放并未中断!
History API 的详细介绍超出了本文章的范围。简单的说到这里,它的作用就是给浏览器的History对象添加一条记录。
window.history.pushState(state object, title, url);
上面这行命令可以让地址栏中出现一个新的 URL。History对象的pushState方法接受三个参数,新的URL为第三个参数,前两个参数可以为null。
window.history.pushState(null, null, newURL);
目前主流浏览器都支持这种方式:Chrome(26.0+)、Firefox(20.0+)、IE(10.0+)、Safari(5.1+)、歌剧 (12.1+)。
这是罗宾沃德的方法。
首先,用History API替换hash结构,让每个hash符号变成一个正常路径的URL,这样搜索引擎就会抓取每一个网页。
example.com/1 example.com/2 example.com/3
然后,定义一个 JavaScript 函数来处理 Ajax 部分并根据 URL 抓取内容(假设使用 jQuery)。
function anchorClick(link) {<br /> var linkSplit = link.split('/').pop();<br /> $.get('api/' + linkSplit, function(data) {<br /> $('#content').html(data);<br /> });<br /> }
然后定义鼠标的点击事件。
$('#container').on('click', 'a', function(e) {<br /> window.history.pushState(null, null, $(this).attr('href'));<br /> anchorClick($(this).attr('href'));<br /> e.preventDefault();<br /> });
还要考虑用户单击浏览器的“前进/后退”按钮。这时候会触发History对象的popstate事件。
window.addEventListener('popstate', function(e) { <br /> anchorClick(location.pathname); <br /> });
定义以上三段代码后,无需刷新页面即可显示正常路径URL和AJAX内容。
最后,设置服务器端。
因为没有使用 hashtag 结构,所以每个 URL 都是不同的请求。因此,服务器需要向所有这些请求返回具有以下结构的网页,以防止 404 错误。
<br /> <br /> <br /> <br /> ... ...<br /> <br /> <br />
仔细看上面的代码,你会发现一个noscript标签,这就是秘密。
我们将所有我们想要搜索引擎的内容放在了 noscript 标签中。在这种情况下,用户仍然可以在不刷新页面的情况下进行AJAX操作,但是搜索引擎会收录每个页面的主要内容!
php 网页内容抓取(以人教版地理七年级地理上册为例子(图)循环)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-10-28 15:23
php/161342.html">thinkphp 抓取网站的内容并保存到本地
我需要写一个这样的例子并从电子教科书网站下载一本电子书。
的电子书把书的每一页都看成一幅图,然后一本书就有很多图。我需要批量下载图片。
这是代码部分:
public function download() {
$http = new \Org\Net\Http();
$url_pref = "http://www.dzkbw.com/books/rjb/dili/xc7s/";
$localUrl = "Public/bookcover/";
$reg="|showImg\('(.+)'\);|";
$i=1;
do {
$filename = substr("000".$i,-3).".htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_pref.$filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
curl_close($ch);
$result = preg_match_all($reg,$html,$out, PREG_PATTERN_ORDER);
if($result==1) {
$picUrl = $out[1][0];
$picFilename = substr("000".$i,-3).".jpg";
$http->curlDownload($picUrl, $localUrl.$picFilename);
}
$i = $i+1;
} while ($result==1);
echo "下载完成";
}
这里我以人民教育出版社出版的七年级地理第一册为例。
网页从001.htm开始,然后不断增加
每个网页都有一张图片,与课本的内容相对应。课本内容以图片的形式展示。
我的代码是做一个循环,从第一页开始,直到在网页中找不到图片。
抓取网页内容后,抓取网页中的图片到本地服务器
爬取后的实际效果:
以上就是thinkphp抓取网站的内容并保存到本地的例子的详细说明。如有疑问,请留言或到本站社区讨论讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
注:请移步PHP教程频道阅读相关教程知识。 查看全部
php 网页内容抓取(以人教版地理七年级地理上册为例子(图)循环)
php/161342.html">thinkphp 抓取网站的内容并保存到本地
我需要写一个这样的例子并从电子教科书网站下载一本电子书。
的电子书把书的每一页都看成一幅图,然后一本书就有很多图。我需要批量下载图片。
这是代码部分:
public function download() {
$http = new \Org\Net\Http();
$url_pref = "http://www.dzkbw.com/books/rjb/dili/xc7s/";
$localUrl = "Public/bookcover/";
$reg="|showImg\('(.+)'\);|";
$i=1;
do {
$filename = substr("000".$i,-3).".htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_pref.$filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
curl_close($ch);
$result = preg_match_all($reg,$html,$out, PREG_PATTERN_ORDER);
if($result==1) {
$picUrl = $out[1][0];
$picFilename = substr("000".$i,-3).".jpg";
$http->curlDownload($picUrl, $localUrl.$picFilename);
}
$i = $i+1;
} while ($result==1);
echo "下载完成";
}
这里我以人民教育出版社出版的七年级地理第一册为例。
网页从001.htm开始,然后不断增加
每个网页都有一张图片,与课本的内容相对应。课本内容以图片的形式展示。
我的代码是做一个循环,从第一页开始,直到在网页中找不到图片。
抓取网页内容后,抓取网页中的图片到本地服务器
爬取后的实际效果:

以上就是thinkphp抓取网站的内容并保存到本地的例子的详细说明。如有疑问,请留言或到本站社区讨论讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
注:请移步PHP教程频道阅读相关教程知识。
php 网页内容抓取(SEO实测:新站上线,有内容,还是空内容好?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-10-24 02:14
在做SEO的过程中,这段时间220段和116段的百度蜘蛛是否访问过,似乎成为了SEO从业者的热门话题。很多SEO从业者都在绞尽脑汁提高搜索引擎的抓取频率。概率 收录 页面内容。
但是有时候我们在运营一个新网站的时候,很多SEO从业者希望每天不断输出文章的内容,并保持较高的每日更新频率,从而提高百度蜘蛛的抓取频率。
这个想法不错,但是我们是否有更完美的解决方案,可能还需要进一步分析。
那么,实际的SEO测试:新网站上线,有内容,还是空内容?
后续SEO诊断经验,蝙蝠侠IT,将详细阐述以下内容:
1个频率
可持续的内容输出总是会吸引高频抓取。这是毋庸置疑的事情。长期以来,各个搜索引擎优化者都采用这种策略来保持网站的高频率访问,从而提高网站页面的收录率。
但是这里面有一个微妙的细节,就是爬取频率的量级:我们认为每一个网站页面爬取都有一个数量级,一个新站点已经有10页和100页了。页面之间,必须有一个初始的爬行量级。
此频率通常会影响后续访问的次数。最近我们也做了一些基础测试,发现新站内容丰富的网站或者新网站内容比较空的网站,爬取频率要高很多,如下图所示:
这是大约150个网站的初始内容。基本上我们看到搜索引擎给出的抓取频率还是比较高的。
2 结构
在SEO运营过程中,我们发现网站的结构设计往往也是高频爬取的重要因素。通常我们认为:
① 页面随机内容
新网站上线了。一般来说,除了链接提交策略之外,我们更希望整个网站页面能够展示更多的整个网站内容。因此,有时,我们可能需要充分利用随机内容来填充大量页面的主要内容,以及相关的侧边栏。
一是我们可以不断提高页面呈现的概率。
二是我们可以不断地保持页面的变化,从而吸引搜索引擎频繁访问并发现新页面。
② 页面目录结构
在做SEO的过程中,我们总会听到一些概念,比如:pan-directory,这个词往往和蜘蛛池有关,主要是为了获取大量的搜索引擎蜘蛛,从而增加目标URL地址的爬取概率.
这不免让我们思考,为什么某些特定的目录结构会吸引更多的蜘蛛访问。如果我们试图吸引大量的蜘蛛,我们真的需要大量的域名吗?
我们一直认为事实并非如此,所以有时间的时候,我们就在思考如何使用单个域名来最大限度地提高抓取频率。我们发现常规 URL 地址通常是最容易抓取的。它包括:页面URL的ID,页面URL的目录。
如果你的ID是按逻辑顺序生成的,特别容易吸引搜索引擎按顺序抓取,比如:/a/1.html, /a/2.html, /a/< @k25@ >html,/a/*.html。
如果你的目录简洁,比如:/a/1.html、/b/2.html、/c/.3.html,也会吸引对方频繁爬取。
因此,良好的目录结构和有效的页面展示策略往往是搜索引擎爬虫偏爱的特性。
3个主题
我们知道,当搜索引擎第一次遇到一个网站时,他们通常会根据页面的内容来查看一个网站的主题相关性。一般来说,这个判断过程可能是:对所有页面内容进行中文分词之后,对特定的关键词标签分类进行数据分析。如果某个行业的hashtag比例比较高,那么整个网站的属性可能会比较清晰。
基于这个因素,我们认为新网站的丰富内容是有利于决定整个网站主题垂直度的重要因素。
所以我们建议网站新站,在提交前尽量丰富整个站的内容,可能比较空,然后按照一定的输出频率提交更有效。
总结:SEO测度:新站上线,理论上内容丰富的网站可能在初期抓取频次的幅度上更占优势,后期会根据特定的频次输出,搜索引擎也可能收到比较高的关注度。 查看全部
php 网页内容抓取(SEO实测:新站上线,有内容,还是空内容好?)
在做SEO的过程中,这段时间220段和116段的百度蜘蛛是否访问过,似乎成为了SEO从业者的热门话题。很多SEO从业者都在绞尽脑汁提高搜索引擎的抓取频率。概率 收录 页面内容。
但是有时候我们在运营一个新网站的时候,很多SEO从业者希望每天不断输出文章的内容,并保持较高的每日更新频率,从而提高百度蜘蛛的抓取频率。
这个想法不错,但是我们是否有更完美的解决方案,可能还需要进一步分析。

那么,实际的SEO测试:新网站上线,有内容,还是空内容?
后续SEO诊断经验,蝙蝠侠IT,将详细阐述以下内容:
1个频率
可持续的内容输出总是会吸引高频抓取。这是毋庸置疑的事情。长期以来,各个搜索引擎优化者都采用这种策略来保持网站的高频率访问,从而提高网站页面的收录率。
但是这里面有一个微妙的细节,就是爬取频率的量级:我们认为每一个网站页面爬取都有一个数量级,一个新站点已经有10页和100页了。页面之间,必须有一个初始的爬行量级。
此频率通常会影响后续访问的次数。最近我们也做了一些基础测试,发现新站内容丰富的网站或者新网站内容比较空的网站,爬取频率要高很多,如下图所示:

这是大约150个网站的初始内容。基本上我们看到搜索引擎给出的抓取频率还是比较高的。
2 结构
在SEO运营过程中,我们发现网站的结构设计往往也是高频爬取的重要因素。通常我们认为:
① 页面随机内容
新网站上线了。一般来说,除了链接提交策略之外,我们更希望整个网站页面能够展示更多的整个网站内容。因此,有时,我们可能需要充分利用随机内容来填充大量页面的主要内容,以及相关的侧边栏。
一是我们可以不断提高页面呈现的概率。
二是我们可以不断地保持页面的变化,从而吸引搜索引擎频繁访问并发现新页面。
② 页面目录结构
在做SEO的过程中,我们总会听到一些概念,比如:pan-directory,这个词往往和蜘蛛池有关,主要是为了获取大量的搜索引擎蜘蛛,从而增加目标URL地址的爬取概率.
这不免让我们思考,为什么某些特定的目录结构会吸引更多的蜘蛛访问。如果我们试图吸引大量的蜘蛛,我们真的需要大量的域名吗?
我们一直认为事实并非如此,所以有时间的时候,我们就在思考如何使用单个域名来最大限度地提高抓取频率。我们发现常规 URL 地址通常是最容易抓取的。它包括:页面URL的ID,页面URL的目录。
如果你的ID是按逻辑顺序生成的,特别容易吸引搜索引擎按顺序抓取,比如:/a/1.html, /a/2.html, /a/< @k25@ >html,/a/*.html。
如果你的目录简洁,比如:/a/1.html、/b/2.html、/c/.3.html,也会吸引对方频繁爬取。
因此,良好的目录结构和有效的页面展示策略往往是搜索引擎爬虫偏爱的特性。
3个主题
我们知道,当搜索引擎第一次遇到一个网站时,他们通常会根据页面的内容来查看一个网站的主题相关性。一般来说,这个判断过程可能是:对所有页面内容进行中文分词之后,对特定的关键词标签分类进行数据分析。如果某个行业的hashtag比例比较高,那么整个网站的属性可能会比较清晰。
基于这个因素,我们认为新网站的丰富内容是有利于决定整个网站主题垂直度的重要因素。
所以我们建议网站新站,在提交前尽量丰富整个站的内容,可能比较空,然后按照一定的输出频率提交更有效。
总结:SEO测度:新站上线,理论上内容丰富的网站可能在初期抓取频次的幅度上更占优势,后期会根据特定的频次输出,搜索引擎也可能收到比较高的关注度。
php 网页内容抓取(这篇文章介绍闲来无事,刚学会把git部署到远程服务器)
网站优化 • 优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-10-15 17:20
本文文章介绍了如何在java中使用url实现网页内容爬取
无事可做,刚学会了将git部署到远程服务器上,无事可做,就简单的做了个抓取网页信息的小工具。如果将其中的一些值设置为参数,扩展性能会更好!我希望这是一个好的开始,它也让我更熟练地阅读字符串。值得注意的是JAVA1.8在使用String拼接字符串时会自动询问你。拼接后的字符串由StringBulider处理,极大的优化了String的性能。废话不多说,晒出我的XXX码~
运行结果:
先打开百度百科,搜索一个词条,比如“演员”,然后按F12查看源码
然后抓取你想要的标签并将其注入到 LinkedHashMap 中。这很容易,对吧?看代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
以上就是java中如何使用url实现网页内容爬取的详细内容。更多详情请关注其他相关php中文网站文章!
免责声明:本文原创发表于php中文网。转载请注明出处。感谢您的尊重!如果您有任何疑问,请与我们联系 查看全部
php 网页内容抓取(这篇文章介绍闲来无事,刚学会把git部署到远程服务器)
本文文章介绍了如何在java中使用url实现网页内容爬取
无事可做,刚学会了将git部署到远程服务器上,无事可做,就简单的做了个抓取网页信息的小工具。如果将其中的一些值设置为参数,扩展性能会更好!我希望这是一个好的开始,它也让我更熟练地阅读字符串。值得注意的是JAVA1.8在使用String拼接字符串时会自动询问你。拼接后的字符串由StringBulider处理,极大的优化了String的性能。废话不多说,晒出我的XXX码~
运行结果:

先打开百度百科,搜索一个词条,比如“演员”,然后按F12查看源码

然后抓取你想要的标签并将其注入到 LinkedHashMap 中。这很容易,对吧?看代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
以上就是java中如何使用url实现网页内容爬取的详细内容。更多详情请关注其他相关php中文网站文章!

免责声明:本文原创发表于php中文网。转载请注明出处。感谢您的尊重!如果您有任何疑问,请与我们联系
php 网页内容抓取(php/管理员发布于3年前22方法(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-10-09 21:00
管理员3年前 22发的php php  / 爬取网页内容的详细例子
php抓取网页内容的详细例子
方法一:
使用file_get_contents方法实现
$url = "http://news.sina.com.cn/c/nd/2 ... 3B%3B $html = file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent = iconv("gb2312", "utf-8",$html); echo "".$html."";
代码很简单,一看就懂,就不解释了。
方法二:
使用curl来实现
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
添加此代码表示如果请求被重定向,则可以访问最终的请求页面,否则请求结果将显示如下内容:
Object movedObject MovedThis object may be found here.
如有问题,欢迎留言或到本站社区交流讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持! 查看全部
php 网页内容抓取(php/管理员发布于3年前22方法(图))
管理员3年前 22发的php php  / 爬取网页内容的详细例子
php抓取网页内容的详细例子
方法一:
使用file_get_contents方法实现
$url = "http://news.sina.com.cn/c/nd/2 ... 3B%3B $html = file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent = iconv("gb2312", "utf-8",$html); echo "".$html."";
代码很简单,一看就懂,就不解释了。
方法二:
使用curl来实现
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
添加此代码表示如果请求被重定向,则可以访问最终的请求页面,否则请求结果将显示如下内容:
Object movedObject MovedThis object may be found here.
如有问题,欢迎留言或到本站社区交流讨论。感谢您的阅读,希望对大家有所帮助。感谢您对本站的支持!
php 网页内容抓取(Python时间函数及正则匹配的相关操作技巧(一))
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-09-30 00:35
阅读:5193
本文文章主要介绍Python周期性抓取网页内容的方法,涉及Python时间函数和正则匹配的相关操作技巧。有一定的参考价值。有需要的朋友可以参考
本文介绍如何在 Python 中实现对网页内容的周期性抓取。分享给大家,供大家参考,如下:
1.使用sched模块定期执行指定的函数
2.在指定函数的周期性执行中抓取指定网页,并解析出想要的网页内容,代码为六维论坛在线人数
统计论坛人数的代码:
<p> #coding=utf-8 import time,sched,os,urllib2,re,string #初始化sched模块的scheduler类 #第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 s = sched.scheduler(time.time,time.sleep) #被周期性调度触发的函数 def event_func(): req = urllib2.Request('http://bt.neu6.edu.cn/') respOnse= urllib2.urlopen(req) rawdata = response.read() response.close() usernump = re.compile(r'总计 .*&#63; 人在线') usernummatch = usernump.findall(rawdata) if usernummatch: currentnum=usernummatch[0] currentnum=currentnum[string.index(currentnum,'>')+1:string.rindex(currentnum,' 查看全部
php 网页内容抓取(Python时间函数及正则匹配的相关操作技巧(一))
阅读:5193
本文文章主要介绍Python周期性抓取网页内容的方法,涉及Python时间函数和正则匹配的相关操作技巧。有一定的参考价值。有需要的朋友可以参考
本文介绍如何在 Python 中实现对网页内容的周期性抓取。分享给大家,供大家参考,如下:
1.使用sched模块定期执行指定的函数
2.在指定函数的周期性执行中抓取指定网页,并解析出想要的网页内容,代码为六维论坛在线人数
统计论坛人数的代码:
<p> #coding=utf-8 import time,sched,os,urllib2,re,string #初始化sched模块的scheduler类 #第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 s = sched.scheduler(time.time,time.sleep) #被周期性调度触发的函数 def event_func(): req = urllib2.Request('http://bt.neu6.edu.cn/') respOnse= urllib2.urlopen(req) rawdata = response.read() response.close() usernump = re.compile(r'总计 .*&#63; 人在线') usernummatch = usernump.findall(rawdata) if usernummatch: currentnum=usernummatch[0] currentnum=currentnum[string.index(currentnum,'>')+1:string.rindex(currentnum,'
php 网页内容抓取(php网页内容抓取框架可以很方便的抓取所能抓取)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2021-09-24 12:05
php网页内容抓取框架可以很方便的抓取各种常用抓取框架所能抓取的内容,包括但不限于按钮获取,文字提取,样式提取等。但是它也有一个问题,就是需要安装框架,如果使用web框架的话,这个安装过程肯定是非常麻烦的。而且更为恐怖的是,这些框架可能只提供了一些特殊的网页抓取方法,对于普通网页来说,抓取几乎都是无法实现的。
php网页内容抓取框架又被称为框架抓取器(rapturesorlibraryforframeworks)。因为通常框架抓取器不止一个,会用不同的框架去抓取网页的不同部分。使用框架抓取器在网页抓取上会比用其他框架抓取省时省力。框架本身提供一个稳定的抓取框架(frameworkframework),它的作用是快速抓取页面的结构,将特定网页抓取后的内容储存到一个对象中。
但是对于网页中各个部分的内容来说,要设计一个framework的抓取框架几乎是不可能完成的。所以php框架抓取框架的目的就是解决这一问题。php框架抓取框架必须实现一个php代码封装的通用接口。而提供一个通用的接口其实也并不难。写一个非常简单的爬虫,就可以封装好一个php代码封装的通用接口:$script=["";$thepath='//pre/lib/script/xxx/xxx.php';$origin='//pre/lib/script/xxx/xxx.php';$href='//pre/lib/script/xxx/xxx.php';$successvalue='';$err1=null;$err2=null;$event=null;$timestop=0;$sigstop=0;$click='';$location='';...];抓取原理其实也非常简单:1.编写好抓取的代码2.用python按照代码爬取网页3.php就把抓取好的网页给封装为接口4.然后设置php框架的编译参数,最后用object_get_construct方法拿到网页原始信息php框架抓取框架就是给一个framework提供特定接口就行了,并不要求框架必须提供抓取功能。
所以其实无论是框架,还是非框架抓取框架,抓取原理相同,不需要去管是用框架还是非框架。如果你使用框架抓取框架的话,可以通过一些提供抓取接口的框架,实现在框架内的抓取。如果你想自己实现框架抓取框架,可以使用web框架中已有的框架。本文首发于我的个人博客公众号《牛气冲天》,如果需要对爬虫框架有更深入的了解,可以阅读《php框架抓取框架设计指南》和《php网络框架实践》。 查看全部
php 网页内容抓取(php网页内容抓取框架可以很方便的抓取所能抓取)
php网页内容抓取框架可以很方便的抓取各种常用抓取框架所能抓取的内容,包括但不限于按钮获取,文字提取,样式提取等。但是它也有一个问题,就是需要安装框架,如果使用web框架的话,这个安装过程肯定是非常麻烦的。而且更为恐怖的是,这些框架可能只提供了一些特殊的网页抓取方法,对于普通网页来说,抓取几乎都是无法实现的。
php网页内容抓取框架又被称为框架抓取器(rapturesorlibraryforframeworks)。因为通常框架抓取器不止一个,会用不同的框架去抓取网页的不同部分。使用框架抓取器在网页抓取上会比用其他框架抓取省时省力。框架本身提供一个稳定的抓取框架(frameworkframework),它的作用是快速抓取页面的结构,将特定网页抓取后的内容储存到一个对象中。
但是对于网页中各个部分的内容来说,要设计一个framework的抓取框架几乎是不可能完成的。所以php框架抓取框架的目的就是解决这一问题。php框架抓取框架必须实现一个php代码封装的通用接口。而提供一个通用的接口其实也并不难。写一个非常简单的爬虫,就可以封装好一个php代码封装的通用接口:$script=["";$thepath='//pre/lib/script/xxx/xxx.php';$origin='//pre/lib/script/xxx/xxx.php';$href='//pre/lib/script/xxx/xxx.php';$successvalue='';$err1=null;$err2=null;$event=null;$timestop=0;$sigstop=0;$click='';$location='';...];抓取原理其实也非常简单:1.编写好抓取的代码2.用python按照代码爬取网页3.php就把抓取好的网页给封装为接口4.然后设置php框架的编译参数,最后用object_get_construct方法拿到网页原始信息php框架抓取框架就是给一个framework提供特定接口就行了,并不要求框架必须提供抓取功能。
所以其实无论是框架,还是非框架抓取框架,抓取原理相同,不需要去管是用框架还是非框架。如果你使用框架抓取框架的话,可以通过一些提供抓取接口的框架,实现在框架内的抓取。如果你想自己实现框架抓取框架,可以使用web框架中已有的框架。本文首发于我的个人博客公众号《牛气冲天》,如果需要对爬虫框架有更深入的了解,可以阅读《php框架抓取框架设计指南》和《php网络框架实践》。
php 网页内容抓取(php网页抓取将webgis系统的所有内容抓取下来,标签页)
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-16 15:09
php网页内容抓取将webgis系统的所有内容抓取下来,标签页抓取,抓取标签页里面的内容。请求对象http的header参数有host、connection和user-agent三个参数,当请求的url后缀加php的话,将根据该后缀的base64编码格式的host、connection和user-agent参数进行抓取,以此避免反爬虫爬取不到需要的数据。
php网页内容抓取当请求的url加php,则可以被抓取到内容信息。php网页内容抓取的内容分成两种,一种是网页自身带有的内容,另一种是php解析后,从webgis系统获取的内容,当然可以都保存到数据库里。php网页内容抓取数据库的类型sqlite存储数据。php网页内容抓取网页自身带有的内容数据被加密保存在数据库里,若想对数据库进行操作,则需要对数据库进行加密处理,或对数据库进行处理。
php网页内容抓取,就是获取php网页内容,其区别在于php网页的加密解密和php从网页获取数据两个过程。php从网页获取数据数据库的操作过程:第一步:php编程人员编写sqlite语句,在php解析完网页,并且数据库内容也提交完毕后,对数据库进行分析和处理。第二步:php解析完毕后,将数据在数据库里加密,然后将加密后的内容返回给php解析人员。
php的formdata数据可以进行加密和解密处理,所以很多的数据库管理系统都会收集这类数据,如access、mysql、oracle、ibmdb等。但是,php不支持从网页获取数据,所以需要php脚本进行php网页内容抓取,比如mysql数据库的脚本在解析完数据库内容后,直接返回给php脚本。 查看全部
php 网页内容抓取(php网页抓取将webgis系统的所有内容抓取下来,标签页)
php网页内容抓取将webgis系统的所有内容抓取下来,标签页抓取,抓取标签页里面的内容。请求对象http的header参数有host、connection和user-agent三个参数,当请求的url后缀加php的话,将根据该后缀的base64编码格式的host、connection和user-agent参数进行抓取,以此避免反爬虫爬取不到需要的数据。
php网页内容抓取当请求的url加php,则可以被抓取到内容信息。php网页内容抓取的内容分成两种,一种是网页自身带有的内容,另一种是php解析后,从webgis系统获取的内容,当然可以都保存到数据库里。php网页内容抓取数据库的类型sqlite存储数据。php网页内容抓取网页自身带有的内容数据被加密保存在数据库里,若想对数据库进行操作,则需要对数据库进行加密处理,或对数据库进行处理。
php网页内容抓取,就是获取php网页内容,其区别在于php网页的加密解密和php从网页获取数据两个过程。php从网页获取数据数据库的操作过程:第一步:php编程人员编写sqlite语句,在php解析完网页,并且数据库内容也提交完毕后,对数据库进行分析和处理。第二步:php解析完毕后,将数据在数据库里加密,然后将加密后的内容返回给php解析人员。
php的formdata数据可以进行加密和解密处理,所以很多的数据库管理系统都会收集这类数据,如access、mysql、oracle、ibmdb等。但是,php不支持从网页获取数据,所以需要php脚本进行php网页内容抓取,比如mysql数据库的脚本在解析完数据库内容后,直接返回给php脚本。
php 网页内容抓取(牛逼闪闪的curl也束手无策了,你想采集这些处理过后的内容 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2021-09-11 23:14
)
对于一般的页面数据,我们可以很方便的抓取带有querylist的页面,分析里面的dom树,抓取我们需要的数据,存入数据库,但是有时候我们会遇到我们想通过JavaScript抓取的数据渲染,这次
Puppeteer 插件派上用场,
composerrequirenesk/puphpeteer
npminstall@nesk/puphpeteer --->cnpminstall@nesk/puphpeteer
供参考,按照文档做的时候发现
错误:无法下载 Chromium r672088!设置“PUPPETEER_SKIP_CHROMIUM_DOWNLOAD”环境变量以跳过下载。错误,
解决方案
采集Web 内容是一个很常见的需求,相比传统的静态页面,curl 可以处理。但是如果页面中有动态加载的内容,比如某些页面中通过ajax加载的文章body内容,并且如果某些页面经过一些额外的处理(图片地址替换等...)而你想要采集这些经过处理的内容。那么厉害的curl就无奈了。
做过类似需求的人可能会说,老铁,去PhantomJS吧!
是的,这是一种方式,长期以来,PhantomJS 是少数可以解决这种需求的工具之一。
但是今天我要介绍一个更新的工具-puppeteer,它随着Chrome Headless 技术的兴起而迅速发展。而且非常重要的是,puppeteer 由 Chrome 官方团队开发和维护,可以说是相当可靠!
puppeteer 是一个 js 包,如果你想在 Laravel 中使用它,你必须求助于另一个神器 spatie/browsershot。
安装
安装 spatie/browsershot
Browsershot 是一个 Composer 包,来自大神团队的 Spatie
$ composer require spatie/browsershot
安装 puppeteer
$ npm i puppeteer --save
也可以全局保护puppeteer,但从个人经验来看,建议安装在项目中,因为不同的项目不会同时受到全局安装的puppeteer的影响,在项目中安装是使用phpdeployer升级也很方便(phpdeploy升级不会影响线上项目的运行。要知道升级/安装puppeteer是很费时间的,有时还不能保证一次成功)。
安装 puppeteer 后,将下载 Chromium-Browser。由于我们特殊的国情,很可能无法下载。为此,请施展你的魔法……
使用
以采集今日头条手机版页面文章内容为例。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
$html = Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->bodyHtml();
\Log::info($html);
}
运行后可以在日志中看到如下内容(截图只是其中的一部分)
此外,您可以将页面另存为图片或 PDF 文件。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->setDelay(1000)
->save(public_path('images/toutiao.jpg'));
}
图中方框与系统字体有关。代码中使用了 setDelay() 方法,用于在内容加载后进行截图。它既简单又粗鲁,可能不是最好的解决方案。
可能出现的问题
总结
puppeteer 用于测试、采集 等场景。这是一个非常强大的工具。对于温和的采集 任务,就足够了。比如一些像采集这样的小页面在本文的Laravel(php)中使用,但是如果你需要快速采集很多内容,那就是Python什么的。
查看全部
php 网页内容抓取(牛逼闪闪的curl也束手无策了,你想采集这些处理过后的内容
)
对于一般的页面数据,我们可以很方便的抓取带有querylist的页面,分析里面的dom树,抓取我们需要的数据,存入数据库,但是有时候我们会遇到我们想通过JavaScript抓取的数据渲染,这次
Puppeteer 插件派上用场,
composerrequirenesk/puphpeteer
npminstall@nesk/puphpeteer --->cnpminstall@nesk/puphpeteer
供参考,按照文档做的时候发现
错误:无法下载 Chromium r672088!设置“PUPPETEER_SKIP_CHROMIUM_DOWNLOAD”环境变量以跳过下载。错误,
解决方案
采集Web 内容是一个很常见的需求,相比传统的静态页面,curl 可以处理。但是如果页面中有动态加载的内容,比如某些页面中通过ajax加载的文章body内容,并且如果某些页面经过一些额外的处理(图片地址替换等...)而你想要采集这些经过处理的内容。那么厉害的curl就无奈了。
做过类似需求的人可能会说,老铁,去PhantomJS吧!
是的,这是一种方式,长期以来,PhantomJS 是少数可以解决这种需求的工具之一。
但是今天我要介绍一个更新的工具-puppeteer,它随着Chrome Headless 技术的兴起而迅速发展。而且非常重要的是,puppeteer 由 Chrome 官方团队开发和维护,可以说是相当可靠!
puppeteer 是一个 js 包,如果你想在 Laravel 中使用它,你必须求助于另一个神器 spatie/browsershot。
安装
安装 spatie/browsershot
Browsershot 是一个 Composer 包,来自大神团队的 Spatie
$ composer require spatie/browsershot
安装 puppeteer
$ npm i puppeteer --save
也可以全局保护puppeteer,但从个人经验来看,建议安装在项目中,因为不同的项目不会同时受到全局安装的puppeteer的影响,在项目中安装是使用phpdeployer升级也很方便(phpdeploy升级不会影响线上项目的运行。要知道升级/安装puppeteer是很费时间的,有时还不能保证一次成功)。
安装 puppeteer 后,将下载 Chromium-Browser。由于我们特殊的国情,很可能无法下载。为此,请施展你的魔法……
使用
以采集今日头条手机版页面文章内容为例。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
$html = Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->bodyHtml();
\Log::info($html);
}
运行后可以在日志中看到如下内容(截图只是其中的一部分)

此外,您可以将页面另存为图片或 PDF 文件。
use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
$newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
Browsershot::url($newsUrl)
->windowSize(480, 800)
->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
->mobile()
->touch()
->setDelay(1000)
->save(public_path('images/toutiao.jpg'));
}

图中方框与系统字体有关。代码中使用了 setDelay() 方法,用于在内容加载后进行截图。它既简单又粗鲁,可能不是最好的解决方案。
可能出现的问题
总结
puppeteer 用于测试、采集 等场景。这是一个非常强大的工具。对于温和的采集 任务,就足够了。比如一些像采集这样的小页面在本文的Laravel(php)中使用,但是如果你需要快速采集很多内容,那就是Python什么的。

php 网页内容抓取(这里收集了3种利用php获得网页源代码抓取网页内容的方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-09-10 20:08
这里汇总了3种利用php获取网页源码抓取网页内容的方法,大家可以根据实际需要选择。 1、使用file_get_contents获取网页的源代码是最常用的方法。它只需要两行代码,非常简单方便。参考代码:
$fh= file_get_contents('https://www.itbiancheng.com/');
echo $fh;
2、使用fopen获取网页源代码。这个方法很多人用,但是代码有点多。参考代码:
$fh = fopen('https://www.itbiancheng.com/', 'r');
if($fh){
while(!feof($fh)) {
echo fgets($fh);
}
}
3、使用 curl 获取网页源代码。使用curl获取网页源代码的做法,往往被要求较高的人采用。 ENCODING 代码的使用,USERAGENT 的使用等等。参考代码一:
$ch = curl_init();// 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "https://www.itbiancheng.com/");// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);// 抓取URL并把它传递给浏览器
echo $data;//输入结果
curl_close($ch);//关闭cURL资源,并且释放系统资源
参考代码二:
$szUrl = "https://www.itbiancheng.com/";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0); //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息
exit();
上例中用到了几个curl_setopt()参数定义,如HEADER、ENCODING、USERAGENT等,更多参数和用法可以参考这里。需要注意的是,在使用curl_init()之前,需要对php.ini进行安全设置,否则函数无法执行 查看全部
php 网页内容抓取(这里收集了3种利用php获得网页源代码抓取网页内容的方法)
这里汇总了3种利用php获取网页源码抓取网页内容的方法,大家可以根据实际需要选择。 1、使用file_get_contents获取网页的源代码是最常用的方法。它只需要两行代码,非常简单方便。参考代码:
$fh= file_get_contents('https://www.itbiancheng.com/');
echo $fh;
2、使用fopen获取网页源代码。这个方法很多人用,但是代码有点多。参考代码:
$fh = fopen('https://www.itbiancheng.com/', 'r');
if($fh){
while(!feof($fh)) {
echo fgets($fh);
}
}
3、使用 curl 获取网页源代码。使用curl获取网页源代码的做法,往往被要求较高的人采用。 ENCODING 代码的使用,USERAGENT 的使用等等。参考代码一:
$ch = curl_init();// 创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "https://www.itbiancheng.com/");// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);// 抓取URL并把它传递给浏览器
echo $data;//输入结果
curl_close($ch);//关闭cURL资源,并且释放系统资源
参考代码二:
$szUrl = "https://www.itbiancheng.com/";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0); //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, '');
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息
exit();
上例中用到了几个curl_setopt()参数定义,如HEADER、ENCODING、USERAGENT等,更多参数和用法可以参考这里。需要注意的是,在使用curl_init()之前,需要对php.ini进行安全设置,否则函数无法执行