
curl 抓取网页
curl 抓取网页()
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-01-18 16:12
我每周都在同一条航线上旅行,只有少数航班中转和航空公司适合。为了获得最优惠的价格,我手动检查价格。
因此,我构建了一个迷你脚本,我可以在其中输入日期并使用“快速”链接打开承运人的多个网页,这样我就不必手动输入航班日期,例如,您可以在其中输入日期并使用“快速”链接可打开承运人的多个网页,因此您不必手动输入航班日期,例如
知道我想知道是否可以使用任何屏幕抓取方法将其自动化一点。完美的最终输出应该是这样的,它为我提供了我需要的概览:
+------------+---------+---------+
| HAJ-PMI | date1 | date2 | ...
+------------+---------+---------+
| Condor | 219,99 | 78,88 | ...
| Air Berlin | 188,99 | 119,99 | ...
+------------+---------+---------+
所以参考上面的示例链接,我如何才能了解价格。我试图使用 file_gets_content 和 cUrl 这样做,但没有得到任何可接受的结果,因为页面似乎没有正确加载。结果。
卷曲:卷曲
<p> 查看全部
curl 抓取网页()
我每周都在同一条航线上旅行,只有少数航班中转和航空公司适合。为了获得最优惠的价格,我手动检查价格。
因此,我构建了一个迷你脚本,我可以在其中输入日期并使用“快速”链接打开承运人的多个网页,这样我就不必手动输入航班日期,例如,您可以在其中输入日期并使用“快速”链接可打开承运人的多个网页,因此您不必手动输入航班日期,例如
知道我想知道是否可以使用任何屏幕抓取方法将其自动化一点。完美的最终输出应该是这样的,它为我提供了我需要的概览:
+------------+---------+---------+
| HAJ-PMI | date1 | date2 | ...
+------------+---------+---------+
| Condor | 219,99 | 78,88 | ...
| Air Berlin | 188,99 | 119,99 | ...
+------------+---------+---------+
所以参考上面的示例链接,我如何才能了解价格。我试图使用 file_gets_content 和 cUrl 这样做,但没有得到任何可接受的结果,因为页面似乎没有正确加载。结果。
卷曲:卷曲
<p>
curl 抓取网页(和wget下载安装1、Ubuntu平台wget命令安装:百度首页为例)
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-01-18 00:20
curl和wget下载安装
1、Ubuntu 平台
wget命令安装:sudo apt-get install wget(普通用户登录,需要输入密码;root账户登录,不需要输入密码)
curl命令安装:sudo apt-get install curl(同wget)
2、Windows 平台
wget下载地址:wget for Windows
curl下载地址:curl下载
wget和curl包下载地址:Windows平台下的wget和curl工具包
在Windows平台下,curl下载解压后直接为curl.exe格式,复制到系统命令目录下的C:\Windows\System32。
Windows平台下,wget下载解压后为wget-1.11.4-1-setup.exe格式,需要安装;安装完成后,在环境变量-系统变量-路径目录下添加其安装
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL 和代理代理。下面是一个爬取“百度”首页的例子。
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。
这时候可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题。
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认8< @0)
注:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k31@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(和wget下载安装1、Ubuntu平台wget命令安装:百度首页为例)
curl和wget下载安装
1、Ubuntu 平台
wget命令安装:sudo apt-get install wget(普通用户登录,需要输入密码;root账户登录,不需要输入密码)
curl命令安装:sudo apt-get install curl(同wget)
2、Windows 平台
wget下载地址:wget for Windows
curl下载地址:curl下载
wget和curl包下载地址:Windows平台下的wget和curl工具包
在Windows平台下,curl下载解压后直接为curl.exe格式,复制到系统命令目录下的C:\Windows\System32。
Windows平台下,wget下载解压后为wget-1.11.4-1-setup.exe格式,需要安装;安装完成后,在环境变量-系统变量-路径目录下添加其安装
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL 和代理代理。下面是一个爬取“百度”首页的例子。
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。
这时候可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题。
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认8< @0)
注:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k31@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(我正在“尝试”抓取页面内具有以下结构的网页)
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-01-14 20:08
我正在“尝试”抓取页面内具有以下结构的网页:
<p class="row">
stuff here
Descriptive Link Text
Link Description Here
</p>
我正在使用 curl 抓取网页:
我做了一些研究,发现我不应该使用 RegEx 来解析从 curl 返回的 HTML,我应该使用 PHP DOM。我就是这样做的:
$newDom = new domDocument;
$newDom->loadHTML($html);
$newDom->preserveWhiteSpace = false;
$sections = $newDom->getElementsByTagName('p');
$nodeNo = $sections->length;
for($i=0; $iitem($i)->nodeValue;
echo $printString . "
";
}
现在我并没有假装我完全理解这一点,但我明白了要点,我确实得到了我想要的部分。唯一的问题是我得到的只是 HTML 页面的文本,就好像我从浏览器窗口复制它一样。我想要的是实际的 HTML,因为我想提取链接并像这样使用它们:
for($i=0; $iitem($i)->nodeValue;
echo "<a href=\"extracted link\">LINK</a> " . $printString . "
";
}
如您所见,我无法获得链接,因为我只获得网页的文本,而不是我想要的来源。我知道“curl_exec”正在提取 HTML,并且由于我已经尝试过,我相信 DOM 会以某种方式剥离我想要的 HTML。 查看全部
curl 抓取网页(我正在“尝试”抓取页面内具有以下结构的网页)
我正在“尝试”抓取页面内具有以下结构的网页:
<p class="row">
stuff here
Descriptive Link Text
Link Description Here
</p>
我正在使用 curl 抓取网页:
我做了一些研究,发现我不应该使用 RegEx 来解析从 curl 返回的 HTML,我应该使用 PHP DOM。我就是这样做的:
$newDom = new domDocument;
$newDom->loadHTML($html);
$newDom->preserveWhiteSpace = false;
$sections = $newDom->getElementsByTagName('p');
$nodeNo = $sections->length;
for($i=0; $iitem($i)->nodeValue;
echo $printString . "
";
}
现在我并没有假装我完全理解这一点,但我明白了要点,我确实得到了我想要的部分。唯一的问题是我得到的只是 HTML 页面的文本,就好像我从浏览器窗口复制它一样。我想要的是实际的 HTML,因为我想提取链接并像这样使用它们:
for($i=0; $iitem($i)->nodeValue;
echo "<a href=\"extracted link\">LINK</a> " . $printString . "
";
}
如您所见,我无法获得链接,因为我只获得网页的文本,而不是我想要的来源。我知道“curl_exec”正在提取 HTML,并且由于我已经尝试过,我相信 DOM 会以某种方式剥离我想要的 HTML。
curl 抓取网页(java插件让火狐去调用slf4j的spark服务接口的应用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-01-13 06:01
curl抓取网页文件内容,可以把html转换成pdf。2.sqlite提取数据。利用sqlite提供的selectcursorwhere条件。3.libreoffice提取文字。如果用access数据库,提取csv的列名也很好用。4.存储为rar/zip压缩包,再用java调用web或rstudio编译。
来,让我来告诉你们其实你们都还可以像那个java一样自己做一个浏览器插件让火狐去调用slf4j。
spark。
1.调用nodejsjs等语言的jsonapi服务接口。看题主描述应该是想无java代码去做。但说实话,用java语言写都有坑,何况java插件,因为它java写的,要实现这个不是简单的了,而且成本远高于自己写2.如果只是想调用电商网站的接口。其实还有一个好用的方法,但是必须服务器部署电商网站,并且还是线下。
这个效率上会有点不划算。因为最大的问题就是,每单都要发送到相应的商家来,这样,商家就要人工判断你的电话号码是否和他的库存相同,同时接收到相应的返回数据再发送给你。这个耗时,想想就让人头疼,更何况还是快递公司的库存相同呢。所以说,这种线下部署,付出的时间精力,和成本,以及人工判断相同库存的麻烦的确相当大,如果要搞的话,而且是无底洞。 查看全部
curl 抓取网页(java插件让火狐去调用slf4j的spark服务接口的应用)
curl抓取网页文件内容,可以把html转换成pdf。2.sqlite提取数据。利用sqlite提供的selectcursorwhere条件。3.libreoffice提取文字。如果用access数据库,提取csv的列名也很好用。4.存储为rar/zip压缩包,再用java调用web或rstudio编译。
来,让我来告诉你们其实你们都还可以像那个java一样自己做一个浏览器插件让火狐去调用slf4j。
spark。
1.调用nodejsjs等语言的jsonapi服务接口。看题主描述应该是想无java代码去做。但说实话,用java语言写都有坑,何况java插件,因为它java写的,要实现这个不是简单的了,而且成本远高于自己写2.如果只是想调用电商网站的接口。其实还有一个好用的方法,但是必须服务器部署电商网站,并且还是线下。
这个效率上会有点不划算。因为最大的问题就是,每单都要发送到相应的商家来,这样,商家就要人工判断你的电话号码是否和他的库存相同,同时接收到相应的返回数据再发送给你。这个耗时,想想就让人头疼,更何况还是快递公司的库存相同呢。所以说,这种线下部署,付出的时间精力,和成本,以及人工判断相同库存的麻烦的确相当大,如果要搞的话,而且是无底洞。
curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-01-12 01:08
* "header_size" // 标题的大小
* "request_size" // 请求的大小
* "filetime" // 文件创建时间
* "ssl_verify_result" //SSL验证结果
* "redirect_count" //重定向技术
* "total_time" //总时间
* "namelookup_time" // DNS 查询时间
* "connect_time" //等待连接时间
* "pretransfer_time"//传输前的准备时间
* "size_upload" //上传数据的大小
* "size_download" // 下载数据的大小
* "speed_download" // 下载速度
* "speed_upload" //上传速度
*"download_content_length"//下载内容的长度
* "upload_content_length"//上传内容的长度
* "starttransfer_time" // 开始传输的时间
*"redirect_time"//重定向耗时
cURL的本质是如何配置参数:
bool curl_setopt(int ch ,string option mixedvalue);
curl_setopt() 函数将为 CURL 会话设置选项。 option参数就是你想要的设置,value就是这个option给出的值。
在国际电联书架上的应用:
下面简单说一下登录的实现。技术难点在于正确配置curl的请求参数。
第一次请求登录页面时,可以获得会话session_id。但必须注意:
curl_setopt($con,CURLOPT_HEADER,1);//非零值为输出头
这个配置可以输出返回的header,从而可以在返回的内容中捕捉到header。
简单解释一下这个session_id
首先要明白,服务器和用户之间的会话是通过一个会话会话来确认请求来自同一个用户,并且这个存储在服务器中,一个存储在用户的浏览器中作为 cookie。
如何获得?
首先,调试的时候,打印整个内容,print_r($content),这样就可以看到整个header了;
其次,你可以使用一个调试软件fiddler,它可以监控浏览器或进程的http请求/响应。它非常强大。我写大书架的时候用过。
,可以清楚的看到服务器返回的header中明确设置了cookie名称为ASP.NET_SessionId。那么我们在提交表单或者请求页面的时候,一定要带上这个cookie,这样服务器才能认为是同一个用户在操作。
具体配置参数如下:
curl_setopt($conn,CURLOPT_COOKIESESSION,true);//启用时curl只会传递一个sessioncookie而忽略其他cookie。默认情况下,curl 会将所有 cookie 返回到服务器。会话 cookie 是指存在用于确定服务器端会话是否有效的那些 cookie。
curl_setopt($conn,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);//传递收录HTTPcookie的标头连接。
这样在再次提交表单或请求页面时会收录id。可以说,只要登录成功,一直拿着这个“钥匙”,就可以爬取这个网站的所有页面的内容。
从图中可以看出,当登录请求发出时,表单内容和session_id结果被POST,服务器返回一个302跳转头。证明登录成功,并且还收录key(在请求这个网站的其他url时使用)。
当然,这个配置只针对某一个网站(不带验证码),对于有验证码的人来说是很麻烦的。
关于cURL多线程爬取,貌似会消耗大量CPU和时间。有时间我会研究这个。
第一次写这么长的博文大约花了一个小时,作为学习笔记来记忆。 查看全部
curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
* "header_size" // 标题的大小
* "request_size" // 请求的大小
* "filetime" // 文件创建时间
* "ssl_verify_result" //SSL验证结果
* "redirect_count" //重定向技术
* "total_time" //总时间
* "namelookup_time" // DNS 查询时间
* "connect_time" //等待连接时间
* "pretransfer_time"//传输前的准备时间
* "size_upload" //上传数据的大小
* "size_download" // 下载数据的大小
* "speed_download" // 下载速度
* "speed_upload" //上传速度
*"download_content_length"//下载内容的长度
* "upload_content_length"//上传内容的长度
* "starttransfer_time" // 开始传输的时间
*"redirect_time"//重定向耗时
cURL的本质是如何配置参数:
bool curl_setopt(int ch ,string option mixedvalue);
curl_setopt() 函数将为 CURL 会话设置选项。 option参数就是你想要的设置,value就是这个option给出的值。
在国际电联书架上的应用:
下面简单说一下登录的实现。技术难点在于正确配置curl的请求参数。
第一次请求登录页面时,可以获得会话session_id。但必须注意:
curl_setopt($con,CURLOPT_HEADER,1);//非零值为输出头
这个配置可以输出返回的header,从而可以在返回的内容中捕捉到header。
简单解释一下这个session_id
首先要明白,服务器和用户之间的会话是通过一个会话会话来确认请求来自同一个用户,并且这个存储在服务器中,一个存储在用户的浏览器中作为 cookie。
如何获得?
首先,调试的时候,打印整个内容,print_r($content),这样就可以看到整个header了;
其次,你可以使用一个调试软件fiddler,它可以监控浏览器或进程的http请求/响应。它非常强大。我写大书架的时候用过。
,可以清楚的看到服务器返回的header中明确设置了cookie名称为ASP.NET_SessionId。那么我们在提交表单或者请求页面的时候,一定要带上这个cookie,这样服务器才能认为是同一个用户在操作。
具体配置参数如下:
curl_setopt($conn,CURLOPT_COOKIESESSION,true);//启用时curl只会传递一个sessioncookie而忽略其他cookie。默认情况下,curl 会将所有 cookie 返回到服务器。会话 cookie 是指存在用于确定服务器端会话是否有效的那些 cookie。
curl_setopt($conn,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);//传递收录HTTPcookie的标头连接。
这样在再次提交表单或请求页面时会收录id。可以说,只要登录成功,一直拿着这个“钥匙”,就可以爬取这个网站的所有页面的内容。
从图中可以看出,当登录请求发出时,表单内容和session_id结果被POST,服务器返回一个302跳转头。证明登录成功,并且还收录key(在请求这个网站的其他url时使用)。
当然,这个配置只针对某一个网站(不带验证码),对于有验证码的人来说是很麻烦的。
关于cURL多线程爬取,貌似会消耗大量CPU和时间。有时间我会研究这个。
第一次写这么长的博文大约花了一个小时,作为学习笔记来记忆。
curl 抓取网页(Iamdevelopingprojectaproject,forthecontentsinthebackground)
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-01-08 21:15
我正在开发一个项目,我想在后台抓取网站的内容并从该抓取的网站中获取一些有限的内容。 ,并从已抓取的 网站 中获取一些有限的内容。例如,在我的页面中,我有“userid”和“password”字段,通过使用这些字段,我将访问我的邮件并抓取我的收件箱内容并将其显示在我的页面中。和“密码”字段,通过使用这些字段,我将访问我的邮件并获取我的收件箱内容并将其显示在我的页面中。
我单独使用 javascript 完成了上述操作。但是当我单击登录按钮时,我的页面 () 的 URL 更改为我被抓取的 URL (.)。 . .) 我被抓伤了。但是我在不更改网址的情况下取消了详细信息。 查看全部
curl 抓取网页(Iamdevelopingprojectaproject,forthecontentsinthebackground)
我正在开发一个项目,我想在后台抓取网站的内容并从该抓取的网站中获取一些有限的内容。 ,并从已抓取的 网站 中获取一些有限的内容。例如,在我的页面中,我有“userid”和“password”字段,通过使用这些字段,我将访问我的邮件并抓取我的收件箱内容并将其显示在我的页面中。和“密码”字段,通过使用这些字段,我将访问我的邮件并获取我的收件箱内容并将其显示在我的页面中。
我单独使用 javascript 完成了上述操作。但是当我单击登录按钮时,我的页面 () 的 URL 更改为我被抓取的 URL (.)。 . .) 我被抓伤了。但是我在不更改网址的情况下取消了详细信息。
curl 抓取网页(PHP获取远程网页内容的代码(fopen,)的相关知识和一些Code实例)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-01-08 21:13
你想知道PHP获取远程网页内容的代码相关内容吗(fopen、curl已经测试过了)?在本文中,我将为您讲解远程网页的相关知识和一些代码示例。欢迎阅读和指正。我们先来关注一下:fopen、curl,一起来学习吧。
1、fopen 的使用
复制代码代码如下:
复制代码代码如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但他们中的一些人仍然有这个警告信息。距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php的默认user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
复制代码代码如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。 查看全部
curl 抓取网页(PHP获取远程网页内容的代码(fopen,)的相关知识和一些Code实例)
你想知道PHP获取远程网页内容的代码相关内容吗(fopen、curl已经测试过了)?在本文中,我将为您讲解远程网页的相关知识和一些代码示例。欢迎阅读和指正。我们先来关注一下:fopen、curl,一起来学习吧。
1、fopen 的使用
复制代码代码如下:
复制代码代码如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但他们中的一些人仍然有这个警告信息。距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php的默认user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
复制代码代码如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
curl 抓取网页(curl模拟登陆过程中get到的技能以及了解到知识 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 271 次浏览 • 2022-01-08 10:19
)
我今天使用 curl 进行了模拟登录。我以前从未接触过curl,我也不知道。简单说一下我在模拟登录过程中获得的技能和知识:
1、CURL:curl是一个使用URL语法开发的开源传输工具,相当于一个模拟浏览器。可以通过post/get、上传下载文件、操作cookies、传递代理等方式获取想要的页面信息。服务器(代理服务器是浏览器和Web服务器之间的中转站,相当于一个缓冲池)向服务器发送请求等,支持FTP、FTPS、TELNET等各种文件传输协议。起初只能在命令行中使用,现在也支持 PHP,并且拥有强大的函数库,函数库很多,可以支持不同的功能。在采集页面信息之前,我使用了file_get_contents,采集整个页面,然后使用正则匹配得到想要的内容。一些只有登录或验证才能获取的信息,是无法获取的。到达的。
curl发送url请求的步骤为:curl初始化--->设置具体参数信息--->执行curl并获取返回结果--->关闭curl session
下面是使用curl模拟登录获取用户信息的过程:
function login_post($url, $cookie, $post){
$curl = curl_init($url);//初始化
curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);//要提交的信息
//var_dump(http_build_query($post));exit;//打印要post的信息
$data = curl_exec($curl);//执行命令
curl_close($curl);//关闭URL请求
}
function get_content($url, $cookie) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);//需要获取信息的页面
//curl_setopt($ch, CURLOPT_HEADER, 1);//不输出头部
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//设置将获取到的信息输出在浏览器上
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
//设置post数据
$post = array(
"uname" => "xxxxxxxx",
"passwd" => "xxxxxx",
……
);//这里要传输的数据很重要,决定了能否成功登陆页面,生成cookie文件
//其实只要post的数据正确,一般都能生成cookie文件,之后就很简单了。
//登录地址
$url = "URL";
$cookie = dirname(__FILE__) . '/cookie.txt'; // 设置cookie保存路径
$url2 = "URL"; //登录后要获取信息的页面
login_post($url, $cookie, $post);// 模拟登录
$content = get_content($url2, $cookie);//获取登录页的信息
echo $content.'';//匹配页面信息
$preg = '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i';
$bool = preg_match($preg,$content,$time);
echo '注册时间:'.$time[0];
2、php抓取页面信息有以下几种方式
(1)file_get_contents($url) 会抓取整个页面,打印返回的结果就是整个页面
(2)file($url)会抓取整个页面,打印返回的结果是一个数组(分页的结果),然后implode之后打印就是整个页面
(3)fopen() 应该和fread() 和fclose() 一起使用来抓取整个页面并在处理后打印整个页面
3、cookies的原理
cookie 是浏览器自动生成的一个小文件,用于在服务器响应客户端请求时,通过在 HTTP 响应头中添加特殊指令(创建 cookie 对象)来保存用户信息和状态。只有当客户端发送请求或浏览器本身具有创建 cookie 的能力时才会创建 cookie。Cookies包括会话cookies(存储在内存中,一旦关闭浏览器就自动销毁,不能被多个窗口共享)和持久cookies(存储在硬盘中,直到过期时间才销毁,可以被多个窗口共享)同一浏览器的窗口)。浏览器发送请求时,会在客户端寻找对应范围的cookie文件。如果有,它将cookie放入http请求头中并发送给服务器,服务器将响应相应的内容。cookie的内容主要包括:名称、值、过期时间、路径和域(这两个构成cookie的作用域)
4、session的原理
Session是存储在服务器端的信息,哈希表的结构。当浏览器向服务器发送请求时,如果请求头中有一个sessionid(一般在一个cookie中,并通过请求头与cookie一起发送),那么服务器会在请求头上找到这个id对应的内容服务器根据 sessionid。请求信息决定是否向客户端返回相关信息。如果没有,则会为用户创建一个会话(只有在服务器端调用HttpServletRequest.getSession(true)语句时才会创建,用户可以决定是否创建文件或数据表等。 ),并将 sessionid 返回给浏览器并保存。在浏览器端传递 sessionid 的方法有很多:
(1)将sessionid保存在cookie中,发送请求时直接附加到请求头中
(2) 通过url重写发送sessionid,即在url后面加上sessionid
步:
1) 在服务器端 php.ini 配置文件中设置: session.use_cookies=0 && session.use_only_cookie=0 session.use_trans_sid=1
2)如果你使用的是nginx,在nginx的根目录下创建一个index.php,内容如下:
然后
一、使用php命令直接解析dos下的php文件(如:php index.php),此时会出现问题:
如果你的lnmp服务器的php版本为5.7或更高,执行上面的php index.php会报错,这里我报告core dumped;
二、浏览器通过ip访问这个文件也会报错
如果你在浏览器设置中禁用了cookies,那么每次刷新页面时,浏览器都会向服务器发送一个请求,但是由于我们在php.ini中设置了sessionid不传递cookies,那么在这个请求的header中有没有 sessionid 信息传输到服务器。服务端收到请求,没有找到sessionid后,会自动生成一个session文件,然后用sessionid响应客户端。这时候客户端禁用cookies后就无法使用了。cookie是用来保存这个sessionid的,所以当你再次刷新页面时,sessionid不能传给服务器进行比对,服务器会生成一个新的session文件,每次刷新一个。
所以客户端不能设置禁用cookies,只需要设置php.ini,且php版本最好5.6及以下,即可成功看到url中的sessionid
那么这一步完成后,如果继续深入调查,就会发现问题,比如:
session_url.php:
一个:PHP:
上述结果的差异可能与nginx的行为有关,没有进一步探索,但是在没有添加ip地址的情况下,如果是同域的文件,一般可以自动显示在url上. 添加会话ID
(3)以隐藏表单的形式传递sessionid,服务器会自动修改表单
可以在表单中设置一个隐藏输入将session_id()传给后端,也可以在后端直接获取session_id(),可以直接使用也可以保存到文件中,这样在访问同一个服务器时,不同的可以在域中使用相同的sessionid;将会话信息保存到数据库中,然后另一台服务器也可以使用文件中的sessionid来访问本服务器中的会话信息,实现会话共享
5、session和cookie的区别
session是保存在服务器端的,sessionid默认是通过cookie保存的,所以如果客户端禁用cookie并且服务器端没有设置trans-sid选项,那么sessionid就没有地方保存了,那么会话将不会被使用;sessionid 一般保存在session cookie中,所以关闭浏览器时找不到sessionid;安全性高,可存储用户名、密码等重要信息。
cookie存储在浏览器端,安全性不如session,可以存储一些不太重要的信息。
6、服务器比对验证码的机制
服务器端请求客户端时,首先随机生成一串字符串并保存在会话中,然后将字符串写入图片发送给浏览器显示。比较存储在 .
7、hosts文件和dns域名解析系统
hosts文件中保存了ip和域名的对应关系。用户访问域名时,需要找到该域名对应的IP。首先,客户端会向本地域名服务器发送请求,本地域名服务器会在自己的映射表中查找该域名对应的IP。如果是,则将ip返回给客户端,如果不是,则继续向根域名服务器发送请求,根域名服务器会在自己中查找所请求域的主域名服务器的ip映射表,然后返回给本地dns,本地dns向主域名服务器发送请求。如果主域名服务器没有找到映射关系,则返回下一级域名服务器ip,直到找到正确的ip,
查看全部
curl 抓取网页(curl模拟登陆过程中get到的技能以及了解到知识
)
我今天使用 curl 进行了模拟登录。我以前从未接触过curl,我也不知道。简单说一下我在模拟登录过程中获得的技能和知识:
1、CURL:curl是一个使用URL语法开发的开源传输工具,相当于一个模拟浏览器。可以通过post/get、上传下载文件、操作cookies、传递代理等方式获取想要的页面信息。服务器(代理服务器是浏览器和Web服务器之间的中转站,相当于一个缓冲池)向服务器发送请求等,支持FTP、FTPS、TELNET等各种文件传输协议。起初只能在命令行中使用,现在也支持 PHP,并且拥有强大的函数库,函数库很多,可以支持不同的功能。在采集页面信息之前,我使用了file_get_contents,采集整个页面,然后使用正则匹配得到想要的内容。一些只有登录或验证才能获取的信息,是无法获取的。到达的。
curl发送url请求的步骤为:curl初始化--->设置具体参数信息--->执行curl并获取返回结果--->关闭curl session
下面是使用curl模拟登录获取用户信息的过程:
function login_post($url, $cookie, $post){
$curl = curl_init($url);//初始化
curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);//要提交的信息
//var_dump(http_build_query($post));exit;//打印要post的信息
$data = curl_exec($curl);//执行命令
curl_close($curl);//关闭URL请求
}
function get_content($url, $cookie) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);//需要获取信息的页面
//curl_setopt($ch, CURLOPT_HEADER, 1);//不输出头部
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//设置将获取到的信息输出在浏览器上
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
//设置post数据
$post = array(
"uname" => "xxxxxxxx",
"passwd" => "xxxxxx",
……
);//这里要传输的数据很重要,决定了能否成功登陆页面,生成cookie文件
//其实只要post的数据正确,一般都能生成cookie文件,之后就很简单了。
//登录地址
$url = "URL";
$cookie = dirname(__FILE__) . '/cookie.txt'; // 设置cookie保存路径
$url2 = "URL"; //登录后要获取信息的页面
login_post($url, $cookie, $post);// 模拟登录
$content = get_content($url2, $cookie);//获取登录页的信息
echo $content.'';//匹配页面信息
$preg = '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i';
$bool = preg_match($preg,$content,$time);
echo '注册时间:'.$time[0];
2、php抓取页面信息有以下几种方式
(1)file_get_contents($url) 会抓取整个页面,打印返回的结果就是整个页面
(2)file($url)会抓取整个页面,打印返回的结果是一个数组(分页的结果),然后implode之后打印就是整个页面
(3)fopen() 应该和fread() 和fclose() 一起使用来抓取整个页面并在处理后打印整个页面
3、cookies的原理
cookie 是浏览器自动生成的一个小文件,用于在服务器响应客户端请求时,通过在 HTTP 响应头中添加特殊指令(创建 cookie 对象)来保存用户信息和状态。只有当客户端发送请求或浏览器本身具有创建 cookie 的能力时才会创建 cookie。Cookies包括会话cookies(存储在内存中,一旦关闭浏览器就自动销毁,不能被多个窗口共享)和持久cookies(存储在硬盘中,直到过期时间才销毁,可以被多个窗口共享)同一浏览器的窗口)。浏览器发送请求时,会在客户端寻找对应范围的cookie文件。如果有,它将cookie放入http请求头中并发送给服务器,服务器将响应相应的内容。cookie的内容主要包括:名称、值、过期时间、路径和域(这两个构成cookie的作用域)
4、session的原理
Session是存储在服务器端的信息,哈希表的结构。当浏览器向服务器发送请求时,如果请求头中有一个sessionid(一般在一个cookie中,并通过请求头与cookie一起发送),那么服务器会在请求头上找到这个id对应的内容服务器根据 sessionid。请求信息决定是否向客户端返回相关信息。如果没有,则会为用户创建一个会话(只有在服务器端调用HttpServletRequest.getSession(true)语句时才会创建,用户可以决定是否创建文件或数据表等。 ),并将 sessionid 返回给浏览器并保存。在浏览器端传递 sessionid 的方法有很多:
(1)将sessionid保存在cookie中,发送请求时直接附加到请求头中
(2) 通过url重写发送sessionid,即在url后面加上sessionid
步:
1) 在服务器端 php.ini 配置文件中设置: session.use_cookies=0 && session.use_only_cookie=0 session.use_trans_sid=1
2)如果你使用的是nginx,在nginx的根目录下创建一个index.php,内容如下:
然后
一、使用php命令直接解析dos下的php文件(如:php index.php),此时会出现问题:
如果你的lnmp服务器的php版本为5.7或更高,执行上面的php index.php会报错,这里我报告core dumped;
二、浏览器通过ip访问这个文件也会报错
如果你在浏览器设置中禁用了cookies,那么每次刷新页面时,浏览器都会向服务器发送一个请求,但是由于我们在php.ini中设置了sessionid不传递cookies,那么在这个请求的header中有没有 sessionid 信息传输到服务器。服务端收到请求,没有找到sessionid后,会自动生成一个session文件,然后用sessionid响应客户端。这时候客户端禁用cookies后就无法使用了。cookie是用来保存这个sessionid的,所以当你再次刷新页面时,sessionid不能传给服务器进行比对,服务器会生成一个新的session文件,每次刷新一个。
所以客户端不能设置禁用cookies,只需要设置php.ini,且php版本最好5.6及以下,即可成功看到url中的sessionid
那么这一步完成后,如果继续深入调查,就会发现问题,比如:
session_url.php:
一个:PHP:
上述结果的差异可能与nginx的行为有关,没有进一步探索,但是在没有添加ip地址的情况下,如果是同域的文件,一般可以自动显示在url上. 添加会话ID
(3)以隐藏表单的形式传递sessionid,服务器会自动修改表单
可以在表单中设置一个隐藏输入将session_id()传给后端,也可以在后端直接获取session_id(),可以直接使用也可以保存到文件中,这样在访问同一个服务器时,不同的可以在域中使用相同的sessionid;将会话信息保存到数据库中,然后另一台服务器也可以使用文件中的sessionid来访问本服务器中的会话信息,实现会话共享
5、session和cookie的区别
session是保存在服务器端的,sessionid默认是通过cookie保存的,所以如果客户端禁用cookie并且服务器端没有设置trans-sid选项,那么sessionid就没有地方保存了,那么会话将不会被使用;sessionid 一般保存在session cookie中,所以关闭浏览器时找不到sessionid;安全性高,可存储用户名、密码等重要信息。
cookie存储在浏览器端,安全性不如session,可以存储一些不太重要的信息。
6、服务器比对验证码的机制
服务器端请求客户端时,首先随机生成一串字符串并保存在会话中,然后将字符串写入图片发送给浏览器显示。比较存储在 .
7、hosts文件和dns域名解析系统
hosts文件中保存了ip和域名的对应关系。用户访问域名时,需要找到该域名对应的IP。首先,客户端会向本地域名服务器发送请求,本地域名服务器会在自己的映射表中查找该域名对应的IP。如果是,则将ip返回给客户端,如果不是,则继续向根域名服务器发送请求,根域名服务器会在自己中查找所请求域的主域名服务器的ip映射表,然后返回给本地dns,本地dns向主域名服务器发送请求。如果主域名服务器没有找到映射关系,则返回下一级域名服务器ip,直到找到正确的ip,
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-01-08 10:19
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL和proxy代理
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。这时候,你可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k27@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载的百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL和proxy代理
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。这时候,你可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k27@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载的百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(perl爬虫怎么定制池?抓取网页数据的好处?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 50 次浏览 • 2022-01-01 02:08
curl抓取网页数据本身是不限制带宽的,不过你需要有相应的网络才行。比如你需要在多个网站(站点)上抓取网页数据,要进行分段分别抓取,使用不同网络线路。所以你还是需要做一个这样的爬虫,抓取一个网页,统计各个网站的抓取流量的分布。没有必要买curl。当然了,我相信你应该是需要抓取小说这样的网站,你需要做的是先获取他们的页码,然后使用这个页码构建数据库,然后存储到本地的数据库或者别的地方。
看你的抓取量,以及是否需要抓取的网站是否支持分段封ip这种方式。
你需要的可能是一个请求均衡器(通常一个ip下只能够抓取同一个站点的30页),从而实现采集多个网站的数据,这样有个好处就是服务器只需要存储一份就可以实现多种网站的抓取,采用分段抓取的方式是没有必要的,可以直接用其他的免费的分段抓取软件。另外,如果是站点比较多(几百个)就要定制ip池,而如果抓取站点比较少的话可以不需要定制ip池。具体定制ip池可以到别的回答看看有没有相关的回答。你可以参考:perl爬虫怎么定制ip池?。
当你站点比较多,很难封ip的时候,就可以将数据采集点扩大一下,把采集点设定在别的网站再分别抓取。例如同一时间你只在原来站点抓取一个网站,后续会抓取其他几个站点的数据,这时如果要在原来的网站抓取第二个站点,你不需要从别的网站抓取对应的抓取点。可以先从别的网站采集抓取点,再分别抓取新网站的抓取点。 查看全部
curl 抓取网页(perl爬虫怎么定制池?抓取网页数据的好处?)
curl抓取网页数据本身是不限制带宽的,不过你需要有相应的网络才行。比如你需要在多个网站(站点)上抓取网页数据,要进行分段分别抓取,使用不同网络线路。所以你还是需要做一个这样的爬虫,抓取一个网页,统计各个网站的抓取流量的分布。没有必要买curl。当然了,我相信你应该是需要抓取小说这样的网站,你需要做的是先获取他们的页码,然后使用这个页码构建数据库,然后存储到本地的数据库或者别的地方。
看你的抓取量,以及是否需要抓取的网站是否支持分段封ip这种方式。
你需要的可能是一个请求均衡器(通常一个ip下只能够抓取同一个站点的30页),从而实现采集多个网站的数据,这样有个好处就是服务器只需要存储一份就可以实现多种网站的抓取,采用分段抓取的方式是没有必要的,可以直接用其他的免费的分段抓取软件。另外,如果是站点比较多(几百个)就要定制ip池,而如果抓取站点比较少的话可以不需要定制ip池。具体定制ip池可以到别的回答看看有没有相关的回答。你可以参考:perl爬虫怎么定制ip池?。
当你站点比较多,很难封ip的时候,就可以将数据采集点扩大一下,把采集点设定在别的网站再分别抓取。例如同一时间你只在原来站点抓取一个网站,后续会抓取其他几个站点的数据,这时如果要在原来的网站抓取第二个站点,你不需要从别的网站抓取对应的抓取点。可以先从别的网站采集抓取点,再分别抓取新网站的抓取点。
curl 抓取网页(几种最常见的快速让百度收录的办法是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 33 次浏览 • 2021-12-24 23:10
有时候你会发现在做seo优化的时候,会出现网址没有被百度收录的情况。在这种情况下,我们应该怎么做?是被动等待自然收录,还是主动出击?接下来,我将介绍一些最常见的快速获取百度收录的方法。
百度收录提交
输入你要收录的网址,点击提交按钮:这个收录只是请求百度记录一条记录。虽然记录了,但是需要取,收录的网站很多,需要一定的时间,一般15天以内收录是正常的周期(如果你想快速接收收录或秒接收,请使用以下收录方法),如果15天内没有收录,说明你的网站有问题搜索引擎不喜欢的。例如:域名已被百度处罚或加入黑名单;或域下网站的内容属于非法;或域名网站过度优化等问题;
百度自动推送方法
复制网站html代码之间的代码,通常在html代码之上。
百度主动推送(实时)
首先打开百度站长工具:选择主动推送(实时)选项卡,点击“修改访问密钥”更新您的密钥ID。
此功能适合懂开发的人使用。具体步骤可以理解:先注册一个百度站长账号,然后添加网站,选择主动推送的域名,更新key ID,然后根据生成的界面和适合你的推送方式自己的网站,百度站长一共提供了四种推送案例,分别是:curl push、post push、php push、ruby push,最常用的就是“post push”,不明白的你不需要使用这种方法,使用自动推送方法即可;
云优化软件提交
属于数据包反馈请求的一种方式。打开云优化软件-SEO工具-新展速递收录。这个方法是收录最快的方法之一,主要是通过向百度请求数据包,让第一个抢到收录网站;
自助外链记录
直观的理解是在各大公共媒体留下网站的URL文本链,这样百度收录更新这些公共媒体网站时,会通过URL匹配来识别,如果有没有收录 @收录,更新后的网站会列在百度收录库中,方便百度及时发现和抓取操作;操作方法如下:
打开SEO外链自发布地址:输入您要收录或更新的网址,点击“开始自动添加外链”按钮。
优质外链指导
前往知名公众媒体,留下你的网站url超链接;由于知名论坛、博客、空间等经常被百度抓取,当抓取对方时发现新链接,百度会先更新链接。例如:站长站、A5、搜外等更新频率较高的公众媒体;
优质朋友链指导
好友链是衡量网站质量的一个因素。例如: 马云说:云优化是我的投资,所以很多人会认为云优化是马云投资的。如果云优化说:马云投资我们,估计大部分人都不信。如果马云说自己投资了云优,而云优也发布了马云投资的公告,这已经成为事实。所以,优质的友情链首先是双向的,是提升口碑的关键。因为优质的朋友链更有利于搜索引擎抓取和评分;很多站长主要是因为缺乏优质的朋友链,这是无法实现即时采集的根本原因。
饼干记录
Cookie 由服务器生成并发送到 User-Agent(通常是浏览器)。浏览器将Cookie的key/value保存在某个目录下的文本文件中,经常可以记录用户登录、访问记录等,我们可以模拟修改Cookie,让百度更好的抓取URL记录。
如果网站优化到位,网站外的优质外链和好友链接是排名外观和排名提升的基础,也是最重要的。由于搜索引擎中的URL是海量数据,我想在最短的时间内选择准确的结果。一件很困难的事情,那么搜索引擎必须依靠URL评级+索引来解决搜索效率和准确结果;所谓索引就是百度有很多排名更新服务器,排名是每周更新后建立的一个索引,所以:搜索引擎检索到的结果实际上是预先索引的排名结果。
我是乐健 欢迎大家关注乐见网,分享创业知识,只讲大家可以上手的创业赚钱方法,分享最接地气的SEO赚钱实用干货。专注自媒体创业、营销、变现等干货分享。关注我,了解更多。 查看全部
curl 抓取网页(几种最常见的快速让百度收录的办法是什么?)
有时候你会发现在做seo优化的时候,会出现网址没有被百度收录的情况。在这种情况下,我们应该怎么做?是被动等待自然收录,还是主动出击?接下来,我将介绍一些最常见的快速获取百度收录的方法。
百度收录提交
输入你要收录的网址,点击提交按钮:这个收录只是请求百度记录一条记录。虽然记录了,但是需要取,收录的网站很多,需要一定的时间,一般15天以内收录是正常的周期(如果你想快速接收收录或秒接收,请使用以下收录方法),如果15天内没有收录,说明你的网站有问题搜索引擎不喜欢的。例如:域名已被百度处罚或加入黑名单;或域下网站的内容属于非法;或域名网站过度优化等问题;
百度自动推送方法
复制网站html代码之间的代码,通常在html代码之上。
百度主动推送(实时)
首先打开百度站长工具:选择主动推送(实时)选项卡,点击“修改访问密钥”更新您的密钥ID。
此功能适合懂开发的人使用。具体步骤可以理解:先注册一个百度站长账号,然后添加网站,选择主动推送的域名,更新key ID,然后根据生成的界面和适合你的推送方式自己的网站,百度站长一共提供了四种推送案例,分别是:curl push、post push、php push、ruby push,最常用的就是“post push”,不明白的你不需要使用这种方法,使用自动推送方法即可;
云优化软件提交
属于数据包反馈请求的一种方式。打开云优化软件-SEO工具-新展速递收录。这个方法是收录最快的方法之一,主要是通过向百度请求数据包,让第一个抢到收录网站;
自助外链记录
直观的理解是在各大公共媒体留下网站的URL文本链,这样百度收录更新这些公共媒体网站时,会通过URL匹配来识别,如果有没有收录 @收录,更新后的网站会列在百度收录库中,方便百度及时发现和抓取操作;操作方法如下:
打开SEO外链自发布地址:输入您要收录或更新的网址,点击“开始自动添加外链”按钮。
优质外链指导
前往知名公众媒体,留下你的网站url超链接;由于知名论坛、博客、空间等经常被百度抓取,当抓取对方时发现新链接,百度会先更新链接。例如:站长站、A5、搜外等更新频率较高的公众媒体;
优质朋友链指导
好友链是衡量网站质量的一个因素。例如: 马云说:云优化是我的投资,所以很多人会认为云优化是马云投资的。如果云优化说:马云投资我们,估计大部分人都不信。如果马云说自己投资了云优,而云优也发布了马云投资的公告,这已经成为事实。所以,优质的友情链首先是双向的,是提升口碑的关键。因为优质的朋友链更有利于搜索引擎抓取和评分;很多站长主要是因为缺乏优质的朋友链,这是无法实现即时采集的根本原因。
饼干记录
Cookie 由服务器生成并发送到 User-Agent(通常是浏览器)。浏览器将Cookie的key/value保存在某个目录下的文本文件中,经常可以记录用户登录、访问记录等,我们可以模拟修改Cookie,让百度更好的抓取URL记录。
如果网站优化到位,网站外的优质外链和好友链接是排名外观和排名提升的基础,也是最重要的。由于搜索引擎中的URL是海量数据,我想在最短的时间内选择准确的结果。一件很困难的事情,那么搜索引擎必须依靠URL评级+索引来解决搜索效率和准确结果;所谓索引就是百度有很多排名更新服务器,排名是每周更新后建立的一个索引,所以:搜索引擎检索到的结果实际上是预先索引的排名结果。
我是乐健 欢迎大家关注乐见网,分享创业知识,只讲大家可以上手的创业赚钱方法,分享最接地气的SEO赚钱实用干货。专注自媒体创业、营销、变现等干货分享。关注我,了解更多。
curl 抓取网页(图画大师们是怎么画的?(一张图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-12-20 21:01
curl抓取网页抓取本地文件把返回的ajax页面代码渲染到页面上展示jsp页面
这些都是可以的,我们公司用的是采用了servlet的web应用。它只是相当于java的webform。它有很多不同的方法接口,像java的类,你说你要做个面包车,那么首先我得画个封面。封面怎么画呢?你得参考下作者那么多图画大师们是怎么画的?当然作者把它封装了起来,你只需要继承它,然后你可以使用它写出非常酷炫的程序。主要是说,得做专业技术人员,这些东西都是表象,要通过实践最后找到你想要的东西。
应该是ajax的结果如果是有ajax的话那么jsp
网页和ajax的对应关系,
ajax有相应的实现,结果就是一张图。
目前写html的方法有以下:1,ajax的数据保存在服务器上保存,你通过jsp调用的ajax获取数据(jsp是orm框架)2,jsp将数据显示在页面上,
你的要求的情况是有一些问题,我想你不用担心服务器的问题。在这两种方法都适用的情况下。肯定是选择ajax。接下来我分两种情况去说明。当服务器访问完网页之后进行调用ajax,然后返回json数据,这样的话是可以显示的;当服务器向服务器发送你的ajax请求的时候,服务器返回的json数据返回给服务器,然后服务器解析出来,再去发送给你。
但这样就会有几个问题,第一,你首先网页是直接显示在服务器上的,这就涉及到ajax的时效性问题。如果后端的ajax跟数据库的ajax有关联,服务器返回json数据的时候,数据库上就会有记录,后端调用的时候就可能发生冲突。第二,如果你的ajax有相应的注册和认证机制。相当于你要告诉服务器你是看哪个页面,服务器如果没有注册或者没有认证,那么服务器返回给你的数据可能就会有冲突。
当然还有很多问题。综上所述,我个人觉得这样的方法也不是非常好,就是非常麻烦。说明:上面说的ajax方法是假设你已经处理好相应的请求以及数据库操作。如果是非要浏览器端进行发送ajax请求的话,那么http请求报文将会涉及到如下几个字段:请求方法(get/post),地址,参数,时间戳,带时间戳的那个表示请求响应的重试次数,带时间戳的那个表示响应重试的时间,域名。 查看全部
curl 抓取网页(图画大师们是怎么画的?(一张图))
curl抓取网页抓取本地文件把返回的ajax页面代码渲染到页面上展示jsp页面
这些都是可以的,我们公司用的是采用了servlet的web应用。它只是相当于java的webform。它有很多不同的方法接口,像java的类,你说你要做个面包车,那么首先我得画个封面。封面怎么画呢?你得参考下作者那么多图画大师们是怎么画的?当然作者把它封装了起来,你只需要继承它,然后你可以使用它写出非常酷炫的程序。主要是说,得做专业技术人员,这些东西都是表象,要通过实践最后找到你想要的东西。
应该是ajax的结果如果是有ajax的话那么jsp
网页和ajax的对应关系,
ajax有相应的实现,结果就是一张图。
目前写html的方法有以下:1,ajax的数据保存在服务器上保存,你通过jsp调用的ajax获取数据(jsp是orm框架)2,jsp将数据显示在页面上,
你的要求的情况是有一些问题,我想你不用担心服务器的问题。在这两种方法都适用的情况下。肯定是选择ajax。接下来我分两种情况去说明。当服务器访问完网页之后进行调用ajax,然后返回json数据,这样的话是可以显示的;当服务器向服务器发送你的ajax请求的时候,服务器返回的json数据返回给服务器,然后服务器解析出来,再去发送给你。
但这样就会有几个问题,第一,你首先网页是直接显示在服务器上的,这就涉及到ajax的时效性问题。如果后端的ajax跟数据库的ajax有关联,服务器返回json数据的时候,数据库上就会有记录,后端调用的时候就可能发生冲突。第二,如果你的ajax有相应的注册和认证机制。相当于你要告诉服务器你是看哪个页面,服务器如果没有注册或者没有认证,那么服务器返回给你的数据可能就会有冲突。
当然还有很多问题。综上所述,我个人觉得这样的方法也不是非常好,就是非常麻烦。说明:上面说的ajax方法是假设你已经处理好相应的请求以及数据库操作。如果是非要浏览器端进行发送ajax请求的话,那么http请求报文将会涉及到如下几个字段:请求方法(get/post),地址,参数,时间戳,带时间戳的那个表示请求响应的重试次数,带时间戳的那个表示响应重试的时间,域名。
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
网站优化 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2021-12-18 13:11
curl 和 wget 抓取示例
爬取网页,主要有两种方式:url和proxy
1、 url 网址抓取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页的内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网速/数据丢失/服务器停机等原因,网页暂时无法成功下载。这时候可能需要多次尝试发送连接,请求服务器的响应;如果多次都没有反应,则可以确认服务器有问题
(1)curl 多次尝试连接
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在最长时间内只允许重试一次(一般与--retry-delay相同)
(2)wget 多次尝试连接
wget -t 10 -w 60 -T 30 -O baidu_html2
注:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间。如果超过超时,则连接不成功,下次继续尝试连接
附:curl判断服务器是否有响应,也可以通过一段时间内下载的字节数间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注意:-y代表测试网速的时间;-Y 表示 -y 期间下载的字节数(以字节为单位);-m 表示允许请求连接的最长时间,超过则自动断开连接并中止连接
2、 代理爬取
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两个著名的自由球员网站:
(全球数十个国家的自由代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间用冒号“:”隔开,形成一个socket)
(1)curl 通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(端口通常为80、8080、8086、8888、3128等,默认为80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过218.107.21.252:8080 下载百度主页,最后218.107.21.252:8080 发送下载的百度homepage to curl 到本地(curl不是直接连接百度服务器下载首页,而是通过中介代理)
(2)wget 通过代理获取百度主页
wget通过代理下载,和curl不一样。需要先设置代理服务器的http_proxy=ip:port
以ubuntu为例,在当前用户目录(cd~)下创建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
curl 和 wget 抓取示例
爬取网页,主要有两种方式:url和proxy
1、 url 网址抓取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页的内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网速/数据丢失/服务器停机等原因,网页暂时无法成功下载。这时候可能需要多次尝试发送连接,请求服务器的响应;如果多次都没有反应,则可以确认服务器有问题
(1)curl 多次尝试连接
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在最长时间内只允许重试一次(一般与--retry-delay相同)
(2)wget 多次尝试连接
wget -t 10 -w 60 -T 30 -O baidu_html2
注:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间。如果超过超时,则连接不成功,下次继续尝试连接
附:curl判断服务器是否有响应,也可以通过一段时间内下载的字节数间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注意:-y代表测试网速的时间;-Y 表示 -y 期间下载的字节数(以字节为单位);-m 表示允许请求连接的最长时间,超过则自动断开连接并中止连接
2、 代理爬取
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两个著名的自由球员网站:
(全球数十个国家的自由代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间用冒号“:”隔开,形成一个socket)
(1)curl 通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(端口通常为80、8080、8086、8888、3128等,默认为80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过218.107.21.252:8080 下载百度主页,最后218.107.21.252:8080 发送下载的百度homepage to curl 到本地(curl不是直接连接百度服务器下载首页,而是通过中介代理)
(2)wget 通过代理获取百度主页
wget通过代理下载,和curl不一样。需要先设置代理服务器的http_proxy=ip:port
以ubuntu为例,在当前用户目录(cd~)下创建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(方法二楼上的发的方法方法四中绕过服务器验证)
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-14 13:04
curl抓取网页信息中的ip地址和密码等信息,加密算法为rsa,算法公开,是一种基于密码学的散列算法,该算法不泄露给任何第三方可加密数据,同时破解难度低,在网络上可以被安全的上传和下载网页。想提供ip地址和密码的源代码给我,谢谢。
方法二
楼上的发的方法方法四中的方法都是一种绕过服务器验证的方法,也就是让上传被人破解。楼上的方法实际用起来都很简单,如果不会编程。
直接给远程服务器提供一个手机号,远程服务器将这个手机号地址告诉你。
这个有人破解了,编程完全无压力,挺牛的。onlyattentionfromthefollowingiphoneapplicationthatonceasecretkeyauthenticatesyourapplicationtoapple’shttpswebapplication,servestheprotectionofapple’sinternetaccesstohttpsinallwebapplicationsparts。
fromfollowingarticle:segmentfault。me-applebloghttpsallowsyoutoremoteaccess,andnottofollowtherequestavailablehere。webkitappsarerespectedbyalistingofcapabilitiesincludingsslversionsandtlsintotheweb。
sslversionsareusedtoallowaccesstothefullssl(fsa)provider,thisapplicationprovidethefollowingaccessinformation:useragent,protocolprotocol,useragentid,username,endpointlookup,notavailableauthenticators,url,notavailabledebuggers,throughput,memory。 查看全部
curl 抓取网页(方法二楼上的发的方法方法四中绕过服务器验证)
curl抓取网页信息中的ip地址和密码等信息,加密算法为rsa,算法公开,是一种基于密码学的散列算法,该算法不泄露给任何第三方可加密数据,同时破解难度低,在网络上可以被安全的上传和下载网页。想提供ip地址和密码的源代码给我,谢谢。
方法二
楼上的发的方法方法四中的方法都是一种绕过服务器验证的方法,也就是让上传被人破解。楼上的方法实际用起来都很简单,如果不会编程。
直接给远程服务器提供一个手机号,远程服务器将这个手机号地址告诉你。
这个有人破解了,编程完全无压力,挺牛的。onlyattentionfromthefollowingiphoneapplicationthatonceasecretkeyauthenticatesyourapplicationtoapple’shttpswebapplication,servestheprotectionofapple’sinternetaccesstohttpsinallwebapplicationsparts。
fromfollowingarticle:segmentfault。me-applebloghttpsallowsyoutoremoteaccess,andnottofollowtherequestavailablehere。webkitappsarerespectedbyalistingofcapabilitiesincludingsslversionsandtlsintotheweb。
sslversionsareusedtoallowaccesstothefullssl(fsa)provider,thisapplicationprovidethefollowingaccessinformation:useragent,protocolprotocol,useragentid,username,endpointlookup,notavailableauthenticators,url,notavailabledebuggers,throughput,memory。
curl 抓取网页( 抓ajax异步内容的页面和抓普通的异步区别不大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-12-10 13:00
抓ajax异步内容的页面和抓普通的异步区别不大
)
PHP抓取Ajax异步内容示例
更新时间:2014年9月9日17:51:21投稿:whsnow
Ajax异步内容页面和普通页面之间几乎没有区别。AJAX只是一个异步HTTP请求。您可以参考以下示例
事实上,Ajax异步内容页面和普通页面之间几乎没有区别。Ajax只是发出一个异步HTTP请求。只需使用类似于firebug的工具来查找请求的后端服务URL和值传递参数,然后获取URL传递参数
使用firebug的网络工具
如果抓取页面,内容中未显示的数据就是一堆JS代码
代码
$cookie_file=tempnam('./temp','cookie');
$ch = curl_init();
$url1 = "http://www.cdut.edu.cn/default.html";
curl_setopt($ch,CURLOPT_URL,$url1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); //加入gzip解析
//设置连接结束后保存cookie信息的文件
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content=curl_exec($ch);
curl_close($ch);
$ch3 = curl_init();
$url3 = "http://www.cdut.edu.cn/xww/dwr ... 3B%3B
$curlPost = "callCount=1&page=/xww/type/1000020118.html&httpSessionId=12A9B726E6A2D4D3B09DE7952B2F282C&scriptSessionId=295315B4B4141B09DA888D3A3ADB8FAA658&c0-scriptName=portalAjax&c0-methodName=getNewsXml&c0-id=0&c0-param0=string:10000201&c0-param1=string:1000020118&c0-param2=string:news_&c0-param3=number:5969&c0-param4=number:1&c0-param5=null:null&c0-param6=null:null&batchId=0";
curl_setopt($ch3,CURLOPT_URL,$url3);
curl_setopt($ch3,CURLOPT_POST,1);
curl_setopt($ch3,CURLOPT_POSTFIELDS,$curlPost);
//设置连接结束后保存cookie信息的文件
curl_setopt($ch3,CURLOPT_COOKIEFILE,$cookie_file);
$content1=curl_exec($ch3);
curl_close($ch3); 查看全部
curl 抓取网页(
抓ajax异步内容的页面和抓普通的异步区别不大
)
PHP抓取Ajax异步内容示例
更新时间:2014年9月9日17:51:21投稿:whsnow
Ajax异步内容页面和普通页面之间几乎没有区别。AJAX只是一个异步HTTP请求。您可以参考以下示例
事实上,Ajax异步内容页面和普通页面之间几乎没有区别。Ajax只是发出一个异步HTTP请求。只需使用类似于firebug的工具来查找请求的后端服务URL和值传递参数,然后获取URL传递参数
使用firebug的网络工具

如果抓取页面,内容中未显示的数据就是一堆JS代码

代码
$cookie_file=tempnam('./temp','cookie');
$ch = curl_init();
$url1 = "http://www.cdut.edu.cn/default.html";
curl_setopt($ch,CURLOPT_URL,$url1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); //加入gzip解析
//设置连接结束后保存cookie信息的文件
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content=curl_exec($ch);
curl_close($ch);
$ch3 = curl_init();
$url3 = "http://www.cdut.edu.cn/xww/dwr ... 3B%3B
$curlPost = "callCount=1&page=/xww/type/1000020118.html&httpSessionId=12A9B726E6A2D4D3B09DE7952B2F282C&scriptSessionId=295315B4B4141B09DA888D3A3ADB8FAA658&c0-scriptName=portalAjax&c0-methodName=getNewsXml&c0-id=0&c0-param0=string:10000201&c0-param1=string:1000020118&c0-param2=string:news_&c0-param3=number:5969&c0-param4=number:1&c0-param5=null:null&c0-param6=null:null&batchId=0";
curl_setopt($ch3,CURLOPT_URL,$url3);
curl_setopt($ch3,CURLOPT_POST,1);
curl_setopt($ch3,CURLOPT_POSTFIELDS,$curlPost);
//设置连接结束后保存cookie信息的文件
curl_setopt($ch3,CURLOPT_COOKIEFILE,$cookie_file);
$content1=curl_exec($ch3);
curl_close($ch3);
curl 抓取网页(PHPCURL与file_get_contents函数应用例子分析方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-19 12:07
PHP CURL 和 file_get_contents 函数都可以获取远程服务器上的文件并保存在本地,但在性能上却不是一个级别。这里通过一个例子给大家介绍PHP CURL或者file_get_contents获取页面标题的代码和效率两者的稳定性问题,需要的朋友可以参考
PHP CURL 和 file_get_contents 函数都可以检索远程服务器上的文件并将其保存在本地,但它们在性能方面并不处于同一水平。我先介绍PHP CURL 或file_get_contents 函数应用实例,然后给大家简单介绍一下它们之间的一些小区别。
推荐的获取CURL的方法
使用 file_get_contents
看一下 file_get_contents 性能
1)fopen/file_get_contents 每次请求远程URL中的数据时,都会重新进行DNS查询,不会缓存DNS信息。但是 CURL 会自动缓存 DNS 信息。请求同域名下的网页或图片,只需要进行一次DNS查询。这大大减少了 DNS 查询的数量。所以CURL的性能要比fopen/file_get_contents好很多。
2)fopen/file_get_contents 请求 HTTP 时使用 http_fopen_wrapper,不会保持存活。但是卷曲可以。这样,当多次请求多个链接时,curl 的效率会更高。(应该可以设置标题)
3)fopen/file_get_contents 函数会受到php.ini 文件中allow_url_open 选项配置的影响。如果配置关闭,则该功能无效。并且 curl 不受此配置的影响。
4)curl 可以模拟多种请求,如:POST 数据、表单提交等,用户可以根据自己的需求自定义请求。而 fopen/file_get_contents 只能使用 get 来获取数据。
5)fopen/file_get_contents 无法正确下载二进制文件
6)fopen/file_get_contents 无法正确处理 ssl 请求
7)curl 可以利用多线程
8) 使用file_get_contents时,如果网络有问题,这里很容易积累一些进程
9)如果要进行连续连接,请多次请求多个页面。那么 file_get_contents 就会出错。获取的内容也可能是错误的。所以在做类似采集的事情的时候,肯定有问题。使用curl进行采集爬取,如果你还不相信,我们再做一个测试。
curl和file_get_contents PHP源码性能对比如下:
第182话
测试访问
file_get_contents 速度:4.2404510975 秒
卷曲速度:2.8205530643 秒
curl 比 file_get_contents 快约 30%,最重要的是,服务器负载更低。
ps:php函数file_get_contents和curl的效率和稳定性问题
我习惯使用方便快捷的file_get_contents函数来抓取其他家网站的内容,但总是遇到获取失败的问题。虽然按照手册中的例子设置了超时时间,但大多数时候并不好用:
$config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));
'timeout' => 5//这个超时时间不稳定,经常难以使用。这时候如果查看服务器的连接池,会发现一堆类似下面的错误,让你头疼:
file_get_contents(***): 无法打开流...
作为最后的手段,我安装了 curl 库并编写了一个函数替换:
function curl_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 $r = curl_exec($ch); curl_close($ch); return $r; }
这样,除了真正的网络问题外,没有其他问题了。
这是别人做过的 curl 和 file_get_contents 的测试:
File_get_contents 需要几秒钟才能获取:
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl 使用的时间:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
是不是差距很大?哈哈,根据我的经验,这两个工具不仅速度不同,稳定性也不同。推荐对网络数据抓取稳定性要求高的朋友使用上面的curl_file_get_contents函数,不仅稳定快速,还能假冒浏览器欺骗目标地址!
以上是PHP CURL或者file_get_contents获取页面标题和详细内容的代码,两者的效率稳定性。更多详情请关注其他相关html中文网站文章! 查看全部
curl 抓取网页(PHPCURL与file_get_contents函数应用例子分析方法)
PHP CURL 和 file_get_contents 函数都可以获取远程服务器上的文件并保存在本地,但在性能上却不是一个级别。这里通过一个例子给大家介绍PHP CURL或者file_get_contents获取页面标题的代码和效率两者的稳定性问题,需要的朋友可以参考
PHP CURL 和 file_get_contents 函数都可以检索远程服务器上的文件并将其保存在本地,但它们在性能方面并不处于同一水平。我先介绍PHP CURL 或file_get_contents 函数应用实例,然后给大家简单介绍一下它们之间的一些小区别。
推荐的获取CURL的方法
使用 file_get_contents
看一下 file_get_contents 性能
1)fopen/file_get_contents 每次请求远程URL中的数据时,都会重新进行DNS查询,不会缓存DNS信息。但是 CURL 会自动缓存 DNS 信息。请求同域名下的网页或图片,只需要进行一次DNS查询。这大大减少了 DNS 查询的数量。所以CURL的性能要比fopen/file_get_contents好很多。
2)fopen/file_get_contents 请求 HTTP 时使用 http_fopen_wrapper,不会保持存活。但是卷曲可以。这样,当多次请求多个链接时,curl 的效率会更高。(应该可以设置标题)
3)fopen/file_get_contents 函数会受到php.ini 文件中allow_url_open 选项配置的影响。如果配置关闭,则该功能无效。并且 curl 不受此配置的影响。
4)curl 可以模拟多种请求,如:POST 数据、表单提交等,用户可以根据自己的需求自定义请求。而 fopen/file_get_contents 只能使用 get 来获取数据。
5)fopen/file_get_contents 无法正确下载二进制文件
6)fopen/file_get_contents 无法正确处理 ssl 请求
7)curl 可以利用多线程
8) 使用file_get_contents时,如果网络有问题,这里很容易积累一些进程
9)如果要进行连续连接,请多次请求多个页面。那么 file_get_contents 就会出错。获取的内容也可能是错误的。所以在做类似采集的事情的时候,肯定有问题。使用curl进行采集爬取,如果你还不相信,我们再做一个测试。
curl和file_get_contents PHP源码性能对比如下:
第182话
测试访问
file_get_contents 速度:4.2404510975 秒
卷曲速度:2.8205530643 秒
curl 比 file_get_contents 快约 30%,最重要的是,服务器负载更低。
ps:php函数file_get_contents和curl的效率和稳定性问题
我习惯使用方便快捷的file_get_contents函数来抓取其他家网站的内容,但总是遇到获取失败的问题。虽然按照手册中的例子设置了超时时间,但大多数时候并不好用:
$config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));
'timeout' => 5//这个超时时间不稳定,经常难以使用。这时候如果查看服务器的连接池,会发现一堆类似下面的错误,让你头疼:
file_get_contents(***): 无法打开流...
作为最后的手段,我安装了 curl 库并编写了一个函数替换:
function curl_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 $r = curl_exec($ch); curl_close($ch); return $r; }
这样,除了真正的网络问题外,没有其他问题了。
这是别人做过的 curl 和 file_get_contents 的测试:
File_get_contents 需要几秒钟才能获取:
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl 使用的时间:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
是不是差距很大?哈哈,根据我的经验,这两个工具不仅速度不同,稳定性也不同。推荐对网络数据抓取稳定性要求高的朋友使用上面的curl_file_get_contents函数,不仅稳定快速,还能假冒浏览器欺骗目标地址!
以上是PHP CURL或者file_get_contents获取页面标题和详细内容的代码,两者的效率稳定性。更多详情请关注其他相关html中文网站文章!
curl 抓取网页(进程在堆栈执行,的考虑因素有哪些?-curl)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-18 19:02
curl抓取网页html代码。进程在堆栈执行,实际是n个线程共同ping。tcp(传输协议)n个进程围绕着对称到非对称的关系,多一个线程就是多一个进程,所以可以用ping来判断进程数目。另外http(网络)也有个https协议(http/s)可以通过tcp(传输协议)传输数据。ping目前主要用来抓http页面,看不同的连接人数。一个上午ping上百次的话,可以猜测该ping应该没人在线。
建议:首先有关tcp方面的问题,可以百度“简单tcp协议”。至于网络方面的问题,可以百度“常见网络协议”、“常见网络方式”。另外,cpu同时执行多个线程,也是为了多任务执行。多线程性能通常是非对称互斥的,意味着cpu是独占使用资源的。
线程竞争资源是因为处理程序和执行进程内同名且并发,所以不同线程要执行不同的任务来完成同一个目标。另外,在处理程序中,进程是调度器来管理执行顺序的,而非某个线程自身。在虚拟地址空间中,同名且并发同样编译器可以让不同进程相互直接访问,对于不同进程之间。
1.线程的竞争是因为cpu设计的考虑因素,使得处理程序与执行进程内同名且并发会产生竞争(使用uthreading等方式减少竞争),这样可以利用调度器来排序在同一时刻只有一个执行的进程(线程),这样有利于避免发生重复运行造成cpu分配不均匀。2.机器处理时间和执行时间不一样,产生的有效时间差异。3.运行时的频率与检查指令和并发时间的差距。4.cpu支持,但是那是针对有效核数大于4的处理器来说的。 查看全部
curl 抓取网页(进程在堆栈执行,的考虑因素有哪些?-curl)
curl抓取网页html代码。进程在堆栈执行,实际是n个线程共同ping。tcp(传输协议)n个进程围绕着对称到非对称的关系,多一个线程就是多一个进程,所以可以用ping来判断进程数目。另外http(网络)也有个https协议(http/s)可以通过tcp(传输协议)传输数据。ping目前主要用来抓http页面,看不同的连接人数。一个上午ping上百次的话,可以猜测该ping应该没人在线。
建议:首先有关tcp方面的问题,可以百度“简单tcp协议”。至于网络方面的问题,可以百度“常见网络协议”、“常见网络方式”。另外,cpu同时执行多个线程,也是为了多任务执行。多线程性能通常是非对称互斥的,意味着cpu是独占使用资源的。
线程竞争资源是因为处理程序和执行进程内同名且并发,所以不同线程要执行不同的任务来完成同一个目标。另外,在处理程序中,进程是调度器来管理执行顺序的,而非某个线程自身。在虚拟地址空间中,同名且并发同样编译器可以让不同进程相互直接访问,对于不同进程之间。
1.线程的竞争是因为cpu设计的考虑因素,使得处理程序与执行进程内同名且并发会产生竞争(使用uthreading等方式减少竞争),这样可以利用调度器来排序在同一时刻只有一个执行的进程(线程),这样有利于避免发生重复运行造成cpu分配不均匀。2.机器处理时间和执行时间不一样,产生的有效时间差异。3.运行时的频率与检查指令和并发时间的差距。4.cpu支持,但是那是针对有效核数大于4的处理器来说的。
curl 抓取网页(你的PHP代码并没有出错(1)_光明网(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2021-11-18 08:10
用curl单独取是可行的,但是如果取一系列相同类型的网站会报错,把它们放在数组中
在 $linkList 中,分别以此类推。
function getJobsHubuNotice()
{
$curl = curl_init('http://jobs.hubu.edu.cn/List.aspx?ArticleChannelId=81');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
//内容处理
$result = strip_tags($result,'');
$result = stristr($result, 'nbsp当前位置:');
$result = str_replace('nbsp当前位置:', '', $result);
$result = stristr($result, '当前1/2页',true);
$result = stristr($result, '通知公告');
$result = str_replace('通知公告', '', $result);
preg_match_all('/(? 通知公告', '', $result);
$result = stristr($result, '$(document).ready',true);
$result = trim($result);
$result = str_replace("\r\n", '
', $result);
$result = preg_replace('/(\){1,}/', '
', $result);
echo $result;
echo '
';
echo "退出makePage函数";
return $result;
}
}
首先使用getJobsHubuNotice()函数获取新闻的链接、标题、日期,然后使用makePage()函数获取内容
这是在 makePage 中打印链接的结果。用浏览器打开链接没有问题。
您的 PHP 代码中没有错误。初步怀疑是你请求时传递的URL有误,如下图:
在你的代码中
错误输出实际上在你得到的网页上
输出的内容。
再次更新,我想我知道是什么导致了您的请求中的错误:
您从网页获取的URL地址为:Detail.aspx?ArticleChannelId=81&ArticleId=2777,
& 中的字符是 & 的 HTML 实体字符,在你的
输出时(即在您的屏幕截图中),它显示 &,当您发出真实请求时,将使用以下内容:
您只需要恢复它或简单地将 URL 中的 & 替换为 & 然后再次请求它。
再次更新:
<p> 查看全部
curl 抓取网页(你的PHP代码并没有出错(1)_光明网(组图))
用curl单独取是可行的,但是如果取一系列相同类型的网站会报错,把它们放在数组中
在 $linkList 中,分别以此类推。
function getJobsHubuNotice()
{
$curl = curl_init('http://jobs.hubu.edu.cn/List.aspx?ArticleChannelId=81');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
//内容处理
$result = strip_tags($result,'');
$result = stristr($result, 'nbsp当前位置:');
$result = str_replace('nbsp当前位置:', '', $result);
$result = stristr($result, '当前1/2页',true);
$result = stristr($result, '通知公告');
$result = str_replace('通知公告', '', $result);
preg_match_all('/(? 通知公告', '', $result);
$result = stristr($result, '$(document).ready',true);
$result = trim($result);
$result = str_replace("\r\n", '
', $result);
$result = preg_replace('/(\){1,}/', '
', $result);
echo $result;
echo '
';
echo "退出makePage函数";
return $result;
}
}
首先使用getJobsHubuNotice()函数获取新闻的链接、标题、日期,然后使用makePage()函数获取内容
这是在 makePage 中打印链接的结果。用浏览器打开链接没有问题。
您的 PHP 代码中没有错误。初步怀疑是你请求时传递的URL有误,如下图:
在你的代码中
错误输出实际上在你得到的网页上
输出的内容。
再次更新,我想我知道是什么导致了您的请求中的错误:
您从网页获取的URL地址为:Detail.aspx?ArticleChannelId=81&ArticleId=2777,
& 中的字符是 & 的 HTML 实体字符,在你的
输出时(即在您的屏幕截图中),它显示 &,当您发出真实请求时,将使用以下内容:
您只需要恢复它或简单地将 URL 中的 & 替换为 & 然后再次请求它。
再次更新:
<p>
curl 抓取网页( 得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-11-12 14:21
得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
$thisurl = "http://www.zztuku.com";
$html = file_get_contents($thisurl );
print_r($http_response_header);
得到的结果是:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
方法三:使用stream_get_meta_data()函数
推荐指数:★★★
使用stream_get_meta_data()代码只需要三行:
$thisurl = "http://www.zztuku.com/";
$fp = fopen($thisurl, 'r');
print_r(stream_get_meta_data($fp));
得到的结果是:
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
[wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r+
[unread_bytes] => 1086
[seekable] =>
[uri] => http://www.zztuku.com/
[timed_out] =>
[blocked] => 1
[eof] =>
)
方法四:使用PHP的高级函数CURL()获取
推荐指数:★★★★
以上三种方法都可以获取通用的网页页眉信息。如果您想获取更详细的头信息,例如网页是否启用了 GZip 压缩。这时候就可以使用PHP的高级函数curl()来获取了。
使用 curl 获取 header 来检测 GZip 压缩
先贴代码:
输出结果如下:
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Length: 15189
Content-Type: text/html
Content-Encoding: gzip
Content-Location: http://www.zztuku.com/index.html
Last-Modified: Fri, 19 Jul 2013 03:52:28 GMT
Accept-Ranges: bytes
ETag: "0268633384ce1:5cb3"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 19 Jul 2013 09:27:21 GMT
可以看到使用curl获取的header信息有这一行:Content-Encoding:gzip,并且网页开启了GZip压缩。 查看全部
curl 抓取网页(
得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
$thisurl = "http://www.zztuku.com";
$html = file_get_contents($thisurl );
print_r($http_response_header);
得到的结果是:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
方法三:使用stream_get_meta_data()函数
推荐指数:★★★
使用stream_get_meta_data()代码只需要三行:
$thisurl = "http://www.zztuku.com/";
$fp = fopen($thisurl, 'r');
print_r(stream_get_meta_data($fp));
得到的结果是:
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
[wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r+
[unread_bytes] => 1086
[seekable] =>
[uri] => http://www.zztuku.com/
[timed_out] =>
[blocked] => 1
[eof] =>
)
方法四:使用PHP的高级函数CURL()获取
推荐指数:★★★★
以上三种方法都可以获取通用的网页页眉信息。如果您想获取更详细的头信息,例如网页是否启用了 GZip 压缩。这时候就可以使用PHP的高级函数curl()来获取了。
使用 curl 获取 header 来检测 GZip 压缩
先贴代码:
输出结果如下:
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Length: 15189
Content-Type: text/html
Content-Encoding: gzip
Content-Location: http://www.zztuku.com/index.html
Last-Modified: Fri, 19 Jul 2013 03:52:28 GMT
Accept-Ranges: bytes
ETag: "0268633384ce1:5cb3"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 19 Jul 2013 09:27:21 GMT
可以看到使用curl获取的header信息有这一行:Content-Encoding:gzip,并且网页开启了GZip压缩。
curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-10 18:05
)
之前的一篇文章文章介绍了如何通过python爬取网页,见Python爬取中文网页,但很快发现这个方法对CSDN个人博客的爬取不起作用
. 很久以前就听说过curl的威力,所以今天就来试一试。
curl的功能非常强大。这里介绍一下curl的使用。你可以参考一下。其他问题请百度和谷歌。这里我们只使用最基本的--connect-timeout和-o。以本博客为例:
curl -s --connect-timeout 10 -o blog "http://blog.csdn.net/nevasun"
OK,当前目录下就会有一个博客文件了。当我们将其作为纯文本文件打开时,我们会发现以下信息:
访问:10598次
积分:610分
排名:第13159名
接下来,我们要做的就是从博客文件中提取访问量、积分、排名等信息。前几天刚学了awk,所以用awk试试吧。awk的介绍和学习请参考AWK学习总结和练习。下面的awk相关内容可以在里面找到。
awk 程序由一系列“模式-动作”语句组成:模式 {action}。
匹配模式可以是/(visit|points|ranking):.*/,匹配模式后需要取出当前行的值。由于号码长度不固定,不能使用定长号码。您可以使用 gsub() 将非数字字符替换为空字符,其余为数字。接下来是完整的awk代码。
awk 'BEGIN {FS="[]"; ORS="\t"} /(访问|积分|排名):.*/ \
{ if($3 == "访问:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "积分:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "排名:") {gsub(/[^0-9]+/, ""); print}}' blog
至此,我们已经能够抓取到需要的数据了,通过shell和python脚本,使用cron,可以让系统定时记录每天的访问情况。
Shell 脚本 account.sh:
Python 脚本 dbroutine.py:
#!/usr/bin/python
import os
import cPickle as pcl
import sys
from time import localtime
def load_record(db_file):
recordlist = [{}]
if os.path.exists(db_file):
readf = file(db_file)
try:
recordlist = pcl.load(readf)
except:
recordlist = [{}]
readf.close()
return recordlist
def dump_record(db_file, recordlist, total_access, score, rank):
writef = file(db_file, "wb")
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
recordlist.insert(0, day_record)
pcl.dump(recordlist, writef)
writef.close()
def print_record(recordlist, total_access, score, rank):
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
print day_record
for i in range(0, len(recordlist)):
print recordlist[i]
db_file = "blog_record.dat"
recordlist = [{}]
if len(sys.argv) != 5:
raise Exception
total_access = int(sys.argv[1])
score = int(sys.argv[2])
rank = int(sys.argv[3])
flag = int(sys.argv[4])
recordlist = load_record(db_file)
if flag != 0:
dump_record(db_file, recordlist, total_access, score, rank)
else:
print_record(recordlist, total_access, score, rank) 查看全部
curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大
)
之前的一篇文章文章介绍了如何通过python爬取网页,见Python爬取中文网页,但很快发现这个方法对CSDN个人博客的爬取不起作用

. 很久以前就听说过curl的威力,所以今天就来试一试。
curl的功能非常强大。这里介绍一下curl的使用。你可以参考一下。其他问题请百度和谷歌。这里我们只使用最基本的--connect-timeout和-o。以本博客为例:
curl -s --connect-timeout 10 -o blog "http://blog.csdn.net/nevasun"
OK,当前目录下就会有一个博客文件了。当我们将其作为纯文本文件打开时,我们会发现以下信息:
访问:10598次
积分:610分
排名:第13159名
接下来,我们要做的就是从博客文件中提取访问量、积分、排名等信息。前几天刚学了awk,所以用awk试试吧。awk的介绍和学习请参考AWK学习总结和练习。下面的awk相关内容可以在里面找到。
awk 程序由一系列“模式-动作”语句组成:模式 {action}。
匹配模式可以是/(visit|points|ranking):.*/,匹配模式后需要取出当前行的值。由于号码长度不固定,不能使用定长号码。您可以使用 gsub() 将非数字字符替换为空字符,其余为数字。接下来是完整的awk代码。
awk 'BEGIN {FS="[]"; ORS="\t"} /(访问|积分|排名):.*/ \
{ if($3 == "访问:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "积分:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "排名:") {gsub(/[^0-9]+/, ""); print}}' blog
至此,我们已经能够抓取到需要的数据了,通过shell和python脚本,使用cron,可以让系统定时记录每天的访问情况。
Shell 脚本 account.sh:
Python 脚本 dbroutine.py:
#!/usr/bin/python
import os
import cPickle as pcl
import sys
from time import localtime
def load_record(db_file):
recordlist = [{}]
if os.path.exists(db_file):
readf = file(db_file)
try:
recordlist = pcl.load(readf)
except:
recordlist = [{}]
readf.close()
return recordlist
def dump_record(db_file, recordlist, total_access, score, rank):
writef = file(db_file, "wb")
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
recordlist.insert(0, day_record)
pcl.dump(recordlist, writef)
writef.close()
def print_record(recordlist, total_access, score, rank):
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
print day_record
for i in range(0, len(recordlist)):
print recordlist[i]
db_file = "blog_record.dat"
recordlist = [{}]
if len(sys.argv) != 5:
raise Exception
total_access = int(sys.argv[1])
score = int(sys.argv[2])
rank = int(sys.argv[3])
flag = int(sys.argv[4])
recordlist = load_record(db_file)
if flag != 0:
dump_record(db_file, recordlist, total_access, score, rank)
else:
print_record(recordlist, total_access, score, rank)
curl 抓取网页()
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-01-18 16:12
我每周都在同一条航线上旅行,只有少数航班中转和航空公司适合。为了获得最优惠的价格,我手动检查价格。
因此,我构建了一个迷你脚本,我可以在其中输入日期并使用“快速”链接打开承运人的多个网页,这样我就不必手动输入航班日期,例如,您可以在其中输入日期并使用“快速”链接可打开承运人的多个网页,因此您不必手动输入航班日期,例如
知道我想知道是否可以使用任何屏幕抓取方法将其自动化一点。完美的最终输出应该是这样的,它为我提供了我需要的概览:
+------------+---------+---------+
| HAJ-PMI | date1 | date2 | ...
+------------+---------+---------+
| Condor | 219,99 | 78,88 | ...
| Air Berlin | 188,99 | 119,99 | ...
+------------+---------+---------+
所以参考上面的示例链接,我如何才能了解价格。我试图使用 file_gets_content 和 cUrl 这样做,但没有得到任何可接受的结果,因为页面似乎没有正确加载。结果。
卷曲:卷曲
<p> 查看全部
curl 抓取网页()
我每周都在同一条航线上旅行,只有少数航班中转和航空公司适合。为了获得最优惠的价格,我手动检查价格。
因此,我构建了一个迷你脚本,我可以在其中输入日期并使用“快速”链接打开承运人的多个网页,这样我就不必手动输入航班日期,例如,您可以在其中输入日期并使用“快速”链接可打开承运人的多个网页,因此您不必手动输入航班日期,例如
知道我想知道是否可以使用任何屏幕抓取方法将其自动化一点。完美的最终输出应该是这样的,它为我提供了我需要的概览:
+------------+---------+---------+
| HAJ-PMI | date1 | date2 | ...
+------------+---------+---------+
| Condor | 219,99 | 78,88 | ...
| Air Berlin | 188,99 | 119,99 | ...
+------------+---------+---------+
所以参考上面的示例链接,我如何才能了解价格。我试图使用 file_gets_content 和 cUrl 这样做,但没有得到任何可接受的结果,因为页面似乎没有正确加载。结果。
卷曲:卷曲
<p>
curl 抓取网页(和wget下载安装1、Ubuntu平台wget命令安装:百度首页为例)
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-01-18 00:20
curl和wget下载安装
1、Ubuntu 平台
wget命令安装:sudo apt-get install wget(普通用户登录,需要输入密码;root账户登录,不需要输入密码)
curl命令安装:sudo apt-get install curl(同wget)
2、Windows 平台
wget下载地址:wget for Windows
curl下载地址:curl下载
wget和curl包下载地址:Windows平台下的wget和curl工具包
在Windows平台下,curl下载解压后直接为curl.exe格式,复制到系统命令目录下的C:\Windows\System32。
Windows平台下,wget下载解压后为wget-1.11.4-1-setup.exe格式,需要安装;安装完成后,在环境变量-系统变量-路径目录下添加其安装
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL 和代理代理。下面是一个爬取“百度”首页的例子。
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。
这时候可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题。
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认8< @0)
注:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k31@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(和wget下载安装1、Ubuntu平台wget命令安装:百度首页为例)
curl和wget下载安装
1、Ubuntu 平台
wget命令安装:sudo apt-get install wget(普通用户登录,需要输入密码;root账户登录,不需要输入密码)
curl命令安装:sudo apt-get install curl(同wget)
2、Windows 平台
wget下载地址:wget for Windows
curl下载地址:curl下载
wget和curl包下载地址:Windows平台下的wget和curl工具包
在Windows平台下,curl下载解压后直接为curl.exe格式,复制到系统命令目录下的C:\Windows\System32。
Windows平台下,wget下载解压后为wget-1.11.4-1-setup.exe格式,需要安装;安装完成后,在环境变量-系统变量-路径目录下添加其安装
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL 和代理代理。下面是一个爬取“百度”首页的例子。
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。
这时候可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题。
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认8< @0)
注:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k31@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(我正在“尝试”抓取页面内具有以下结构的网页)
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-01-14 20:08
我正在“尝试”抓取页面内具有以下结构的网页:
<p class="row">
stuff here
Descriptive Link Text
Link Description Here
</p>
我正在使用 curl 抓取网页:
我做了一些研究,发现我不应该使用 RegEx 来解析从 curl 返回的 HTML,我应该使用 PHP DOM。我就是这样做的:
$newDom = new domDocument;
$newDom->loadHTML($html);
$newDom->preserveWhiteSpace = false;
$sections = $newDom->getElementsByTagName('p');
$nodeNo = $sections->length;
for($i=0; $iitem($i)->nodeValue;
echo $printString . "
";
}
现在我并没有假装我完全理解这一点,但我明白了要点,我确实得到了我想要的部分。唯一的问题是我得到的只是 HTML 页面的文本,就好像我从浏览器窗口复制它一样。我想要的是实际的 HTML,因为我想提取链接并像这样使用它们:
for($i=0; $iitem($i)->nodeValue;
echo "<a href=\"extracted link\">LINK</a> " . $printString . "
";
}
如您所见,我无法获得链接,因为我只获得网页的文本,而不是我想要的来源。我知道“curl_exec”正在提取 HTML,并且由于我已经尝试过,我相信 DOM 会以某种方式剥离我想要的 HTML。 查看全部
curl 抓取网页(我正在“尝试”抓取页面内具有以下结构的网页)
我正在“尝试”抓取页面内具有以下结构的网页:
<p class="row">
stuff here
Descriptive Link Text
Link Description Here
</p>
我正在使用 curl 抓取网页:
我做了一些研究,发现我不应该使用 RegEx 来解析从 curl 返回的 HTML,我应该使用 PHP DOM。我就是这样做的:
$newDom = new domDocument;
$newDom->loadHTML($html);
$newDom->preserveWhiteSpace = false;
$sections = $newDom->getElementsByTagName('p');
$nodeNo = $sections->length;
for($i=0; $iitem($i)->nodeValue;
echo $printString . "
";
}
现在我并没有假装我完全理解这一点,但我明白了要点,我确实得到了我想要的部分。唯一的问题是我得到的只是 HTML 页面的文本,就好像我从浏览器窗口复制它一样。我想要的是实际的 HTML,因为我想提取链接并像这样使用它们:
for($i=0; $iitem($i)->nodeValue;
echo "<a href=\"extracted link\">LINK</a> " . $printString . "
";
}
如您所见,我无法获得链接,因为我只获得网页的文本,而不是我想要的来源。我知道“curl_exec”正在提取 HTML,并且由于我已经尝试过,我相信 DOM 会以某种方式剥离我想要的 HTML。
curl 抓取网页(java插件让火狐去调用slf4j的spark服务接口的应用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-01-13 06:01
curl抓取网页文件内容,可以把html转换成pdf。2.sqlite提取数据。利用sqlite提供的selectcursorwhere条件。3.libreoffice提取文字。如果用access数据库,提取csv的列名也很好用。4.存储为rar/zip压缩包,再用java调用web或rstudio编译。
来,让我来告诉你们其实你们都还可以像那个java一样自己做一个浏览器插件让火狐去调用slf4j。
spark。
1.调用nodejsjs等语言的jsonapi服务接口。看题主描述应该是想无java代码去做。但说实话,用java语言写都有坑,何况java插件,因为它java写的,要实现这个不是简单的了,而且成本远高于自己写2.如果只是想调用电商网站的接口。其实还有一个好用的方法,但是必须服务器部署电商网站,并且还是线下。
这个效率上会有点不划算。因为最大的问题就是,每单都要发送到相应的商家来,这样,商家就要人工判断你的电话号码是否和他的库存相同,同时接收到相应的返回数据再发送给你。这个耗时,想想就让人头疼,更何况还是快递公司的库存相同呢。所以说,这种线下部署,付出的时间精力,和成本,以及人工判断相同库存的麻烦的确相当大,如果要搞的话,而且是无底洞。 查看全部
curl 抓取网页(java插件让火狐去调用slf4j的spark服务接口的应用)
curl抓取网页文件内容,可以把html转换成pdf。2.sqlite提取数据。利用sqlite提供的selectcursorwhere条件。3.libreoffice提取文字。如果用access数据库,提取csv的列名也很好用。4.存储为rar/zip压缩包,再用java调用web或rstudio编译。
来,让我来告诉你们其实你们都还可以像那个java一样自己做一个浏览器插件让火狐去调用slf4j。
spark。
1.调用nodejsjs等语言的jsonapi服务接口。看题主描述应该是想无java代码去做。但说实话,用java语言写都有坑,何况java插件,因为它java写的,要实现这个不是简单的了,而且成本远高于自己写2.如果只是想调用电商网站的接口。其实还有一个好用的方法,但是必须服务器部署电商网站,并且还是线下。
这个效率上会有点不划算。因为最大的问题就是,每单都要发送到相应的商家来,这样,商家就要人工判断你的电话号码是否和他的库存相同,同时接收到相应的返回数据再发送给你。这个耗时,想想就让人头疼,更何况还是快递公司的库存相同呢。所以说,这种线下部署,付出的时间精力,和成本,以及人工判断相同库存的麻烦的确相当大,如果要搞的话,而且是无底洞。
curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-01-12 01:08
* "header_size" // 标题的大小
* "request_size" // 请求的大小
* "filetime" // 文件创建时间
* "ssl_verify_result" //SSL验证结果
* "redirect_count" //重定向技术
* "total_time" //总时间
* "namelookup_time" // DNS 查询时间
* "connect_time" //等待连接时间
* "pretransfer_time"//传输前的准备时间
* "size_upload" //上传数据的大小
* "size_download" // 下载数据的大小
* "speed_download" // 下载速度
* "speed_upload" //上传速度
*"download_content_length"//下载内容的长度
* "upload_content_length"//上传内容的长度
* "starttransfer_time" // 开始传输的时间
*"redirect_time"//重定向耗时
cURL的本质是如何配置参数:
bool curl_setopt(int ch ,string option mixedvalue);
curl_setopt() 函数将为 CURL 会话设置选项。 option参数就是你想要的设置,value就是这个option给出的值。
在国际电联书架上的应用:
下面简单说一下登录的实现。技术难点在于正确配置curl的请求参数。
第一次请求登录页面时,可以获得会话session_id。但必须注意:
curl_setopt($con,CURLOPT_HEADER,1);//非零值为输出头
这个配置可以输出返回的header,从而可以在返回的内容中捕捉到header。
简单解释一下这个session_id
首先要明白,服务器和用户之间的会话是通过一个会话会话来确认请求来自同一个用户,并且这个存储在服务器中,一个存储在用户的浏览器中作为 cookie。
如何获得?
首先,调试的时候,打印整个内容,print_r($content),这样就可以看到整个header了;
其次,你可以使用一个调试软件fiddler,它可以监控浏览器或进程的http请求/响应。它非常强大。我写大书架的时候用过。
,可以清楚的看到服务器返回的header中明确设置了cookie名称为ASP.NET_SessionId。那么我们在提交表单或者请求页面的时候,一定要带上这个cookie,这样服务器才能认为是同一个用户在操作。
具体配置参数如下:
curl_setopt($conn,CURLOPT_COOKIESESSION,true);//启用时curl只会传递一个sessioncookie而忽略其他cookie。默认情况下,curl 会将所有 cookie 返回到服务器。会话 cookie 是指存在用于确定服务器端会话是否有效的那些 cookie。
curl_setopt($conn,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);//传递收录HTTPcookie的标头连接。
这样在再次提交表单或请求页面时会收录id。可以说,只要登录成功,一直拿着这个“钥匙”,就可以爬取这个网站的所有页面的内容。
从图中可以看出,当登录请求发出时,表单内容和session_id结果被POST,服务器返回一个302跳转头。证明登录成功,并且还收录key(在请求这个网站的其他url时使用)。
当然,这个配置只针对某一个网站(不带验证码),对于有验证码的人来说是很麻烦的。
关于cURL多线程爬取,貌似会消耗大量CPU和时间。有时间我会研究这个。
第一次写这么长的博文大约花了一个小时,作为学习笔记来记忆。 查看全部
curl 抓取网页(那要耗时cURL的精髓就在于如何配置参数?(一))
* "header_size" // 标题的大小
* "request_size" // 请求的大小
* "filetime" // 文件创建时间
* "ssl_verify_result" //SSL验证结果
* "redirect_count" //重定向技术
* "total_time" //总时间
* "namelookup_time" // DNS 查询时间
* "connect_time" //等待连接时间
* "pretransfer_time"//传输前的准备时间
* "size_upload" //上传数据的大小
* "size_download" // 下载数据的大小
* "speed_download" // 下载速度
* "speed_upload" //上传速度
*"download_content_length"//下载内容的长度
* "upload_content_length"//上传内容的长度
* "starttransfer_time" // 开始传输的时间
*"redirect_time"//重定向耗时
cURL的本质是如何配置参数:
bool curl_setopt(int ch ,string option mixedvalue);
curl_setopt() 函数将为 CURL 会话设置选项。 option参数就是你想要的设置,value就是这个option给出的值。
在国际电联书架上的应用:
下面简单说一下登录的实现。技术难点在于正确配置curl的请求参数。
第一次请求登录页面时,可以获得会话session_id。但必须注意:
curl_setopt($con,CURLOPT_HEADER,1);//非零值为输出头
这个配置可以输出返回的header,从而可以在返回的内容中捕捉到header。
简单解释一下这个session_id
首先要明白,服务器和用户之间的会话是通过一个会话会话来确认请求来自同一个用户,并且这个存储在服务器中,一个存储在用户的浏览器中作为 cookie。
如何获得?
首先,调试的时候,打印整个内容,print_r($content),这样就可以看到整个header了;
其次,你可以使用一个调试软件fiddler,它可以监控浏览器或进程的http请求/响应。它非常强大。我写大书架的时候用过。
,可以清楚的看到服务器返回的header中明确设置了cookie名称为ASP.NET_SessionId。那么我们在提交表单或者请求页面的时候,一定要带上这个cookie,这样服务器才能认为是同一个用户在操作。
具体配置参数如下:
curl_setopt($conn,CURLOPT_COOKIESESSION,true);//启用时curl只会传递一个sessioncookie而忽略其他cookie。默认情况下,curl 会将所有 cookie 返回到服务器。会话 cookie 是指存在用于确定服务器端会话是否有效的那些 cookie。
curl_setopt($conn,CURLOPT_COOKIE,'ASP.NET_SessionId='.$session_id);//传递收录HTTPcookie的标头连接。
这样在再次提交表单或请求页面时会收录id。可以说,只要登录成功,一直拿着这个“钥匙”,就可以爬取这个网站的所有页面的内容。
从图中可以看出,当登录请求发出时,表单内容和session_id结果被POST,服务器返回一个302跳转头。证明登录成功,并且还收录key(在请求这个网站的其他url时使用)。
当然,这个配置只针对某一个网站(不带验证码),对于有验证码的人来说是很麻烦的。
关于cURL多线程爬取,貌似会消耗大量CPU和时间。有时间我会研究这个。
第一次写这么长的博文大约花了一个小时,作为学习笔记来记忆。
curl 抓取网页(Iamdevelopingprojectaproject,forthecontentsinthebackground)
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-01-08 21:15
我正在开发一个项目,我想在后台抓取网站的内容并从该抓取的网站中获取一些有限的内容。 ,并从已抓取的 网站 中获取一些有限的内容。例如,在我的页面中,我有“userid”和“password”字段,通过使用这些字段,我将访问我的邮件并抓取我的收件箱内容并将其显示在我的页面中。和“密码”字段,通过使用这些字段,我将访问我的邮件并获取我的收件箱内容并将其显示在我的页面中。
我单独使用 javascript 完成了上述操作。但是当我单击登录按钮时,我的页面 () 的 URL 更改为我被抓取的 URL (.)。 . .) 我被抓伤了。但是我在不更改网址的情况下取消了详细信息。 查看全部
curl 抓取网页(Iamdevelopingprojectaproject,forthecontentsinthebackground)
我正在开发一个项目,我想在后台抓取网站的内容并从该抓取的网站中获取一些有限的内容。 ,并从已抓取的 网站 中获取一些有限的内容。例如,在我的页面中,我有“userid”和“password”字段,通过使用这些字段,我将访问我的邮件并抓取我的收件箱内容并将其显示在我的页面中。和“密码”字段,通过使用这些字段,我将访问我的邮件并获取我的收件箱内容并将其显示在我的页面中。
我单独使用 javascript 完成了上述操作。但是当我单击登录按钮时,我的页面 () 的 URL 更改为我被抓取的 URL (.)。 . .) 我被抓伤了。但是我在不更改网址的情况下取消了详细信息。
curl 抓取网页(PHP获取远程网页内容的代码(fopen,)的相关知识和一些Code实例)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-01-08 21:13
你想知道PHP获取远程网页内容的代码相关内容吗(fopen、curl已经测试过了)?在本文中,我将为您讲解远程网页的相关知识和一些代码示例。欢迎阅读和指正。我们先来关注一下:fopen、curl,一起来学习吧。
1、fopen 的使用
复制代码代码如下:
复制代码代码如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但他们中的一些人仍然有这个警告信息。距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php的默认user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
复制代码代码如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。 查看全部
curl 抓取网页(PHP获取远程网页内容的代码(fopen,)的相关知识和一些Code实例)
你想知道PHP获取远程网页内容的代码相关内容吗(fopen、curl已经测试过了)?在本文中,我将为您讲解远程网页的相关知识和一些代码示例。欢迎阅读和指正。我们先来关注一下:fopen、curl,一起来学习吧。
1、fopen 的使用
复制代码代码如下:
复制代码代码如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但他们中的一些人仍然有这个警告信息。距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php的默认user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
复制代码代码如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
curl 抓取网页(curl模拟登陆过程中get到的技能以及了解到知识 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 271 次浏览 • 2022-01-08 10:19
)
我今天使用 curl 进行了模拟登录。我以前从未接触过curl,我也不知道。简单说一下我在模拟登录过程中获得的技能和知识:
1、CURL:curl是一个使用URL语法开发的开源传输工具,相当于一个模拟浏览器。可以通过post/get、上传下载文件、操作cookies、传递代理等方式获取想要的页面信息。服务器(代理服务器是浏览器和Web服务器之间的中转站,相当于一个缓冲池)向服务器发送请求等,支持FTP、FTPS、TELNET等各种文件传输协议。起初只能在命令行中使用,现在也支持 PHP,并且拥有强大的函数库,函数库很多,可以支持不同的功能。在采集页面信息之前,我使用了file_get_contents,采集整个页面,然后使用正则匹配得到想要的内容。一些只有登录或验证才能获取的信息,是无法获取的。到达的。
curl发送url请求的步骤为:curl初始化--->设置具体参数信息--->执行curl并获取返回结果--->关闭curl session
下面是使用curl模拟登录获取用户信息的过程:
function login_post($url, $cookie, $post){
$curl = curl_init($url);//初始化
curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);//要提交的信息
//var_dump(http_build_query($post));exit;//打印要post的信息
$data = curl_exec($curl);//执行命令
curl_close($curl);//关闭URL请求
}
function get_content($url, $cookie) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);//需要获取信息的页面
//curl_setopt($ch, CURLOPT_HEADER, 1);//不输出头部
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//设置将获取到的信息输出在浏览器上
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
//设置post数据
$post = array(
"uname" => "xxxxxxxx",
"passwd" => "xxxxxx",
……
);//这里要传输的数据很重要,决定了能否成功登陆页面,生成cookie文件
//其实只要post的数据正确,一般都能生成cookie文件,之后就很简单了。
//登录地址
$url = "URL";
$cookie = dirname(__FILE__) . '/cookie.txt'; // 设置cookie保存路径
$url2 = "URL"; //登录后要获取信息的页面
login_post($url, $cookie, $post);// 模拟登录
$content = get_content($url2, $cookie);//获取登录页的信息
echo $content.'';//匹配页面信息
$preg = '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i';
$bool = preg_match($preg,$content,$time);
echo '注册时间:'.$time[0];
2、php抓取页面信息有以下几种方式
(1)file_get_contents($url) 会抓取整个页面,打印返回的结果就是整个页面
(2)file($url)会抓取整个页面,打印返回的结果是一个数组(分页的结果),然后implode之后打印就是整个页面
(3)fopen() 应该和fread() 和fclose() 一起使用来抓取整个页面并在处理后打印整个页面
3、cookies的原理
cookie 是浏览器自动生成的一个小文件,用于在服务器响应客户端请求时,通过在 HTTP 响应头中添加特殊指令(创建 cookie 对象)来保存用户信息和状态。只有当客户端发送请求或浏览器本身具有创建 cookie 的能力时才会创建 cookie。Cookies包括会话cookies(存储在内存中,一旦关闭浏览器就自动销毁,不能被多个窗口共享)和持久cookies(存储在硬盘中,直到过期时间才销毁,可以被多个窗口共享)同一浏览器的窗口)。浏览器发送请求时,会在客户端寻找对应范围的cookie文件。如果有,它将cookie放入http请求头中并发送给服务器,服务器将响应相应的内容。cookie的内容主要包括:名称、值、过期时间、路径和域(这两个构成cookie的作用域)
4、session的原理
Session是存储在服务器端的信息,哈希表的结构。当浏览器向服务器发送请求时,如果请求头中有一个sessionid(一般在一个cookie中,并通过请求头与cookie一起发送),那么服务器会在请求头上找到这个id对应的内容服务器根据 sessionid。请求信息决定是否向客户端返回相关信息。如果没有,则会为用户创建一个会话(只有在服务器端调用HttpServletRequest.getSession(true)语句时才会创建,用户可以决定是否创建文件或数据表等。 ),并将 sessionid 返回给浏览器并保存。在浏览器端传递 sessionid 的方法有很多:
(1)将sessionid保存在cookie中,发送请求时直接附加到请求头中
(2) 通过url重写发送sessionid,即在url后面加上sessionid
步:
1) 在服务器端 php.ini 配置文件中设置: session.use_cookies=0 && session.use_only_cookie=0 session.use_trans_sid=1
2)如果你使用的是nginx,在nginx的根目录下创建一个index.php,内容如下:
然后
一、使用php命令直接解析dos下的php文件(如:php index.php),此时会出现问题:
如果你的lnmp服务器的php版本为5.7或更高,执行上面的php index.php会报错,这里我报告core dumped;
二、浏览器通过ip访问这个文件也会报错
如果你在浏览器设置中禁用了cookies,那么每次刷新页面时,浏览器都会向服务器发送一个请求,但是由于我们在php.ini中设置了sessionid不传递cookies,那么在这个请求的header中有没有 sessionid 信息传输到服务器。服务端收到请求,没有找到sessionid后,会自动生成一个session文件,然后用sessionid响应客户端。这时候客户端禁用cookies后就无法使用了。cookie是用来保存这个sessionid的,所以当你再次刷新页面时,sessionid不能传给服务器进行比对,服务器会生成一个新的session文件,每次刷新一个。
所以客户端不能设置禁用cookies,只需要设置php.ini,且php版本最好5.6及以下,即可成功看到url中的sessionid
那么这一步完成后,如果继续深入调查,就会发现问题,比如:
session_url.php:
一个:PHP:
上述结果的差异可能与nginx的行为有关,没有进一步探索,但是在没有添加ip地址的情况下,如果是同域的文件,一般可以自动显示在url上. 添加会话ID
(3)以隐藏表单的形式传递sessionid,服务器会自动修改表单
可以在表单中设置一个隐藏输入将session_id()传给后端,也可以在后端直接获取session_id(),可以直接使用也可以保存到文件中,这样在访问同一个服务器时,不同的可以在域中使用相同的sessionid;将会话信息保存到数据库中,然后另一台服务器也可以使用文件中的sessionid来访问本服务器中的会话信息,实现会话共享
5、session和cookie的区别
session是保存在服务器端的,sessionid默认是通过cookie保存的,所以如果客户端禁用cookie并且服务器端没有设置trans-sid选项,那么sessionid就没有地方保存了,那么会话将不会被使用;sessionid 一般保存在session cookie中,所以关闭浏览器时找不到sessionid;安全性高,可存储用户名、密码等重要信息。
cookie存储在浏览器端,安全性不如session,可以存储一些不太重要的信息。
6、服务器比对验证码的机制
服务器端请求客户端时,首先随机生成一串字符串并保存在会话中,然后将字符串写入图片发送给浏览器显示。比较存储在 .
7、hosts文件和dns域名解析系统
hosts文件中保存了ip和域名的对应关系。用户访问域名时,需要找到该域名对应的IP。首先,客户端会向本地域名服务器发送请求,本地域名服务器会在自己的映射表中查找该域名对应的IP。如果是,则将ip返回给客户端,如果不是,则继续向根域名服务器发送请求,根域名服务器会在自己中查找所请求域的主域名服务器的ip映射表,然后返回给本地dns,本地dns向主域名服务器发送请求。如果主域名服务器没有找到映射关系,则返回下一级域名服务器ip,直到找到正确的ip,
查看全部
curl 抓取网页(curl模拟登陆过程中get到的技能以及了解到知识
)
我今天使用 curl 进行了模拟登录。我以前从未接触过curl,我也不知道。简单说一下我在模拟登录过程中获得的技能和知识:
1、CURL:curl是一个使用URL语法开发的开源传输工具,相当于一个模拟浏览器。可以通过post/get、上传下载文件、操作cookies、传递代理等方式获取想要的页面信息。服务器(代理服务器是浏览器和Web服务器之间的中转站,相当于一个缓冲池)向服务器发送请求等,支持FTP、FTPS、TELNET等各种文件传输协议。起初只能在命令行中使用,现在也支持 PHP,并且拥有强大的函数库,函数库很多,可以支持不同的功能。在采集页面信息之前,我使用了file_get_contents,采集整个页面,然后使用正则匹配得到想要的内容。一些只有登录或验证才能获取的信息,是无法获取的。到达的。
curl发送url请求的步骤为:curl初始化--->设置具体参数信息--->执行curl并获取返回结果--->关闭curl session
下面是使用curl模拟登录获取用户信息的过程:
function login_post($url, $cookie, $post){
$curl = curl_init($url);//初始化
curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);//要提交的信息
//var_dump(http_build_query($post));exit;//打印要post的信息
$data = curl_exec($curl);//执行命令
curl_close($curl);//关闭URL请求
}
function get_content($url, $cookie) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);//需要获取信息的页面
//curl_setopt($ch, CURLOPT_HEADER, 1);//不输出头部
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//设置将获取到的信息输出在浏览器上
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
//设置post数据
$post = array(
"uname" => "xxxxxxxx",
"passwd" => "xxxxxx",
……
);//这里要传输的数据很重要,决定了能否成功登陆页面,生成cookie文件
//其实只要post的数据正确,一般都能生成cookie文件,之后就很简单了。
//登录地址
$url = "URL";
$cookie = dirname(__FILE__) . '/cookie.txt'; // 设置cookie保存路径
$url2 = "URL"; //登录后要获取信息的页面
login_post($url, $cookie, $post);// 模拟登录
$content = get_content($url2, $cookie);//获取登录页的信息
echo $content.'';//匹配页面信息
$preg = '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/i';
$bool = preg_match($preg,$content,$time);
echo '注册时间:'.$time[0];
2、php抓取页面信息有以下几种方式
(1)file_get_contents($url) 会抓取整个页面,打印返回的结果就是整个页面
(2)file($url)会抓取整个页面,打印返回的结果是一个数组(分页的结果),然后implode之后打印就是整个页面
(3)fopen() 应该和fread() 和fclose() 一起使用来抓取整个页面并在处理后打印整个页面
3、cookies的原理
cookie 是浏览器自动生成的一个小文件,用于在服务器响应客户端请求时,通过在 HTTP 响应头中添加特殊指令(创建 cookie 对象)来保存用户信息和状态。只有当客户端发送请求或浏览器本身具有创建 cookie 的能力时才会创建 cookie。Cookies包括会话cookies(存储在内存中,一旦关闭浏览器就自动销毁,不能被多个窗口共享)和持久cookies(存储在硬盘中,直到过期时间才销毁,可以被多个窗口共享)同一浏览器的窗口)。浏览器发送请求时,会在客户端寻找对应范围的cookie文件。如果有,它将cookie放入http请求头中并发送给服务器,服务器将响应相应的内容。cookie的内容主要包括:名称、值、过期时间、路径和域(这两个构成cookie的作用域)
4、session的原理
Session是存储在服务器端的信息,哈希表的结构。当浏览器向服务器发送请求时,如果请求头中有一个sessionid(一般在一个cookie中,并通过请求头与cookie一起发送),那么服务器会在请求头上找到这个id对应的内容服务器根据 sessionid。请求信息决定是否向客户端返回相关信息。如果没有,则会为用户创建一个会话(只有在服务器端调用HttpServletRequest.getSession(true)语句时才会创建,用户可以决定是否创建文件或数据表等。 ),并将 sessionid 返回给浏览器并保存。在浏览器端传递 sessionid 的方法有很多:
(1)将sessionid保存在cookie中,发送请求时直接附加到请求头中
(2) 通过url重写发送sessionid,即在url后面加上sessionid
步:
1) 在服务器端 php.ini 配置文件中设置: session.use_cookies=0 && session.use_only_cookie=0 session.use_trans_sid=1
2)如果你使用的是nginx,在nginx的根目录下创建一个index.php,内容如下:
然后
一、使用php命令直接解析dos下的php文件(如:php index.php),此时会出现问题:
如果你的lnmp服务器的php版本为5.7或更高,执行上面的php index.php会报错,这里我报告core dumped;
二、浏览器通过ip访问这个文件也会报错
如果你在浏览器设置中禁用了cookies,那么每次刷新页面时,浏览器都会向服务器发送一个请求,但是由于我们在php.ini中设置了sessionid不传递cookies,那么在这个请求的header中有没有 sessionid 信息传输到服务器。服务端收到请求,没有找到sessionid后,会自动生成一个session文件,然后用sessionid响应客户端。这时候客户端禁用cookies后就无法使用了。cookie是用来保存这个sessionid的,所以当你再次刷新页面时,sessionid不能传给服务器进行比对,服务器会生成一个新的session文件,每次刷新一个。
所以客户端不能设置禁用cookies,只需要设置php.ini,且php版本最好5.6及以下,即可成功看到url中的sessionid
那么这一步完成后,如果继续深入调查,就会发现问题,比如:
session_url.php:
一个:PHP:
上述结果的差异可能与nginx的行为有关,没有进一步探索,但是在没有添加ip地址的情况下,如果是同域的文件,一般可以自动显示在url上. 添加会话ID
(3)以隐藏表单的形式传递sessionid,服务器会自动修改表单
可以在表单中设置一个隐藏输入将session_id()传给后端,也可以在后端直接获取session_id(),可以直接使用也可以保存到文件中,这样在访问同一个服务器时,不同的可以在域中使用相同的sessionid;将会话信息保存到数据库中,然后另一台服务器也可以使用文件中的sessionid来访问本服务器中的会话信息,实现会话共享
5、session和cookie的区别
session是保存在服务器端的,sessionid默认是通过cookie保存的,所以如果客户端禁用cookie并且服务器端没有设置trans-sid选项,那么sessionid就没有地方保存了,那么会话将不会被使用;sessionid 一般保存在session cookie中,所以关闭浏览器时找不到sessionid;安全性高,可存储用户名、密码等重要信息。
cookie存储在浏览器端,安全性不如session,可以存储一些不太重要的信息。
6、服务器比对验证码的机制
服务器端请求客户端时,首先随机生成一串字符串并保存在会话中,然后将字符串写入图片发送给浏览器显示。比较存储在 .
7、hosts文件和dns域名解析系统
hosts文件中保存了ip和域名的对应关系。用户访问域名时,需要找到该域名对应的IP。首先,客户端会向本地域名服务器发送请求,本地域名服务器会在自己的映射表中查找该域名对应的IP。如果是,则将ip返回给客户端,如果不是,则继续向根域名服务器发送请求,根域名服务器会在自己中查找所请求域的主域名服务器的ip映射表,然后返回给本地dns,本地dns向主域名服务器发送请求。如果主域名服务器没有找到映射关系,则返回下一级域名服务器ip,直到找到正确的ip,
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-01-08 10:19
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL和proxy代理
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。这时候,你可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k27@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载的百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
curl 和 wget 抓取实例
抓取网页主要有两种方式:url URL和proxy代理
1、 url URL方法爬取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网络速度/数据包丢失/服务器停机等原因,网页暂时无法成功下载。这时候,你可能需要尝试多次发送连接来请求服务器的响应;如果多次仍然没有响应,则可以确认服务器有问题
(1)curl 尝试连接多次
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注意:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在这个最大时间内只允许重试一次(一般同--retry-delay)
(2)wget 尝试连接多次
wget -t 10 -w 60 -T 30 -O baidu_html2
注意:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间,超过超时则连接不成功,下次连接继续尝试
附:curl可以判断服务器是否响应。也可以通过一段时间内下载获得的字节数来间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注:-y表示测试网速的时间;-Y 表示-y期间下载的字节数(字节为单位);-m 表示允许请求连接的最长时间,如果超过连接会自动断开连接并放弃连接
2、代理代理捕获
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两位知名的自由球员网站:
(全球数十个国家免费代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费的代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间是 8080 冒号“:”隔开形成套接字)
(1)curl通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(常用端口有80、8080、8086、8888、3128等,默认80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过21< @k27@ >107.21.252:8080 下载百度首页,最后218.107.21.252:8080 通过下载的百度主页 curl 到本地(curl 不是直接连接百度服务器下载主页,而是通过中介代理)
(2)wget通过代理爬取百度首页
wget 通过代理下载,和 curl 不一样。需要先设置代理服务器的http_proxy=ip:port。
以ubuntu为例,在当前用户目录(cd ~),新建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(perl爬虫怎么定制池?抓取网页数据的好处?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 50 次浏览 • 2022-01-01 02:08
curl抓取网页数据本身是不限制带宽的,不过你需要有相应的网络才行。比如你需要在多个网站(站点)上抓取网页数据,要进行分段分别抓取,使用不同网络线路。所以你还是需要做一个这样的爬虫,抓取一个网页,统计各个网站的抓取流量的分布。没有必要买curl。当然了,我相信你应该是需要抓取小说这样的网站,你需要做的是先获取他们的页码,然后使用这个页码构建数据库,然后存储到本地的数据库或者别的地方。
看你的抓取量,以及是否需要抓取的网站是否支持分段封ip这种方式。
你需要的可能是一个请求均衡器(通常一个ip下只能够抓取同一个站点的30页),从而实现采集多个网站的数据,这样有个好处就是服务器只需要存储一份就可以实现多种网站的抓取,采用分段抓取的方式是没有必要的,可以直接用其他的免费的分段抓取软件。另外,如果是站点比较多(几百个)就要定制ip池,而如果抓取站点比较少的话可以不需要定制ip池。具体定制ip池可以到别的回答看看有没有相关的回答。你可以参考:perl爬虫怎么定制ip池?。
当你站点比较多,很难封ip的时候,就可以将数据采集点扩大一下,把采集点设定在别的网站再分别抓取。例如同一时间你只在原来站点抓取一个网站,后续会抓取其他几个站点的数据,这时如果要在原来的网站抓取第二个站点,你不需要从别的网站抓取对应的抓取点。可以先从别的网站采集抓取点,再分别抓取新网站的抓取点。 查看全部
curl 抓取网页(perl爬虫怎么定制池?抓取网页数据的好处?)
curl抓取网页数据本身是不限制带宽的,不过你需要有相应的网络才行。比如你需要在多个网站(站点)上抓取网页数据,要进行分段分别抓取,使用不同网络线路。所以你还是需要做一个这样的爬虫,抓取一个网页,统计各个网站的抓取流量的分布。没有必要买curl。当然了,我相信你应该是需要抓取小说这样的网站,你需要做的是先获取他们的页码,然后使用这个页码构建数据库,然后存储到本地的数据库或者别的地方。
看你的抓取量,以及是否需要抓取的网站是否支持分段封ip这种方式。
你需要的可能是一个请求均衡器(通常一个ip下只能够抓取同一个站点的30页),从而实现采集多个网站的数据,这样有个好处就是服务器只需要存储一份就可以实现多种网站的抓取,采用分段抓取的方式是没有必要的,可以直接用其他的免费的分段抓取软件。另外,如果是站点比较多(几百个)就要定制ip池,而如果抓取站点比较少的话可以不需要定制ip池。具体定制ip池可以到别的回答看看有没有相关的回答。你可以参考:perl爬虫怎么定制ip池?。
当你站点比较多,很难封ip的时候,就可以将数据采集点扩大一下,把采集点设定在别的网站再分别抓取。例如同一时间你只在原来站点抓取一个网站,后续会抓取其他几个站点的数据,这时如果要在原来的网站抓取第二个站点,你不需要从别的网站抓取对应的抓取点。可以先从别的网站采集抓取点,再分别抓取新网站的抓取点。
curl 抓取网页(几种最常见的快速让百度收录的办法是什么?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 33 次浏览 • 2021-12-24 23:10
有时候你会发现在做seo优化的时候,会出现网址没有被百度收录的情况。在这种情况下,我们应该怎么做?是被动等待自然收录,还是主动出击?接下来,我将介绍一些最常见的快速获取百度收录的方法。
百度收录提交
输入你要收录的网址,点击提交按钮:这个收录只是请求百度记录一条记录。虽然记录了,但是需要取,收录的网站很多,需要一定的时间,一般15天以内收录是正常的周期(如果你想快速接收收录或秒接收,请使用以下收录方法),如果15天内没有收录,说明你的网站有问题搜索引擎不喜欢的。例如:域名已被百度处罚或加入黑名单;或域下网站的内容属于非法;或域名网站过度优化等问题;
百度自动推送方法
复制网站html代码之间的代码,通常在html代码之上。
百度主动推送(实时)
首先打开百度站长工具:选择主动推送(实时)选项卡,点击“修改访问密钥”更新您的密钥ID。
此功能适合懂开发的人使用。具体步骤可以理解:先注册一个百度站长账号,然后添加网站,选择主动推送的域名,更新key ID,然后根据生成的界面和适合你的推送方式自己的网站,百度站长一共提供了四种推送案例,分别是:curl push、post push、php push、ruby push,最常用的就是“post push”,不明白的你不需要使用这种方法,使用自动推送方法即可;
云优化软件提交
属于数据包反馈请求的一种方式。打开云优化软件-SEO工具-新展速递收录。这个方法是收录最快的方法之一,主要是通过向百度请求数据包,让第一个抢到收录网站;
自助外链记录
直观的理解是在各大公共媒体留下网站的URL文本链,这样百度收录更新这些公共媒体网站时,会通过URL匹配来识别,如果有没有收录 @收录,更新后的网站会列在百度收录库中,方便百度及时发现和抓取操作;操作方法如下:
打开SEO外链自发布地址:输入您要收录或更新的网址,点击“开始自动添加外链”按钮。
优质外链指导
前往知名公众媒体,留下你的网站url超链接;由于知名论坛、博客、空间等经常被百度抓取,当抓取对方时发现新链接,百度会先更新链接。例如:站长站、A5、搜外等更新频率较高的公众媒体;
优质朋友链指导
好友链是衡量网站质量的一个因素。例如: 马云说:云优化是我的投资,所以很多人会认为云优化是马云投资的。如果云优化说:马云投资我们,估计大部分人都不信。如果马云说自己投资了云优,而云优也发布了马云投资的公告,这已经成为事实。所以,优质的友情链首先是双向的,是提升口碑的关键。因为优质的朋友链更有利于搜索引擎抓取和评分;很多站长主要是因为缺乏优质的朋友链,这是无法实现即时采集的根本原因。
饼干记录
Cookie 由服务器生成并发送到 User-Agent(通常是浏览器)。浏览器将Cookie的key/value保存在某个目录下的文本文件中,经常可以记录用户登录、访问记录等,我们可以模拟修改Cookie,让百度更好的抓取URL记录。
如果网站优化到位,网站外的优质外链和好友链接是排名外观和排名提升的基础,也是最重要的。由于搜索引擎中的URL是海量数据,我想在最短的时间内选择准确的结果。一件很困难的事情,那么搜索引擎必须依靠URL评级+索引来解决搜索效率和准确结果;所谓索引就是百度有很多排名更新服务器,排名是每周更新后建立的一个索引,所以:搜索引擎检索到的结果实际上是预先索引的排名结果。
我是乐健 欢迎大家关注乐见网,分享创业知识,只讲大家可以上手的创业赚钱方法,分享最接地气的SEO赚钱实用干货。专注自媒体创业、营销、变现等干货分享。关注我,了解更多。 查看全部
curl 抓取网页(几种最常见的快速让百度收录的办法是什么?)
有时候你会发现在做seo优化的时候,会出现网址没有被百度收录的情况。在这种情况下,我们应该怎么做?是被动等待自然收录,还是主动出击?接下来,我将介绍一些最常见的快速获取百度收录的方法。
百度收录提交
输入你要收录的网址,点击提交按钮:这个收录只是请求百度记录一条记录。虽然记录了,但是需要取,收录的网站很多,需要一定的时间,一般15天以内收录是正常的周期(如果你想快速接收收录或秒接收,请使用以下收录方法),如果15天内没有收录,说明你的网站有问题搜索引擎不喜欢的。例如:域名已被百度处罚或加入黑名单;或域下网站的内容属于非法;或域名网站过度优化等问题;
百度自动推送方法
复制网站html代码之间的代码,通常在html代码之上。
百度主动推送(实时)
首先打开百度站长工具:选择主动推送(实时)选项卡,点击“修改访问密钥”更新您的密钥ID。
此功能适合懂开发的人使用。具体步骤可以理解:先注册一个百度站长账号,然后添加网站,选择主动推送的域名,更新key ID,然后根据生成的界面和适合你的推送方式自己的网站,百度站长一共提供了四种推送案例,分别是:curl push、post push、php push、ruby push,最常用的就是“post push”,不明白的你不需要使用这种方法,使用自动推送方法即可;
云优化软件提交
属于数据包反馈请求的一种方式。打开云优化软件-SEO工具-新展速递收录。这个方法是收录最快的方法之一,主要是通过向百度请求数据包,让第一个抢到收录网站;
自助外链记录
直观的理解是在各大公共媒体留下网站的URL文本链,这样百度收录更新这些公共媒体网站时,会通过URL匹配来识别,如果有没有收录 @收录,更新后的网站会列在百度收录库中,方便百度及时发现和抓取操作;操作方法如下:
打开SEO外链自发布地址:输入您要收录或更新的网址,点击“开始自动添加外链”按钮。
优质外链指导
前往知名公众媒体,留下你的网站url超链接;由于知名论坛、博客、空间等经常被百度抓取,当抓取对方时发现新链接,百度会先更新链接。例如:站长站、A5、搜外等更新频率较高的公众媒体;
优质朋友链指导
好友链是衡量网站质量的一个因素。例如: 马云说:云优化是我的投资,所以很多人会认为云优化是马云投资的。如果云优化说:马云投资我们,估计大部分人都不信。如果马云说自己投资了云优,而云优也发布了马云投资的公告,这已经成为事实。所以,优质的友情链首先是双向的,是提升口碑的关键。因为优质的朋友链更有利于搜索引擎抓取和评分;很多站长主要是因为缺乏优质的朋友链,这是无法实现即时采集的根本原因。
饼干记录
Cookie 由服务器生成并发送到 User-Agent(通常是浏览器)。浏览器将Cookie的key/value保存在某个目录下的文本文件中,经常可以记录用户登录、访问记录等,我们可以模拟修改Cookie,让百度更好的抓取URL记录。
如果网站优化到位,网站外的优质外链和好友链接是排名外观和排名提升的基础,也是最重要的。由于搜索引擎中的URL是海量数据,我想在最短的时间内选择准确的结果。一件很困难的事情,那么搜索引擎必须依靠URL评级+索引来解决搜索效率和准确结果;所谓索引就是百度有很多排名更新服务器,排名是每周更新后建立的一个索引,所以:搜索引擎检索到的结果实际上是预先索引的排名结果。
我是乐健 欢迎大家关注乐见网,分享创业知识,只讲大家可以上手的创业赚钱方法,分享最接地气的SEO赚钱实用干货。专注自媒体创业、营销、变现等干货分享。关注我,了解更多。
curl 抓取网页(图画大师们是怎么画的?(一张图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-12-20 21:01
curl抓取网页抓取本地文件把返回的ajax页面代码渲染到页面上展示jsp页面
这些都是可以的,我们公司用的是采用了servlet的web应用。它只是相当于java的webform。它有很多不同的方法接口,像java的类,你说你要做个面包车,那么首先我得画个封面。封面怎么画呢?你得参考下作者那么多图画大师们是怎么画的?当然作者把它封装了起来,你只需要继承它,然后你可以使用它写出非常酷炫的程序。主要是说,得做专业技术人员,这些东西都是表象,要通过实践最后找到你想要的东西。
应该是ajax的结果如果是有ajax的话那么jsp
网页和ajax的对应关系,
ajax有相应的实现,结果就是一张图。
目前写html的方法有以下:1,ajax的数据保存在服务器上保存,你通过jsp调用的ajax获取数据(jsp是orm框架)2,jsp将数据显示在页面上,
你的要求的情况是有一些问题,我想你不用担心服务器的问题。在这两种方法都适用的情况下。肯定是选择ajax。接下来我分两种情况去说明。当服务器访问完网页之后进行调用ajax,然后返回json数据,这样的话是可以显示的;当服务器向服务器发送你的ajax请求的时候,服务器返回的json数据返回给服务器,然后服务器解析出来,再去发送给你。
但这样就会有几个问题,第一,你首先网页是直接显示在服务器上的,这就涉及到ajax的时效性问题。如果后端的ajax跟数据库的ajax有关联,服务器返回json数据的时候,数据库上就会有记录,后端调用的时候就可能发生冲突。第二,如果你的ajax有相应的注册和认证机制。相当于你要告诉服务器你是看哪个页面,服务器如果没有注册或者没有认证,那么服务器返回给你的数据可能就会有冲突。
当然还有很多问题。综上所述,我个人觉得这样的方法也不是非常好,就是非常麻烦。说明:上面说的ajax方法是假设你已经处理好相应的请求以及数据库操作。如果是非要浏览器端进行发送ajax请求的话,那么http请求报文将会涉及到如下几个字段:请求方法(get/post),地址,参数,时间戳,带时间戳的那个表示请求响应的重试次数,带时间戳的那个表示响应重试的时间,域名。 查看全部
curl 抓取网页(图画大师们是怎么画的?(一张图))
curl抓取网页抓取本地文件把返回的ajax页面代码渲染到页面上展示jsp页面
这些都是可以的,我们公司用的是采用了servlet的web应用。它只是相当于java的webform。它有很多不同的方法接口,像java的类,你说你要做个面包车,那么首先我得画个封面。封面怎么画呢?你得参考下作者那么多图画大师们是怎么画的?当然作者把它封装了起来,你只需要继承它,然后你可以使用它写出非常酷炫的程序。主要是说,得做专业技术人员,这些东西都是表象,要通过实践最后找到你想要的东西。
应该是ajax的结果如果是有ajax的话那么jsp
网页和ajax的对应关系,
ajax有相应的实现,结果就是一张图。
目前写html的方法有以下:1,ajax的数据保存在服务器上保存,你通过jsp调用的ajax获取数据(jsp是orm框架)2,jsp将数据显示在页面上,
你的要求的情况是有一些问题,我想你不用担心服务器的问题。在这两种方法都适用的情况下。肯定是选择ajax。接下来我分两种情况去说明。当服务器访问完网页之后进行调用ajax,然后返回json数据,这样的话是可以显示的;当服务器向服务器发送你的ajax请求的时候,服务器返回的json数据返回给服务器,然后服务器解析出来,再去发送给你。
但这样就会有几个问题,第一,你首先网页是直接显示在服务器上的,这就涉及到ajax的时效性问题。如果后端的ajax跟数据库的ajax有关联,服务器返回json数据的时候,数据库上就会有记录,后端调用的时候就可能发生冲突。第二,如果你的ajax有相应的注册和认证机制。相当于你要告诉服务器你是看哪个页面,服务器如果没有注册或者没有认证,那么服务器返回给你的数据可能就会有冲突。
当然还有很多问题。综上所述,我个人觉得这样的方法也不是非常好,就是非常麻烦。说明:上面说的ajax方法是假设你已经处理好相应的请求以及数据库操作。如果是非要浏览器端进行发送ajax请求的话,那么http请求报文将会涉及到如下几个字段:请求方法(get/post),地址,参数,时间戳,带时间戳的那个表示请求响应的重试次数,带时间戳的那个表示响应重试的时间,域名。
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
网站优化 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2021-12-18 13:11
curl 和 wget 抓取示例
爬取网页,主要有两种方式:url和proxy
1、 url 网址抓取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页的内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网速/数据丢失/服务器停机等原因,网页暂时无法成功下载。这时候可能需要多次尝试发送连接,请求服务器的响应;如果多次都没有反应,则可以确认服务器有问题
(1)curl 多次尝试连接
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在最长时间内只允许重试一次(一般与--retry-delay相同)
(2)wget 多次尝试连接
wget -t 10 -w 60 -T 30 -O baidu_html2
注:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间。如果超过超时,则连接不成功,下次继续尝试连接
附:curl判断服务器是否有响应,也可以通过一段时间内下载的字节数间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注意:-y代表测试网速的时间;-Y 表示 -y 期间下载的字节数(以字节为单位);-m 表示允许请求连接的最长时间,超过则自动断开连接并中止连接
2、 代理爬取
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两个著名的自由球员网站:
(全球数十个国家的自由代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间用冒号“:”隔开,形成一个socket)
(1)curl 通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(端口通常为80、8080、8086、8888、3128等,默认为80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过218.107.21.252:8080 下载百度主页,最后218.107.21.252:8080 发送下载的百度homepage to curl 到本地(curl不是直接连接百度服务器下载首页,而是通过中介代理)
(2)wget 通过代理获取百度主页
wget通过代理下载,和curl不一样。需要先设置代理服务器的http_proxy=ip:port
以ubuntu为例,在当前用户目录(cd~)下创建wget配置文件(.wgetrc),进入代理配置: 查看全部
curl 抓取网页(curl和wget抓取实例抓取网页(1)_html文件)
curl 和 wget 抓取示例
爬取网页,主要有两种方式:url和proxy
1、 url 网址抓取
(1)curl下载百度首页内容,保存在baidu_html文件中
curl -o baidu_html
(2)wget下载百度首页的内容,保存在baidu_html文件中
wget -O baidu_html2
有时,由于网速/数据丢失/服务器停机等原因,网页暂时无法成功下载。这时候可能需要多次尝试发送连接,请求服务器的响应;如果多次都没有反应,则可以确认服务器有问题
(1)curl 多次尝试连接
curl --retry 10 --retry-delay 60 --retry-max-time 60 -o baidu_html
注:--retry 表示重试次数;--retry-delay 表示两次重试之间的时间间隔(以秒为单位);--retry-max-time 表示在最长时间内只允许重试一次(一般与--retry-delay相同)
(2)wget 多次尝试连接
wget -t 10 -w 60 -T 30 -O baidu_html2
注:-t(--tries)表示重试次数;-w 表示两次重试之间的时间间隔(以秒为单位);-T 表示连接超时时间。如果超过超时,则连接不成功,下次继续尝试连接
附:curl判断服务器是否有响应,也可以通过一段时间内下载的字节数间接判断。命令格式如下:
curl -y 60 -Y 1 -m 60 -o baidu_html
注意:-y代表测试网速的时间;-Y 表示 -y 期间下载的字节数(以字节为单位);-m 表示允许请求连接的最长时间,超过则自动断开连接并中止连接
2、 代理爬取
代理下载是通过连接中间服务器间接下载url网页的过程,而不是url直接连接网站服务器下载
两个著名的自由球员网站:
(全球数十个国家的自由代理,每日更新)
(通过设置端口类型、代理类型、国家名称过滤)
在网站中选择国内免费代理服务器为例介绍代理代理爬取网页:
218.107.21.252:8080(ip为218.107.21.252;端口为8080,中间用冒号“:”隔开,形成一个socket)
(1)curl 通过代理爬取百度首页
curl -x 218.107.21.252:8080 -o aaaaa(端口通常为80、8080、8086、8888、3128等,默认为80)
注意:-x表示代理服务器(ip:port),即curl先连接代理服务器218.107.21.252:8080,然后通过218.107.21.252:8080 下载百度主页,最后218.107.21.252:8080 发送下载的百度homepage to curl 到本地(curl不是直接连接百度服务器下载首页,而是通过中介代理)
(2)wget 通过代理获取百度主页
wget通过代理下载,和curl不一样。需要先设置代理服务器的http_proxy=ip:port
以ubuntu为例,在当前用户目录(cd~)下创建wget配置文件(.wgetrc),进入代理配置:
curl 抓取网页(方法二楼上的发的方法方法四中绕过服务器验证)
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2021-12-14 13:04
curl抓取网页信息中的ip地址和密码等信息,加密算法为rsa,算法公开,是一种基于密码学的散列算法,该算法不泄露给任何第三方可加密数据,同时破解难度低,在网络上可以被安全的上传和下载网页。想提供ip地址和密码的源代码给我,谢谢。
方法二
楼上的发的方法方法四中的方法都是一种绕过服务器验证的方法,也就是让上传被人破解。楼上的方法实际用起来都很简单,如果不会编程。
直接给远程服务器提供一个手机号,远程服务器将这个手机号地址告诉你。
这个有人破解了,编程完全无压力,挺牛的。onlyattentionfromthefollowingiphoneapplicationthatonceasecretkeyauthenticatesyourapplicationtoapple’shttpswebapplication,servestheprotectionofapple’sinternetaccesstohttpsinallwebapplicationsparts。
fromfollowingarticle:segmentfault。me-applebloghttpsallowsyoutoremoteaccess,andnottofollowtherequestavailablehere。webkitappsarerespectedbyalistingofcapabilitiesincludingsslversionsandtlsintotheweb。
sslversionsareusedtoallowaccesstothefullssl(fsa)provider,thisapplicationprovidethefollowingaccessinformation:useragent,protocolprotocol,useragentid,username,endpointlookup,notavailableauthenticators,url,notavailabledebuggers,throughput,memory。 查看全部
curl 抓取网页(方法二楼上的发的方法方法四中绕过服务器验证)
curl抓取网页信息中的ip地址和密码等信息,加密算法为rsa,算法公开,是一种基于密码学的散列算法,该算法不泄露给任何第三方可加密数据,同时破解难度低,在网络上可以被安全的上传和下载网页。想提供ip地址和密码的源代码给我,谢谢。
方法二
楼上的发的方法方法四中的方法都是一种绕过服务器验证的方法,也就是让上传被人破解。楼上的方法实际用起来都很简单,如果不会编程。
直接给远程服务器提供一个手机号,远程服务器将这个手机号地址告诉你。
这个有人破解了,编程完全无压力,挺牛的。onlyattentionfromthefollowingiphoneapplicationthatonceasecretkeyauthenticatesyourapplicationtoapple’shttpswebapplication,servestheprotectionofapple’sinternetaccesstohttpsinallwebapplicationsparts。
fromfollowingarticle:segmentfault。me-applebloghttpsallowsyoutoremoteaccess,andnottofollowtherequestavailablehere。webkitappsarerespectedbyalistingofcapabilitiesincludingsslversionsandtlsintotheweb。
sslversionsareusedtoallowaccesstothefullssl(fsa)provider,thisapplicationprovidethefollowingaccessinformation:useragent,protocolprotocol,useragentid,username,endpointlookup,notavailableauthenticators,url,notavailabledebuggers,throughput,memory。
curl 抓取网页( 抓ajax异步内容的页面和抓普通的异步区别不大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-12-10 13:00
抓ajax异步内容的页面和抓普通的异步区别不大
)
PHP抓取Ajax异步内容示例
更新时间:2014年9月9日17:51:21投稿:whsnow
Ajax异步内容页面和普通页面之间几乎没有区别。AJAX只是一个异步HTTP请求。您可以参考以下示例
事实上,Ajax异步内容页面和普通页面之间几乎没有区别。Ajax只是发出一个异步HTTP请求。只需使用类似于firebug的工具来查找请求的后端服务URL和值传递参数,然后获取URL传递参数
使用firebug的网络工具
如果抓取页面,内容中未显示的数据就是一堆JS代码
代码
$cookie_file=tempnam('./temp','cookie');
$ch = curl_init();
$url1 = "http://www.cdut.edu.cn/default.html";
curl_setopt($ch,CURLOPT_URL,$url1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); //加入gzip解析
//设置连接结束后保存cookie信息的文件
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content=curl_exec($ch);
curl_close($ch);
$ch3 = curl_init();
$url3 = "http://www.cdut.edu.cn/xww/dwr ... 3B%3B
$curlPost = "callCount=1&page=/xww/type/1000020118.html&httpSessionId=12A9B726E6A2D4D3B09DE7952B2F282C&scriptSessionId=295315B4B4141B09DA888D3A3ADB8FAA658&c0-scriptName=portalAjax&c0-methodName=getNewsXml&c0-id=0&c0-param0=string:10000201&c0-param1=string:1000020118&c0-param2=string:news_&c0-param3=number:5969&c0-param4=number:1&c0-param5=null:null&c0-param6=null:null&batchId=0";
curl_setopt($ch3,CURLOPT_URL,$url3);
curl_setopt($ch3,CURLOPT_POST,1);
curl_setopt($ch3,CURLOPT_POSTFIELDS,$curlPost);
//设置连接结束后保存cookie信息的文件
curl_setopt($ch3,CURLOPT_COOKIEFILE,$cookie_file);
$content1=curl_exec($ch3);
curl_close($ch3); 查看全部
curl 抓取网页(
抓ajax异步内容的页面和抓普通的异步区别不大
)
PHP抓取Ajax异步内容示例
更新时间:2014年9月9日17:51:21投稿:whsnow
Ajax异步内容页面和普通页面之间几乎没有区别。AJAX只是一个异步HTTP请求。您可以参考以下示例
事实上,Ajax异步内容页面和普通页面之间几乎没有区别。Ajax只是发出一个异步HTTP请求。只需使用类似于firebug的工具来查找请求的后端服务URL和值传递参数,然后获取URL传递参数
使用firebug的网络工具

如果抓取页面,内容中未显示的数据就是一堆JS代码

代码
$cookie_file=tempnam('./temp','cookie');
$ch = curl_init();
$url1 = "http://www.cdut.edu.cn/default.html";
curl_setopt($ch,CURLOPT_URL,$url1);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_ENCODING ,'gzip'); //加入gzip解析
//设置连接结束后保存cookie信息的文件
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
$content=curl_exec($ch);
curl_close($ch);
$ch3 = curl_init();
$url3 = "http://www.cdut.edu.cn/xww/dwr ... 3B%3B
$curlPost = "callCount=1&page=/xww/type/1000020118.html&httpSessionId=12A9B726E6A2D4D3B09DE7952B2F282C&scriptSessionId=295315B4B4141B09DA888D3A3ADB8FAA658&c0-scriptName=portalAjax&c0-methodName=getNewsXml&c0-id=0&c0-param0=string:10000201&c0-param1=string:1000020118&c0-param2=string:news_&c0-param3=number:5969&c0-param4=number:1&c0-param5=null:null&c0-param6=null:null&batchId=0";
curl_setopt($ch3,CURLOPT_URL,$url3);
curl_setopt($ch3,CURLOPT_POST,1);
curl_setopt($ch3,CURLOPT_POSTFIELDS,$curlPost);
//设置连接结束后保存cookie信息的文件
curl_setopt($ch3,CURLOPT_COOKIEFILE,$cookie_file);
$content1=curl_exec($ch3);
curl_close($ch3);
curl 抓取网页(PHPCURL与file_get_contents函数应用例子分析方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-19 12:07
PHP CURL 和 file_get_contents 函数都可以获取远程服务器上的文件并保存在本地,但在性能上却不是一个级别。这里通过一个例子给大家介绍PHP CURL或者file_get_contents获取页面标题的代码和效率两者的稳定性问题,需要的朋友可以参考
PHP CURL 和 file_get_contents 函数都可以检索远程服务器上的文件并将其保存在本地,但它们在性能方面并不处于同一水平。我先介绍PHP CURL 或file_get_contents 函数应用实例,然后给大家简单介绍一下它们之间的一些小区别。
推荐的获取CURL的方法
使用 file_get_contents
看一下 file_get_contents 性能
1)fopen/file_get_contents 每次请求远程URL中的数据时,都会重新进行DNS查询,不会缓存DNS信息。但是 CURL 会自动缓存 DNS 信息。请求同域名下的网页或图片,只需要进行一次DNS查询。这大大减少了 DNS 查询的数量。所以CURL的性能要比fopen/file_get_contents好很多。
2)fopen/file_get_contents 请求 HTTP 时使用 http_fopen_wrapper,不会保持存活。但是卷曲可以。这样,当多次请求多个链接时,curl 的效率会更高。(应该可以设置标题)
3)fopen/file_get_contents 函数会受到php.ini 文件中allow_url_open 选项配置的影响。如果配置关闭,则该功能无效。并且 curl 不受此配置的影响。
4)curl 可以模拟多种请求,如:POST 数据、表单提交等,用户可以根据自己的需求自定义请求。而 fopen/file_get_contents 只能使用 get 来获取数据。
5)fopen/file_get_contents 无法正确下载二进制文件
6)fopen/file_get_contents 无法正确处理 ssl 请求
7)curl 可以利用多线程
8) 使用file_get_contents时,如果网络有问题,这里很容易积累一些进程
9)如果要进行连续连接,请多次请求多个页面。那么 file_get_contents 就会出错。获取的内容也可能是错误的。所以在做类似采集的事情的时候,肯定有问题。使用curl进行采集爬取,如果你还不相信,我们再做一个测试。
curl和file_get_contents PHP源码性能对比如下:
第182话
测试访问
file_get_contents 速度:4.2404510975 秒
卷曲速度:2.8205530643 秒
curl 比 file_get_contents 快约 30%,最重要的是,服务器负载更低。
ps:php函数file_get_contents和curl的效率和稳定性问题
我习惯使用方便快捷的file_get_contents函数来抓取其他家网站的内容,但总是遇到获取失败的问题。虽然按照手册中的例子设置了超时时间,但大多数时候并不好用:
$config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));
'timeout' => 5//这个超时时间不稳定,经常难以使用。这时候如果查看服务器的连接池,会发现一堆类似下面的错误,让你头疼:
file_get_contents(***): 无法打开流...
作为最后的手段,我安装了 curl 库并编写了一个函数替换:
function curl_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 $r = curl_exec($ch); curl_close($ch); return $r; }
这样,除了真正的网络问题外,没有其他问题了。
这是别人做过的 curl 和 file_get_contents 的测试:
File_get_contents 需要几秒钟才能获取:
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl 使用的时间:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
是不是差距很大?哈哈,根据我的经验,这两个工具不仅速度不同,稳定性也不同。推荐对网络数据抓取稳定性要求高的朋友使用上面的curl_file_get_contents函数,不仅稳定快速,还能假冒浏览器欺骗目标地址!
以上是PHP CURL或者file_get_contents获取页面标题和详细内容的代码,两者的效率稳定性。更多详情请关注其他相关html中文网站文章! 查看全部
curl 抓取网页(PHPCURL与file_get_contents函数应用例子分析方法)
PHP CURL 和 file_get_contents 函数都可以获取远程服务器上的文件并保存在本地,但在性能上却不是一个级别。这里通过一个例子给大家介绍PHP CURL或者file_get_contents获取页面标题的代码和效率两者的稳定性问题,需要的朋友可以参考
PHP CURL 和 file_get_contents 函数都可以检索远程服务器上的文件并将其保存在本地,但它们在性能方面并不处于同一水平。我先介绍PHP CURL 或file_get_contents 函数应用实例,然后给大家简单介绍一下它们之间的一些小区别。
推荐的获取CURL的方法
使用 file_get_contents
看一下 file_get_contents 性能
1)fopen/file_get_contents 每次请求远程URL中的数据时,都会重新进行DNS查询,不会缓存DNS信息。但是 CURL 会自动缓存 DNS 信息。请求同域名下的网页或图片,只需要进行一次DNS查询。这大大减少了 DNS 查询的数量。所以CURL的性能要比fopen/file_get_contents好很多。
2)fopen/file_get_contents 请求 HTTP 时使用 http_fopen_wrapper,不会保持存活。但是卷曲可以。这样,当多次请求多个链接时,curl 的效率会更高。(应该可以设置标题)
3)fopen/file_get_contents 函数会受到php.ini 文件中allow_url_open 选项配置的影响。如果配置关闭,则该功能无效。并且 curl 不受此配置的影响。
4)curl 可以模拟多种请求,如:POST 数据、表单提交等,用户可以根据自己的需求自定义请求。而 fopen/file_get_contents 只能使用 get 来获取数据。
5)fopen/file_get_contents 无法正确下载二进制文件
6)fopen/file_get_contents 无法正确处理 ssl 请求
7)curl 可以利用多线程
8) 使用file_get_contents时,如果网络有问题,这里很容易积累一些进程
9)如果要进行连续连接,请多次请求多个页面。那么 file_get_contents 就会出错。获取的内容也可能是错误的。所以在做类似采集的事情的时候,肯定有问题。使用curl进行采集爬取,如果你还不相信,我们再做一个测试。
curl和file_get_contents PHP源码性能对比如下:
第182话
测试访问
file_get_contents 速度:4.2404510975 秒
卷曲速度:2.8205530643 秒
curl 比 file_get_contents 快约 30%,最重要的是,服务器负载更低。
ps:php函数file_get_contents和curl的效率和稳定性问题
我习惯使用方便快捷的file_get_contents函数来抓取其他家网站的内容,但总是遇到获取失败的问题。虽然按照手册中的例子设置了超时时间,但大多数时候并不好用:
$config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));
'timeout' => 5//这个超时时间不稳定,经常难以使用。这时候如果查看服务器的连接池,会发现一堆类似下面的错误,让你头疼:
file_get_contents(***): 无法打开流...
作为最后的手段,我安装了 curl 库并编写了一个函数替换:
function curl_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 $r = curl_exec($ch); curl_close($ch); return $r; }
这样,除了真正的网络问题外,没有其他问题了。
这是别人做过的 curl 和 file_get_contents 的测试:
File_get_contents 需要几秒钟才能获取:
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl 使用的时间:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
是不是差距很大?哈哈,根据我的经验,这两个工具不仅速度不同,稳定性也不同。推荐对网络数据抓取稳定性要求高的朋友使用上面的curl_file_get_contents函数,不仅稳定快速,还能假冒浏览器欺骗目标地址!
以上是PHP CURL或者file_get_contents获取页面标题和详细内容的代码,两者的效率稳定性。更多详情请关注其他相关html中文网站文章!
curl 抓取网页(进程在堆栈执行,的考虑因素有哪些?-curl)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-18 19:02
curl抓取网页html代码。进程在堆栈执行,实际是n个线程共同ping。tcp(传输协议)n个进程围绕着对称到非对称的关系,多一个线程就是多一个进程,所以可以用ping来判断进程数目。另外http(网络)也有个https协议(http/s)可以通过tcp(传输协议)传输数据。ping目前主要用来抓http页面,看不同的连接人数。一个上午ping上百次的话,可以猜测该ping应该没人在线。
建议:首先有关tcp方面的问题,可以百度“简单tcp协议”。至于网络方面的问题,可以百度“常见网络协议”、“常见网络方式”。另外,cpu同时执行多个线程,也是为了多任务执行。多线程性能通常是非对称互斥的,意味着cpu是独占使用资源的。
线程竞争资源是因为处理程序和执行进程内同名且并发,所以不同线程要执行不同的任务来完成同一个目标。另外,在处理程序中,进程是调度器来管理执行顺序的,而非某个线程自身。在虚拟地址空间中,同名且并发同样编译器可以让不同进程相互直接访问,对于不同进程之间。
1.线程的竞争是因为cpu设计的考虑因素,使得处理程序与执行进程内同名且并发会产生竞争(使用uthreading等方式减少竞争),这样可以利用调度器来排序在同一时刻只有一个执行的进程(线程),这样有利于避免发生重复运行造成cpu分配不均匀。2.机器处理时间和执行时间不一样,产生的有效时间差异。3.运行时的频率与检查指令和并发时间的差距。4.cpu支持,但是那是针对有效核数大于4的处理器来说的。 查看全部
curl 抓取网页(进程在堆栈执行,的考虑因素有哪些?-curl)
curl抓取网页html代码。进程在堆栈执行,实际是n个线程共同ping。tcp(传输协议)n个进程围绕着对称到非对称的关系,多一个线程就是多一个进程,所以可以用ping来判断进程数目。另外http(网络)也有个https协议(http/s)可以通过tcp(传输协议)传输数据。ping目前主要用来抓http页面,看不同的连接人数。一个上午ping上百次的话,可以猜测该ping应该没人在线。
建议:首先有关tcp方面的问题,可以百度“简单tcp协议”。至于网络方面的问题,可以百度“常见网络协议”、“常见网络方式”。另外,cpu同时执行多个线程,也是为了多任务执行。多线程性能通常是非对称互斥的,意味着cpu是独占使用资源的。
线程竞争资源是因为处理程序和执行进程内同名且并发,所以不同线程要执行不同的任务来完成同一个目标。另外,在处理程序中,进程是调度器来管理执行顺序的,而非某个线程自身。在虚拟地址空间中,同名且并发同样编译器可以让不同进程相互直接访问,对于不同进程之间。
1.线程的竞争是因为cpu设计的考虑因素,使得处理程序与执行进程内同名且并发会产生竞争(使用uthreading等方式减少竞争),这样可以利用调度器来排序在同一时刻只有一个执行的进程(线程),这样有利于避免发生重复运行造成cpu分配不均匀。2.机器处理时间和执行时间不一样,产生的有效时间差异。3.运行时的频率与检查指令和并发时间的差距。4.cpu支持,但是那是针对有效核数大于4的处理器来说的。
curl 抓取网页(你的PHP代码并没有出错(1)_光明网(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2021-11-18 08:10
用curl单独取是可行的,但是如果取一系列相同类型的网站会报错,把它们放在数组中
在 $linkList 中,分别以此类推。
function getJobsHubuNotice()
{
$curl = curl_init('http://jobs.hubu.edu.cn/List.aspx?ArticleChannelId=81');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
//内容处理
$result = strip_tags($result,'');
$result = stristr($result, 'nbsp当前位置:');
$result = str_replace('nbsp当前位置:', '', $result);
$result = stristr($result, '当前1/2页',true);
$result = stristr($result, '通知公告');
$result = str_replace('通知公告', '', $result);
preg_match_all('/(? 通知公告', '', $result);
$result = stristr($result, '$(document).ready',true);
$result = trim($result);
$result = str_replace("\r\n", '
', $result);
$result = preg_replace('/(\){1,}/', '
', $result);
echo $result;
echo '
';
echo "退出makePage函数";
return $result;
}
}
首先使用getJobsHubuNotice()函数获取新闻的链接、标题、日期,然后使用makePage()函数获取内容
这是在 makePage 中打印链接的结果。用浏览器打开链接没有问题。
您的 PHP 代码中没有错误。初步怀疑是你请求时传递的URL有误,如下图:
在你的代码中
错误输出实际上在你得到的网页上
输出的内容。
再次更新,我想我知道是什么导致了您的请求中的错误:
您从网页获取的URL地址为:Detail.aspx?ArticleChannelId=81&ArticleId=2777,
& 中的字符是 & 的 HTML 实体字符,在你的
输出时(即在您的屏幕截图中),它显示 &,当您发出真实请求时,将使用以下内容:
您只需要恢复它或简单地将 URL 中的 & 替换为 & 然后再次请求它。
再次更新:
<p> 查看全部
curl 抓取网页(你的PHP代码并没有出错(1)_光明网(组图))
用curl单独取是可行的,但是如果取一系列相同类型的网站会报错,把它们放在数组中
在 $linkList 中,分别以此类推。
function getJobsHubuNotice()
{
$curl = curl_init('http://jobs.hubu.edu.cn/List.aspx?ArticleChannelId=81');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
//内容处理
$result = strip_tags($result,'');
$result = stristr($result, 'nbsp当前位置:');
$result = str_replace('nbsp当前位置:', '', $result);
$result = stristr($result, '当前1/2页',true);
$result = stristr($result, '通知公告');
$result = str_replace('通知公告', '', $result);
preg_match_all('/(? 通知公告', '', $result);
$result = stristr($result, '$(document).ready',true);
$result = trim($result);
$result = str_replace("\r\n", '
', $result);
$result = preg_replace('/(\){1,}/', '
', $result);
echo $result;
echo '
';
echo "退出makePage函数";
return $result;
}
}
首先使用getJobsHubuNotice()函数获取新闻的链接、标题、日期,然后使用makePage()函数获取内容
这是在 makePage 中打印链接的结果。用浏览器打开链接没有问题。
您的 PHP 代码中没有错误。初步怀疑是你请求时传递的URL有误,如下图:
在你的代码中
错误输出实际上在你得到的网页上
输出的内容。
再次更新,我想我知道是什么导致了您的请求中的错误:
您从网页获取的URL地址为:Detail.aspx?ArticleChannelId=81&ArticleId=2777,
& 中的字符是 & 的 HTML 实体字符,在你的
输出时(即在您的屏幕截图中),它显示 &,当您发出真实请求时,将使用以下内容:
您只需要恢复它或简单地将 URL 中的 & 替换为 & 然后再次请求它。
再次更新:
<p>
curl 抓取网页( 得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
网站优化 • 优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-11-12 14:21
得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
$thisurl = "http://www.zztuku.com";
$html = file_get_contents($thisurl );
print_r($http_response_header);
得到的结果是:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
方法三:使用stream_get_meta_data()函数
推荐指数:★★★
使用stream_get_meta_data()代码只需要三行:
$thisurl = "http://www.zztuku.com/";
$fp = fopen($thisurl, 'r');
print_r(stream_get_meta_data($fp));
得到的结果是:
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
[wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r+
[unread_bytes] => 1086
[seekable] =>
[uri] => http://www.zztuku.com/
[timed_out] =>
[blocked] => 1
[eof] =>
)
方法四:使用PHP的高级函数CURL()获取
推荐指数:★★★★
以上三种方法都可以获取通用的网页页眉信息。如果您想获取更详细的头信息,例如网页是否启用了 GZip 压缩。这时候就可以使用PHP的高级函数curl()来获取了。
使用 curl 获取 header 来检测 GZip 压缩
先贴代码:
输出结果如下:
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Length: 15189
Content-Type: text/html
Content-Encoding: gzip
Content-Location: http://www.zztuku.com/index.html
Last-Modified: Fri, 19 Jul 2013 03:52:28 GMT
Accept-Ranges: bytes
ETag: "0268633384ce1:5cb3"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 19 Jul 2013 09:27:21 GMT
可以看到使用curl获取的header信息有这一行:Content-Encoding:gzip,并且网页开启了GZip压缩。 查看全部
curl 抓取网页(
得到的结果为:方法三:使用stream_get_meta_data()函数推荐指数)
$thisurl = "http://www.zztuku.com";
$html = file_get_contents($thisurl );
print_r($http_response_header);
得到的结果是:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
方法三:使用stream_get_meta_data()函数
推荐指数:★★★
使用stream_get_meta_data()代码只需要三行:
$thisurl = "http://www.zztuku.com/";
$fp = fopen($thisurl, 'r');
print_r(stream_get_meta_data($fp));
得到的结果是:
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: max-age=86400
[2] => Content-Length: 76102
[3] => Content-Type: text/html
[4] => Content-Location: http://www.zztuku.com/index.html
[5] => Last-Modified: Fri, 19 Jul 2013 03:52:30 GMT
[6] => Accept-Ranges: bytes
[7] => ETag: "50bc48643384ce1:5cb3"
[8] => Server: Microsoft-IIS/6.0
[9] => X-Powered-By: ASP.NET
[10] => Date: Fri, 19 Jul 2013 09:06:41 GMT
[11] => Connection: close
)
[wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r+
[unread_bytes] => 1086
[seekable] =>
[uri] => http://www.zztuku.com/
[timed_out] =>
[blocked] => 1
[eof] =>
)
方法四:使用PHP的高级函数CURL()获取
推荐指数:★★★★
以上三种方法都可以获取通用的网页页眉信息。如果您想获取更详细的头信息,例如网页是否启用了 GZip 压缩。这时候就可以使用PHP的高级函数curl()来获取了。
使用 curl 获取 header 来检测 GZip 压缩
先贴代码:
输出结果如下:
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Length: 15189
Content-Type: text/html
Content-Encoding: gzip
Content-Location: http://www.zztuku.com/index.html
Last-Modified: Fri, 19 Jul 2013 03:52:28 GMT
Accept-Ranges: bytes
ETag: "0268633384ce1:5cb3"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 19 Jul 2013 09:27:21 GMT
可以看到使用curl获取的header信息有这一行:Content-Encoding:gzip,并且网页开启了GZip压缩。
curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2021-11-10 18:05
)
之前的一篇文章文章介绍了如何通过python爬取网页,见Python爬取中文网页,但很快发现这个方法对CSDN个人博客的爬取不起作用
. 很久以前就听说过curl的威力,所以今天就来试一试。
curl的功能非常强大。这里介绍一下curl的使用。你可以参考一下。其他问题请百度和谷歌。这里我们只使用最基本的--connect-timeout和-o。以本博客为例:
curl -s --connect-timeout 10 -o blog "http://blog.csdn.net/nevasun"
OK,当前目录下就会有一个博客文件了。当我们将其作为纯文本文件打开时,我们会发现以下信息:
访问:10598次
积分:610分
排名:第13159名
接下来,我们要做的就是从博客文件中提取访问量、积分、排名等信息。前几天刚学了awk,所以用awk试试吧。awk的介绍和学习请参考AWK学习总结和练习。下面的awk相关内容可以在里面找到。
awk 程序由一系列“模式-动作”语句组成:模式 {action}。
匹配模式可以是/(visit|points|ranking):.*/,匹配模式后需要取出当前行的值。由于号码长度不固定,不能使用定长号码。您可以使用 gsub() 将非数字字符替换为空字符,其余为数字。接下来是完整的awk代码。
awk 'BEGIN {FS="[]"; ORS="\t"} /(访问|积分|排名):.*/ \
{ if($3 == "访问:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "积分:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "排名:") {gsub(/[^0-9]+/, ""); print}}' blog
至此,我们已经能够抓取到需要的数据了,通过shell和python脚本,使用cron,可以让系统定时记录每天的访问情况。
Shell 脚本 account.sh:
Python 脚本 dbroutine.py:
#!/usr/bin/python
import os
import cPickle as pcl
import sys
from time import localtime
def load_record(db_file):
recordlist = [{}]
if os.path.exists(db_file):
readf = file(db_file)
try:
recordlist = pcl.load(readf)
except:
recordlist = [{}]
readf.close()
return recordlist
def dump_record(db_file, recordlist, total_access, score, rank):
writef = file(db_file, "wb")
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
recordlist.insert(0, day_record)
pcl.dump(recordlist, writef)
writef.close()
def print_record(recordlist, total_access, score, rank):
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
print day_record
for i in range(0, len(recordlist)):
print recordlist[i]
db_file = "blog_record.dat"
recordlist = [{}]
if len(sys.argv) != 5:
raise Exception
total_access = int(sys.argv[1])
score = int(sys.argv[2])
rank = int(sys.argv[3])
flag = int(sys.argv[4])
recordlist = load_record(db_file)
if flag != 0:
dump_record(db_file, recordlist, total_access, score, rank)
else:
print_record(recordlist, total_access, score, rank) 查看全部
curl 抓取网页(如何通过python抓取网页,见Python和python的功能很强大
)
之前的一篇文章文章介绍了如何通过python爬取网页,见Python爬取中文网页,但很快发现这个方法对CSDN个人博客的爬取不起作用

. 很久以前就听说过curl的威力,所以今天就来试一试。
curl的功能非常强大。这里介绍一下curl的使用。你可以参考一下。其他问题请百度和谷歌。这里我们只使用最基本的--connect-timeout和-o。以本博客为例:
curl -s --connect-timeout 10 -o blog "http://blog.csdn.net/nevasun"
OK,当前目录下就会有一个博客文件了。当我们将其作为纯文本文件打开时,我们会发现以下信息:
访问:10598次
积分:610分
排名:第13159名
接下来,我们要做的就是从博客文件中提取访问量、积分、排名等信息。前几天刚学了awk,所以用awk试试吧。awk的介绍和学习请参考AWK学习总结和练习。下面的awk相关内容可以在里面找到。
awk 程序由一系列“模式-动作”语句组成:模式 {action}。
匹配模式可以是/(visit|points|ranking):.*/,匹配模式后需要取出当前行的值。由于号码长度不固定,不能使用定长号码。您可以使用 gsub() 将非数字字符替换为空字符,其余为数字。接下来是完整的awk代码。
awk 'BEGIN {FS="[]"; ORS="\t"} /(访问|积分|排名):.*/ \
{ if($3 == "访问:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "积分:") {gsub(/[^0-9]+/, ""); print} \
else if($3 == "排名:") {gsub(/[^0-9]+/, ""); print}}' blog
至此,我们已经能够抓取到需要的数据了,通过shell和python脚本,使用cron,可以让系统定时记录每天的访问情况。
Shell 脚本 account.sh:
Python 脚本 dbroutine.py:
#!/usr/bin/python
import os
import cPickle as pcl
import sys
from time import localtime
def load_record(db_file):
recordlist = [{}]
if os.path.exists(db_file):
readf = file(db_file)
try:
recordlist = pcl.load(readf)
except:
recordlist = [{}]
readf.close()
return recordlist
def dump_record(db_file, recordlist, total_access, score, rank):
writef = file(db_file, "wb")
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
recordlist.insert(0, day_record)
pcl.dump(recordlist, writef)
writef.close()
def print_record(recordlist, total_access, score, rank):
if recordlist[0].has_key("total_access"):
day_count = total_access-recordlist[0]["total_access"]
else:
day_count = total_access
date = "%s.%s.%s" % \
(localtime().tm_year, localtime().tm_mon, localtime().tm_mday)
day_record = dict(date=date, day_access=day_count, \
total_access=total_access, score=score, rank=rank)
print day_record
for i in range(0, len(recordlist)):
print recordlist[i]
db_file = "blog_record.dat"
recordlist = [{}]
if len(sys.argv) != 5:
raise Exception
total_access = int(sys.argv[1])
score = int(sys.argv[2])
rank = int(sys.argv[3])
flag = int(sys.argv[4])
recordlist = load_record(db_file)
if flag != 0:
dump_record(db_file, recordlist, total_access, score, rank)
else:
print_record(recordlist, total_access, score, rank)