php可以抓取网页数据吗

php可以抓取网页数据吗

apachephp可以抓取网页数据吗?回答可以的。。

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-09-20 02:02 • 来自相关话题

  apachephp可以抓取网页数据吗?回答可以的。。
  php可以抓取网页数据吗?回答可以的。如果想借助php程序抓取网页的html代码,那么有很多选择,本文主要针对apache的php抓取项目进行介绍。apachephp抓取包括了apache对于get和post请求的封装,对于页面中存在html代码的请求还封装了gzip和encoding,所以这样做非常方便。
  
  最后通过apache的tomcat作为web容器,将抓取结果存储到localhost下,便于之后apache后端负责解析数据库数据,因此通常不需要编写后端代码。(php的后端代码一般在业务层。)web抓取php在apache的后端有:请求/响应的各种数据格式、请求/响应的各种参数格式、请求/响应的各种接口数据格式、请求/响应的各种返回格式等。
  当然要封装这些请求和响应格式需要使用apache的http库,本文只介绍apache的http库,其他请求响应库如何封装请自行google。apachehttp库封装。有一些php扩展可以直接访问请求、响应头和cookie。但是请求登录、form表单(无论get还是post)等各种请求头,因为涉及到数据库操作,php扩展一般无法访问。
  
  php提供了几个小扩展支持请求、响应头,通过此类扩展也可以实现一个简单的后端程序。一般把此类扩展都封装成了php扩展来用,如httpurlconnection、weburlconnection、apacheinfo、apacheseleno等。使用方法:#-*-coding:utf-8-*-importosimportsysimporturllibimporttimeimportwebbrowserasbrowserimportthreadingimportosimportsysimporturllib#指定定义访问的端口为8080#指定提交表单/cookie的参数个数,超过则使用默认值;input_cookie的path="/about.php",意思是指定请求/响应头的路径param=r'user[accept]|host[accept-language]=anonymous'param=r'temp'#提交表单/cookiecookie=r'temp=test'form=browser.open('about.php',8080)#param属性指定调用本php扩展对数据库、表单、session等进行操作的参数param=r'location'#指定请求/响应头的路径param=r'form'param=r'name'#指定请求/响应头的username和password。
  第一个参数字符集为utf-8,意思是php要处理的一切utf-8字符的数据,后面两个参数base64的默认值都是ascii,意思是所有字符都会被解码成ascii,我们使用base64解码之后,就是可以通过javascript直接获取数据。#当php遇到'anonymous'的字符时执行对应php扩展的post方法$param=r'anonymous='+param#要转换的字符为ascii格式。 查看全部

  apachephp可以抓取网页数据吗?回答可以的。。
  php可以抓取网页数据吗?回答可以的。如果想借助php程序抓取网页的html代码,那么有很多选择,本文主要针对apache的php抓取项目进行介绍。apachephp抓取包括了apache对于get和post请求的封装,对于页面中存在html代码的请求还封装了gzip和encoding,所以这样做非常方便。
  
  最后通过apache的tomcat作为web容器,将抓取结果存储到localhost下,便于之后apache后端负责解析数据库数据,因此通常不需要编写后端代码。(php的后端代码一般在业务层。)web抓取php在apache的后端有:请求/响应的各种数据格式、请求/响应的各种参数格式、请求/响应的各种接口数据格式、请求/响应的各种返回格式等。
  当然要封装这些请求和响应格式需要使用apache的http库,本文只介绍apache的http库,其他请求响应库如何封装请自行google。apachehttp库封装。有一些php扩展可以直接访问请求、响应头和cookie。但是请求登录、form表单(无论get还是post)等各种请求头,因为涉及到数据库操作,php扩展一般无法访问。
  
  php提供了几个小扩展支持请求、响应头,通过此类扩展也可以实现一个简单的后端程序。一般把此类扩展都封装成了php扩展来用,如httpurlconnection、weburlconnection、apacheinfo、apacheseleno等。使用方法:#-*-coding:utf-8-*-importosimportsysimporturllibimporttimeimportwebbrowserasbrowserimportthreadingimportosimportsysimporturllib#指定定义访问的端口为8080#指定提交表单/cookie的参数个数,超过则使用默认值;input_cookie的path="/about.php",意思是指定请求/响应头的路径param=r'user[accept]|host[accept-language]=anonymous'param=r'temp'#提交表单/cookiecookie=r'temp=test'form=browser.open('about.php',8080)#param属性指定调用本php扩展对数据库、表单、session等进行操作的参数param=r'location'#指定请求/响应头的路径param=r'form'param=r'name'#指定请求/响应头的username和password。
  第一个参数字符集为utf-8,意思是php要处理的一切utf-8字符的数据,后面两个参数base64的默认值都是ascii,意思是所有字符都会被解码成ascii,我们使用base64解码之后,就是可以通过javascript直接获取数据。#当php遇到'anonymous'的字符时执行对应php扩展的post方法$param=r'anonymous='+param#要转换的字符为ascii格式。

php可以抓取网页数据吗?-郭向立的回答

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-08-29 04:05 • 来自相关话题

  php可以抓取网页数据吗?-郭向立的回答
  php可以抓取网页数据吗?-郭向立的回答,谷歌爬虫抓取网页都是过滤javascript代码的,先抓取html中的网页元素,如title,content。然后用tagul将此html文档过滤了去除该javascript代码。headers和post数据都过滤掉。所以这个爬虫原理就是爬取到html文档,然后清除掉tagul过滤掉的javascript代码,然后返回给服务器一个html字符串。
  
  你可以考虑尝试用黑客手段给站点上锁。
  搜狐、凤凰等大站网站都被封锁了。搜狐首页,还限制上爬虫、留邮箱等...凤凰、谷歌试了都是静态页面,都上不去,什么情况呢?暂且不说,可能是php执行速度太慢了吧。so如果想用php爬虫抓取web站点,可以看看easyui模板引擎怎么抓取html,写一个引擎抓。也不要执行javascript脚本,抓取速度慢的一塌糊涂,人家没有必要搭理。
  
  php可以抓网页数据,谷歌学术上介绍了一些大牛的爬虫工具,详细说明了php在谷歌学术上有哪些应用。和php执行效率相比,无非是爬虫工具将数据转化为爬虫语言的形式返回给php函数,比如转化为php函数的形式。至于php抓取网页数据,其实只是抓取html或者javascript,并不直接获取该数据。这和php执行效率也没有关系。
  可以尝试用uwsgi服务来处理服务器端php页面的script代码,加上浏览器的缓存机制。如果在国内的话(国内抓取速度太慢),使用阿里云ecs做个php的webserver,自己写个php服务器抓取页面,然后将数据封装到json格式。用json格式请求java和php的页面,效率还是比较快的,速度也没快到突破天际的那种程度。百度云欢迎来钓鱼。 查看全部

  php可以抓取网页数据吗?-郭向立的回答
  php可以抓取网页数据吗?-郭向立的回答,谷歌爬虫抓取网页都是过滤javascript代码的,先抓取html中的网页元素,如title,content。然后用tagul将此html文档过滤了去除该javascript代码。headers和post数据都过滤掉。所以这个爬虫原理就是爬取到html文档,然后清除掉tagul过滤掉的javascript代码,然后返回给服务器一个html字符串。
  
  你可以考虑尝试用黑客手段给站点上锁。
  搜狐、凤凰等大站网站都被封锁了。搜狐首页,还限制上爬虫、留邮箱等...凤凰、谷歌试了都是静态页面,都上不去,什么情况呢?暂且不说,可能是php执行速度太慢了吧。so如果想用php爬虫抓取web站点,可以看看easyui模板引擎怎么抓取html,写一个引擎抓。也不要执行javascript脚本,抓取速度慢的一塌糊涂,人家没有必要搭理。
  
  php可以抓网页数据,谷歌学术上介绍了一些大牛的爬虫工具,详细说明了php在谷歌学术上有哪些应用。和php执行效率相比,无非是爬虫工具将数据转化为爬虫语言的形式返回给php函数,比如转化为php函数的形式。至于php抓取网页数据,其实只是抓取html或者javascript,并不直接获取该数据。这和php执行效率也没有关系。
  可以尝试用uwsgi服务来处理服务器端php页面的script代码,加上浏览器的缓存机制。如果在国内的话(国内抓取速度太慢),使用阿里云ecs做个php的webserver,自己写个php服务器抓取页面,然后将数据封装到json格式。用json格式请求java和php的页面,效率还是比较快的,速度也没快到突破天际的那种程度。百度云欢迎来钓鱼。

php可以抓取网页数据吗?可以解决我们php爬虫的一些问题

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-08-04 12:06 • 来自相关话题

  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题
  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题,我们知道,在php语言之上的数据库采用关系型数据库系统mysql(商业版本大约在3~6万元左右),如果需要php的原生数据库,我们可以使用php的web服务器来加载,这样就可以从php代码里面获取数据了。web服务器可以是本地的php服务器,也可以是云服务器,还可以通过git来实现。
  
  当然,一般用云服务器更加方便一些,因为一般php的写法和用法比较多,因此,云服务器可以设置不同的密码和访问权限来保证安全性。但是,我们在开发php爬虫时,数据是来自于客户端的请求,要从爬虫服务器获取数据,需要先获取客户端网络的tcp/ip地址和端口,还要在请求发送到服务器之前把自己的账号密码发送给服务器,而这些问题在本地的web服务器上实现还是比较麻烦,这时就可以借助抓包工具或者webrtc协议模块来对发送给爬虫服务器的请求进行解析,得到数据。
  抓包工具有很多,比如scapy,比如paramatic,我们可以把抓取到的数据,保存在本地,继续进行爬虫优化(本文只涉及爬虫优化问题)。那么,我们到底要从php代码里面获取数据,要用到什么工具呢?php官方的爬虫工具——requestslib,我们没有在php代码中直接开发爬虫代码,所以不能直接用,我们通过正则表达式匹配各种条件,然后用requestslib的正则表达式来解析requests连接返回的数据(如果没有网络或者设置过正则表达式,此过程可能需要selenium模拟浏览器登录,但是只需要抓包获取主动发出的请求即可获取)。
  
  如下图:下面是requestslibdemo,此过程中存在三个必要条件:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
  在上述网页数据中,用requestslib去提取文字的时候,大约需要三步:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
<p>下面一步一步来演示,正则表达式的匹配规则如下:letmap=newhashmap();for(leti=0;i 查看全部

  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题
  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题,我们知道,在php语言之上的数据库采用关系型数据库系统mysql(商业版本大约在3~6万元左右),如果需要php的原生数据库,我们可以使用php的web服务器来加载,这样就可以从php代码里面获取数据了。web服务器可以是本地的php服务器,也可以是云服务器,还可以通过git来实现。
  
  当然,一般用云服务器更加方便一些,因为一般php的写法和用法比较多,因此,云服务器可以设置不同的密码和访问权限来保证安全性。但是,我们在开发php爬虫时,数据是来自于客户端的请求,要从爬虫服务器获取数据,需要先获取客户端网络的tcp/ip地址和端口,还要在请求发送到服务器之前把自己的账号密码发送给服务器,而这些问题在本地的web服务器上实现还是比较麻烦,这时就可以借助抓包工具或者webrtc协议模块来对发送给爬虫服务器的请求进行解析,得到数据。
  抓包工具有很多,比如scapy,比如paramatic,我们可以把抓取到的数据,保存在本地,继续进行爬虫优化(本文只涉及爬虫优化问题)。那么,我们到底要从php代码里面获取数据,要用到什么工具呢?php官方的爬虫工具——requestslib,我们没有在php代码中直接开发爬虫代码,所以不能直接用,我们通过正则表达式匹配各种条件,然后用requestslib的正则表达式来解析requests连接返回的数据(如果没有网络或者设置过正则表达式,此过程可能需要selenium模拟浏览器登录,但是只需要抓包获取主动发出的请求即可获取)。
  
  如下图:下面是requestslibdemo,此过程中存在三个必要条件:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
  在上述网页数据中,用requestslib去提取文字的时候,大约需要三步:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
<p>下面一步一步来演示,正则表达式的匹配规则如下:letmap=newhashmap();for(leti=0;i

php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-08-01 21:06 • 来自相关话题

  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?
  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?另一位答主的答案很详细,只不过他给出的php抓取网页数据的代码有一个拼写错误。无论这位答主在回答中选择哪种方式,都不能很好地解决题主的问题。
  1、这个php代码用了标准拼写,例如mcdonald_from_complete_name,你的php代码可能拼写全是“mcdonald_from_complete_name”,导致网页url乱码,解决方法就是保证自己的写法在“mcdonald_from_complete_name”前不要有空格或非法字符,如果可能的话使用双引号。
  2、php缺少字符集支持,通常我们都是使用pcre字符集,它是微软定制的,而且使用的字符集是utf-8;关于movword类我不是很熟悉,更新一下这个网站,让答主更加了解这个php。但是微软并没有规定pcre字符集,因此我们无法读取外国网站的数据,我们通常使用网页特征码解析。
  
  以下是我补充的常用开源网站数据解析库apache常用开源解析库scrapy原理解析方法:
  1、curl
  2、ncapache环境,use‘/’并且加上/spf:nc="bbc15/"prefix=/xvf:nc="bbc15/"prefix="bbc"subwrite="%s%20%20"%4这句代码能够读取网页上的内容。也就是我给你的php代码,就是给你一个pcre字符集,你读取下表格中的内容。也有可能读取字符串然后再转换成数组,然后数组中存储一个叫做bbcname的字符串串,存储这个字符串就可以了。另外补充一下,网页上要是有多个字符串的话,php还需要再读取一次。
  3、使用二元字符集nul字符集来破解apache网页源码我们通常不会去获取数据的源码,apache其实加密了数据,和加密后的php代码匹配,就可以读取数据了。我选择apache,因为读取和解密的效率有保证。这里讲到二元字符集,也是因为一些网站会带有js,利用js脚本去读取网页,当然是数据结构无关,php可以解密js,还可以进行其他操作。
  
  php使用js脚本破解url到数据:libfuture-javascript无需解码,解析js:jquery不需要解码,解析js:domauthorizer已经解密:webpack以上都是通过反向代理的方式,读取一个数据包,反向生成js脚本,解密后生成json数据。最后,回到题主的问题。
  中国的网站,
  1、其他网站,例如贴吧、天涯等站点,可以找百度知道这种网站,答案就是一个json数据,解密后就是你要的数据。
  2、淘宝、天猫等,参考类似的问题。如果一定要采用爬虫,下面就给出一些网站。手机连接知乎。以下是分析的思路,网站才是关键。 查看全部

  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?
  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?另一位答主的答案很详细,只不过他给出的php抓取网页数据的代码有一个拼写错误。无论这位答主在回答中选择哪种方式,都不能很好地解决题主的问题。
  1、这个php代码用了标准拼写,例如mcdonald_from_complete_name,你的php代码可能拼写全是“mcdonald_from_complete_name”,导致网页url乱码,解决方法就是保证自己的写法在“mcdonald_from_complete_name”前不要有空格或非法字符,如果可能的话使用双引号。
  2、php缺少字符集支持,通常我们都是使用pcre字符集,它是微软定制的,而且使用的字符集是utf-8;关于movword类我不是很熟悉,更新一下这个网站,让答主更加了解这个php。但是微软并没有规定pcre字符集,因此我们无法读取外国网站的数据,我们通常使用网页特征码解析。
  
  以下是我补充的常用开源网站数据解析库apache常用开源解析库scrapy原理解析方法:
  1、curl
  2、ncapache环境,use‘/’并且加上/spf:nc="bbc15/"prefix=/xvf:nc="bbc15/"prefix="bbc"subwrite="%s%20%20"%4这句代码能够读取网页上的内容。也就是我给你的php代码,就是给你一个pcre字符集,你读取下表格中的内容。也有可能读取字符串然后再转换成数组,然后数组中存储一个叫做bbcname的字符串串,存储这个字符串就可以了。另外补充一下,网页上要是有多个字符串的话,php还需要再读取一次。
  3、使用二元字符集nul字符集来破解apache网页源码我们通常不会去获取数据的源码,apache其实加密了数据,和加密后的php代码匹配,就可以读取数据了。我选择apache,因为读取和解密的效率有保证。这里讲到二元字符集,也是因为一些网站会带有js,利用js脚本去读取网页,当然是数据结构无关,php可以解密js,还可以进行其他操作。
  
  php使用js脚本破解url到数据:libfuture-javascript无需解码,解析js:jquery不需要解码,解析js:domauthorizer已经解密:webpack以上都是通过反向代理的方式,读取一个数据包,反向生成js脚本,解密后生成json数据。最后,回到题主的问题。
  中国的网站,
  1、其他网站,例如贴吧、天涯等站点,可以找百度知道这种网站,答案就是一个json数据,解密后就是你要的数据。
  2、淘宝、天猫等,参考类似的问题。如果一定要采用爬虫,下面就给出一些网站。手机连接知乎。以下是分析的思路,网站才是关键。

php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?

网站优化优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-07-02 08:10 • 来自相关话题

  php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?
  php可以抓取网页数据吗?通过php抓取网页数据的操作过程及原理是什么?可以爬取自己网站上的,包括.cn和.com域名的网页数据,当然有些.com域名的网页是cookie加密解密处理后抓取下来的,当然也可以抓取服务器上的网页,但是没有.cn的权威,网页中被加密的乱七八糟网址也没办法拿来用来做网页爬虫获取数据。
  所以要注意判断哪些网址可以用php拿来爬取?例如,小云存储cloudmagic在linux中可以完全通过php抓取云存储的网页数据,而phpwind在windows上抓取,都有权限问题,用phpwind来抓取其实并不安全。php是不是就只能爬虫网页数据?能爬虫什么?就是php可以抓取网页数据,但是爬虫的数据格式通常和网页数据一致,爬虫和网页差异比较大,目前除了把爬虫应用于web服务,例如淘宝、天猫等电商网站,所有的php爬虫都没有被归为爬虫范畴。
  
  我们说php爬虫和网页数据一致有三个方面,一是数据格式一致,网页数据是json,爬虫数据也是json格式,这个是基本一致,二是抓取速度一致,例如小云存储cloudmagic的抓取速度几十毫秒,php记录的都是http协议下的网页数据,速度有区别,三是权限问题,其实也就是爬虫爬取到的数据内容对原服务器是否安全,在国内,如果爬虫没有权限或非法抓取,爬虫的爬取速度是无法达到标准,就有可能被禁止访问。
  php可以post获取数据吗?不能!!!数据传输要求是明文传输,如果有加密解密就不行了,post获取数据之后要发送给服务器,如果发送给服务器后服务器支持幂等性,并且存在密钥,那你的数据是安全的,但是如果不能保证幂等性,那你的数据就是不安全的,并且有很多ssl证书需要证明你是被授权的,所以存在一定风险。
  可以post,stream,punto对数据进行操作吗?可以。例如可以把数据保存在ntfs目录下,完全可以把数据发送给服务器,把ntfs目录下的数据,复制一份,通过phpstream操作把数据同步到另一台服务器,在另一台服务器上进行ntfs读写操作,并且和本地一致。可以推荐工具吗?爬虫工具还是有的,例如小云存储,爬虫容器greendao,爬虫ui部署到github,爬虫vps等,有一些大厂有支持这些php爬虫工具。(。
  
  1)推荐工具,因为其他工具比如集成环境没有这些爬虫工具好用。
  2)推荐工具,因为可以直接抓取数据,不需要再单独抓取很多中间网站,大大节省中间代理存储费用。
  3)php爬虫工具配置:
  4)推荐工具,这些工具用于phpweb开发、简单爬虫入门、爬虫联调等场景非常方便,相比花费了大量时间配置一套完整工具, 查看全部

  php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?
  php可以抓取网页数据吗?通过php抓取网页数据的操作过程及原理是什么?可以爬取自己网站上的,包括.cn和.com域名的网页数据,当然有些.com域名的网页是cookie加密解密处理后抓取下来的,当然也可以抓取服务器上的网页,但是没有.cn的权威,网页中被加密的乱七八糟网址也没办法拿来用来做网页爬虫获取数据。
  所以要注意判断哪些网址可以用php拿来爬取?例如,小云存储cloudmagic在linux中可以完全通过php抓取云存储的网页数据,而phpwind在windows上抓取,都有权限问题,用phpwind来抓取其实并不安全。php是不是就只能爬虫网页数据?能爬虫什么?就是php可以抓取网页数据,但是爬虫的数据格式通常和网页数据一致,爬虫和网页差异比较大,目前除了把爬虫应用于web服务,例如淘宝、天猫等电商网站,所有的php爬虫都没有被归为爬虫范畴。
  
  我们说php爬虫和网页数据一致有三个方面,一是数据格式一致,网页数据是json,爬虫数据也是json格式,这个是基本一致,二是抓取速度一致,例如小云存储cloudmagic的抓取速度几十毫秒,php记录的都是http协议下的网页数据,速度有区别,三是权限问题,其实也就是爬虫爬取到的数据内容对原服务器是否安全,在国内,如果爬虫没有权限或非法抓取,爬虫的爬取速度是无法达到标准,就有可能被禁止访问。
  php可以post获取数据吗?不能!!!数据传输要求是明文传输,如果有加密解密就不行了,post获取数据之后要发送给服务器,如果发送给服务器后服务器支持幂等性,并且存在密钥,那你的数据是安全的,但是如果不能保证幂等性,那你的数据就是不安全的,并且有很多ssl证书需要证明你是被授权的,所以存在一定风险。
  可以post,stream,punto对数据进行操作吗?可以。例如可以把数据保存在ntfs目录下,完全可以把数据发送给服务器,把ntfs目录下的数据,复制一份,通过phpstream操作把数据同步到另一台服务器,在另一台服务器上进行ntfs读写操作,并且和本地一致。可以推荐工具吗?爬虫工具还是有的,例如小云存储,爬虫容器greendao,爬虫ui部署到github,爬虫vps等,有一些大厂有支持这些php爬虫工具。(。
  
  1)推荐工具,因为其他工具比如集成环境没有这些爬虫工具好用。
  2)推荐工具,因为可以直接抓取数据,不需要再单独抓取很多中间网站,大大节省中间代理存储费用。
  3)php爬虫工具配置:
  4)推荐工具,这些工具用于phpweb开发、简单爬虫入门、爬虫联调等场景非常方便,相比花费了大量时间配置一套完整工具,

php可以抓取网页数据吗?get方法怎么抓取数据?

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-28 09:00 • 来自相关话题

  php可以抓取网页数据吗?get方法怎么抓取数据?
  php可以抓取网页数据吗?相信这个问题一定会让很多小伙伴心生疑问。当然,如果是想要从php获取数据信息还是能够实现的,只要通过某种php脚本语言来实现,例如php5.x版本,提供了多种方法可以支持php爬虫的实现,爬取网页上的内容,实现一些功能和特效。但是这其中依然有很多限制条件,在不同的php版本上也可能会出现一些问题。
  
  也就是说,这其中的缺陷依然让一些用户望而却步。在这里可以提供一个php抓取网页数据的脚本工具,工具所用的版本是php5.4版本,可以满足大部分开发需求。其中网站数据内容都是针对twitter、pinterest、blogger等国外网站。好了,就不再赘述,可以通过下面的链接直接获取:本教程不会对外开放,但我们的php版本不低于php5.4(至少3.5)。
  
  使用工具的php版本不低于php5.4(至少3.5)。这个工具和传统的抓取网页数据需要在浏览器下通过xhr文件请求的方式获取是不同的,我们没有添加浏览器的viewlistener,而是通过使用php自带的request::open_http_frame()方法来获取网页数据。其中php自带的request::open_http_frame()方法既包含get()方法也包含post()方法,还可以包含其他方法。
  利用这个方法我们就可以完成数据抓取了。get方法抓取数据的端口是8080,tcp连接会被request::close_http_frame禁止,那么get方法怎么抓取数据呢?有几种方法:通过调用select方法,用if指令判断数据是否会被显示;通过str_replace方法把部分单词拼写错误的数据替换,如果替换为正确的,则把错误的拼写忽略;通过str_replace的副作用把正确的拼写替换为错误的拼写;通过正则表达式匹配目标中的单词;利用urlparse方法自动加载生成的url文件;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用select方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用正则表达式抓取单词替换后的字符串;利用正则表达式抓取单词替换后的字符串;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用str_replace方法把部分单词拼写错误的数据替换;利用str_replace的副作用把正确的拼写替换为错误的拼写;利用正则表达式匹配目标中的单词;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用str_r。 查看全部

  php可以抓取网页数据吗?get方法怎么抓取数据?
  php可以抓取网页数据吗?相信这个问题一定会让很多小伙伴心生疑问。当然,如果是想要从php获取数据信息还是能够实现的,只要通过某种php脚本语言来实现,例如php5.x版本,提供了多种方法可以支持php爬虫的实现,爬取网页上的内容,实现一些功能和特效。但是这其中依然有很多限制条件,在不同的php版本上也可能会出现一些问题。
  
  也就是说,这其中的缺陷依然让一些用户望而却步。在这里可以提供一个php抓取网页数据的脚本工具,工具所用的版本是php5.4版本,可以满足大部分开发需求。其中网站数据内容都是针对twitter、pinterest、blogger等国外网站。好了,就不再赘述,可以通过下面的链接直接获取:本教程不会对外开放,但我们的php版本不低于php5.4(至少3.5)。
  
  使用工具的php版本不低于php5.4(至少3.5)。这个工具和传统的抓取网页数据需要在浏览器下通过xhr文件请求的方式获取是不同的,我们没有添加浏览器的viewlistener,而是通过使用php自带的request::open_http_frame()方法来获取网页数据。其中php自带的request::open_http_frame()方法既包含get()方法也包含post()方法,还可以包含其他方法。
  利用这个方法我们就可以完成数据抓取了。get方法抓取数据的端口是8080,tcp连接会被request::close_http_frame禁止,那么get方法怎么抓取数据呢?有几种方法:通过调用select方法,用if指令判断数据是否会被显示;通过str_replace方法把部分单词拼写错误的数据替换,如果替换为正确的,则把错误的拼写忽略;通过str_replace的副作用把正确的拼写替换为错误的拼写;通过正则表达式匹配目标中的单词;利用urlparse方法自动加载生成的url文件;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用select方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用正则表达式抓取单词替换后的字符串;利用正则表达式抓取单词替换后的字符串;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用str_replace方法把部分单词拼写错误的数据替换;利用str_replace的副作用把正确的拼写替换为错误的拼写;利用正则表达式匹配目标中的单词;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用str_r。

Python 获取网易云音乐热门评论

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-06-21 04:27 • 来自相关话题

  Python 获取网易云音乐热门评论
  (点击上方蓝字,快速关注我们)
  来源:lyrichu
  最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。
  那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,python 等,我个人比较喜欢使用python。因为python不仅有着内置的功能强大的网络库,还有诸多优秀的第三方库,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的方便。不夸张地说,使用不到10行python代码其实就可以写一个小小的爬虫,而使用其他的语言可以要多写很多代码,简洁易懂正是python的巨大的优势。
  好了废话不多说,进入今天的正题。最近几年网易云音乐火了起来,我自己就是网易云音乐的用户,用了几年了。以前用的是QQ音乐和酷狗,通过我自己的亲身经历来看,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论(郑重声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。经常一首歌曲下面会有一些被点赞众多的神评论。加上前些日子网易云音乐将精选用户评论搬上了地铁,网易云音乐的评论又火了一把。所以我想对网易云的评论进行分析,发现其中的规律,特别是分析一些热评具有什么共同的特点。带着这个目的,我开始了对网易云评论的抓取工作。
  python内置了两个网络库urllib和urllib2,但是这两个库使用起来不是特别方便,所以在这里我们使用一个广受好评的第三方库requests。使用requests只用很少的几行代码就可以实现设置代理,模拟登陆等比较复杂的爬虫工作。如果已经安装pip的话,直接使用pip install requests 即可安装。中文文档地址在此,大家有什么问题可以自行参考官方文档,上面会有非常详细的介绍。至于urllib和urllib2这两个库也是比较有用的,以后如果有机会我会再给大家介绍一下。
  在正式开始介绍爬虫之前,首先来说一下爬虫的基本工作原理,我们知道我们打开浏览器访问某个网址本质上是向服务器发送了一定的请求,服务器在收到我们的请求之后,会根据我们的请求返回数据,然后通过浏览器将这些数据解析好,呈现在我们的面前。如果我们使用代码的话,就要跳过浏览器的这个步骤,直接向服务器发送一定的数据,然后再取回服务器返回的数据,提取出我们想要的信息。但是问题是,有的时候服务器需要对我们发送的请求进行校验,如果它认为我们的请求是非法的,就会不返回数据,或者返回错误的数据。所以为了避免发生这种情况,我们有的时候需要把程序伪装成一个正常的用户,以便顺利得到服务器的回应。如何伪装呢?这就要看用户通过浏览器访问一个网页与我们通过程序访问一个网页之间的区别。通常来说,我们通过浏览器访问一个网页,除了发送访问的url之外,还会给服务发送额外的信息,比如headers(头部信息)等,这就相当于是请求的身份证明,服务器看到了这些数据,就会知道我们是通过正常的浏览器访问的,就会乖乖地返回数据给我们了。所以我们程序就得像浏览器一样,在发送请求的时候,带上这些标志着我们身份的信息,这样就能顺利拿到数据。有的时候,我们必须在登录状态下才能得到一些数据,所以我们必须要模拟登录。本质上来说,通过浏览器登录就是post一些表单信息给服务器(包括用户名,密码等信息),服务器校验之后我们就可以顺利登录了,利用程序也是一样,浏览器post什么数据,我们原样发送就可以了。关于模拟登录,我后面会专门介绍一下。当然事情有的时候也不会这么顺利,因为有些网站设置了反爬措施,比如如果访问过快,有时候会被封ip(典型的比如豆瓣)。这个时候我们还得要设置代理服务器,即变更我们的ip地址,如果一个ip被封了,就换另外一个ip,具体怎么做,这些话题以后慢慢再说。
  最后,再介绍一个我认为在写爬虫过程中非常有用的一个小技巧。如果你在使用火狐浏览器或者chrome的话,也许你会注意到有一个叫作开发者工具(chrome)或者web控制台(firefox)的地方。这个工具非常有用,因为利用它,我们可以清楚地看到在访问一个网站的过程中,浏览器到底发送了什么信息,服务器究竟返回了什么信息,这些信息是我们写爬虫的关键所在。下面你就会看到它的巨大用处。
  ————————正式开始的分割线——————————
  首先打开网易云音乐的网页版,随便选择一首歌曲打开它的网页,这里我以周杰伦的《晴天》为例。如下图1
  
  图1
  接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),如下图2
  
  图2
  然后这个时候我们需要点选网络,清除所有的信息,然后点击重新发送(相当于是刷新浏览器),这样我们就可以直观看到浏览器发送了什么信息以及服务器回应了什么信息。如下图3
  
  图3
  刷新之后得到的数据如下图4所示:
  图4
  可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。如下图5所示:
  图5
  通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。注意图5中的请求网址一栏即是我们想要请求的网址,请求的方法有两种:get和post,还有一个需要重点关注的就是请求头,里面包含了user-Agent(客户端信息),refrence(从何处跳转过来)等多种信息,一般无论是get还是post方法我们都会把头部信息带上。头部信息如下图6所示:
  图6
  另外还需要注意的是:get请求一般就直接把请求的参数以?parameter1=value1&parameter2=value2 等这样的形式发送了,所以不需要带上额外的请求参数,而post请求则一般需要带上额外的参数,而不直接把参数放在url当中,所以有的时候我们还需要关注参数这一栏。经过仔细寻找,我们终于找到原来与评论相关的请求在 这个请求当中,如下图7所示:
  图7
  点开这个请求,我们发现它是一个post请求,请求的参数有两个,一个是params,还有一个是encSecKey,这两个参数的值非常的长,感觉应该像是加密过的。如下图8所示:
  
  图8
  服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),如下图9所示:(其实hotComments为热门评论,comments为评论数组)
  
  图9
  至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可,这个问题困扰了我一下午,我弄了很久也没有搞清楚这两个参数的加密方式,但是我发现了一个规律, 中 R_SO_4_后面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌比如A的这两个参数值传给B这首歌,那么对于相同的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得相应歌曲的第一页的评论,对于第二页,第三页等也是类似。但是遗憾的是,不同的页数参数是不同的,这种办法只能抓取有限的几页(当然抓取评论总数和热门评论已经足够了),如果要想抓取全部数据,就必须搞明白这两个参数值的加密方式。以为没有搞明白,昨天晚上我带着这个问题去知乎搜索了一下,居然真的被我找到了答案。在这个问题 下,@平胸小仙女 这位知友详细说明了如何破解这两个参数的加密过程,我研究了一下,发现还是有点小复杂的,按照他写的方法,我改动了一下,就成功得到了全部的评论。这里要对@平胸小仙女(个人主页 )表示感谢。如果大家对于破解参数加密有兴趣的话,可以去直接参考原帖,地址是:。
  到此为止,如何抓取网易云音乐的评论全部数据就全部讲完了。按照惯例,最后上代码,亲测有效:
  #!/usr/bin/env python2.7
  # -*- coding: utf-8 -*-
  # @Time : 2017/3/28 8:46
  # @Author : Lyrichu
  # @Email:
  # @File : NetCloud_spider3.py
  '''
  @Description:
  网易云音乐评论爬虫,可以完整爬取整个评论
  部分参考了@平胸小仙女的文章(地址:)
  post加密部分也给出了,可以参考原帖:
  作者:平胸小仙女
  来源:知乎
  '''
  from Crypto.Cipher import AES
  import base64
  import requests
  import json
  import codecs
  import time
  # 头部信息
  headers = {
  'Host':"",
  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  'Accept-Encoding':"gzip, deflate",
  'Content-Type':"application/x-www-form-urlencoded",
  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,27; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A80; _iuqxldmzr_=32; vjuids=c8ca7976。15a029d006a。0。51373751e63af8; vjlast=1486102528。1490172479。21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e。
  1。1。69。05。42; P_INFO=m@163。com|1489375076|1|study|00&99|null&null&null#hub&420100#10#0#0|155439&1|study_client|@163。com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg。ws。126。net%2Fe%2Fimg5。cache。netease。com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62。png。39x39。100。jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1。2。1549851014。1489469781; __utma=94650624。1549851014。
  1489469781。1490664577。1490672820。8; __utmc=94650624; __utmz=94650624。1490661822。6。2。utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624。23。10。1490672820",
  'Connection':"keep-alive",
  'Referer':''
  }
  # 设置代理服务器
  proxies= {
  'http:':'',
  'https:':''
  }
  # offset的取值为:(评论页数-1)*20,total第一页为true,其余页为false
  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数
  second_param = "010001"# 第二个参数
  # 第三个参数
  third_param = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
  # 第四个参数
  forth_param = "0CoJUm6Qyw8W8jud"
  # 获取参数
  def get_params(page): # page为传入页数
  iv = "60708"
  first_key = forth_param
  second_key = 16 * 'F'
  if(page == 1): # 如果为第一页
  first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'
  h_encText = AES_encrypt(first_param,first_key,iv)
  else:
  offset = str((page-1)*20)
  first_param = '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}' %(offset,'false')
  h_encText = AES_encrypt(first_param,first_key,iv)
  h_encText = AES_encrypt(h_encText,second_key,iv)
  returnh_encText
  # 获取 encSecKey
  def get_encSecKey():
  encSecKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"
  returnencSecKey
  # 解密过程
  def AES_encrypt(text,key,iv):
  pad = 16 - len(text) % 16
  text = text + pad *chr(pad)
  encryptor = AES.new(key,AES.MODE_CBC,iv)
  encrypt_text = encryptor.encrypt(text)
  encrypt_text = base64.b64encode(encrypt_text)
  returnencrypt_text
  # 获得评论json数据
  def get_json(url,params,encSecKey):
  data = {
  "params": params,
  "encSecKey": encSecKey
  }
  response = requests.post(url,headers=headers,data=data,proxies = proxies)
  returnresponse.content
  # 抓取热门评论,返回热评列表
  def get_hot_comments(url):
  hot_comments_list = []
  hot_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")
  params = get_params(1)# 第一页
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  hot_comments = json_dict['hotComments']# 热门评论
  print("共有%d条热门评论!" % len(hot_comments))
  foritem inhot_comments:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userID']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = userID + " " + nickname + " " + avatarUrl + " " + comment_time + " " + likedCount + " " + comment + u"\n"
  hot_comments_list.append(comment_info)
  returnhot_comments_list
  # 抓取某一首歌的全部评论
  def get_all_comments(url):
  all_comments_list = []# 存放所有评论
  all_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")# 头部信息
  params = get_params(1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  comments_num = int(json_dict['total'])
  if(comments_num % 20 == 0):
  page = comments_num / 20
  else:
  page = int(comments_num / 20) + 1
  print("共有%d页评论!" % page)
  foriinrange(page):# 逐页抓取
  params = get_params(i+1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  ifi == 0:
  print("共有%d条评论!" % comments_num)# 全部评论总数
  foritem injson_dict['comments']:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userId']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = unicode(userID) + u" " + nickname + u" " + avatarUrl + u" " + unicode(comment_time) + u" " + unicode(likedCount) + u" " + comment + u"\n"
  all_comments_list.append(comment_info)
  print("第%d页抓取完毕!" % (i+1))
  returnall_comments_list
  # 将评论写入文本文件
  def save_to_file(list,filename):
  with codecs.open(filename,'a',encoding='utf-8')asf:
  f.writelines(list)
  print("写入文件成功!")
  if__name__ == "__main__":
  start_time = time.time()# 开始时间
  url = ""
  filename = u"晴天.txt"
  all_comments_list = get_all_comments(url)
  save_to_file(all_comments_list,filename)
  end_time = time.time()#结束时间
  print("程序耗时%f秒." % (end_time - start_time))
  我利用上述代码跑了一下,抓了两首周杰伦的热门歌曲《晴天》(有130多万评论)和《告白气球》(有20多万评论),前者跑了大概有20多分钟,后者有6600多秒(也就是将近2个小时),截图如下:
  
  注意我是按照空格来分隔的,每一行分别有用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容 这些内容。我将这两个txt文件上传到百度云了,对数据感兴趣的同学可以直接下载进行文本分析,地址为:《晴天》(),《告白气球》(),或者自己跑一下代码抓取一下也是可以的(注意不要开太多线程给网易云的服务器太大压力哦~~中间有一段时间服务器返回数据特别慢,不知道是不是限制访问了,后来又好了)。我后面也许会自己去对评论数据进行可视化分析,敬请期待!
  看完本文有收获?请转发分享给更多人
  关注「Python开发者」,提升Python技能 查看全部

  Python 获取网易云音乐热门评论
  (点击上方蓝字,快速关注我们)
  来源:lyrichu
  最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。
  那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,python 等,我个人比较喜欢使用python。因为python不仅有着内置的功能强大的网络库,还有诸多优秀的第三方库,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的方便。不夸张地说,使用不到10行python代码其实就可以写一个小小的爬虫,而使用其他的语言可以要多写很多代码,简洁易懂正是python的巨大的优势。
  好了废话不多说,进入今天的正题。最近几年网易云音乐火了起来,我自己就是网易云音乐的用户,用了几年了。以前用的是QQ音乐和酷狗,通过我自己的亲身经历来看,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论(郑重声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。经常一首歌曲下面会有一些被点赞众多的神评论。加上前些日子网易云音乐将精选用户评论搬上了地铁,网易云音乐的评论又火了一把。所以我想对网易云的评论进行分析,发现其中的规律,特别是分析一些热评具有什么共同的特点。带着这个目的,我开始了对网易云评论的抓取工作。
  python内置了两个网络库urllib和urllib2,但是这两个库使用起来不是特别方便,所以在这里我们使用一个广受好评的第三方库requests。使用requests只用很少的几行代码就可以实现设置代理,模拟登陆等比较复杂的爬虫工作。如果已经安装pip的话,直接使用pip install requests 即可安装。中文文档地址在此,大家有什么问题可以自行参考官方文档,上面会有非常详细的介绍。至于urllib和urllib2这两个库也是比较有用的,以后如果有机会我会再给大家介绍一下。
  在正式开始介绍爬虫之前,首先来说一下爬虫的基本工作原理,我们知道我们打开浏览器访问某个网址本质上是向服务器发送了一定的请求,服务器在收到我们的请求之后,会根据我们的请求返回数据,然后通过浏览器将这些数据解析好,呈现在我们的面前。如果我们使用代码的话,就要跳过浏览器的这个步骤,直接向服务器发送一定的数据,然后再取回服务器返回的数据,提取出我们想要的信息。但是问题是,有的时候服务器需要对我们发送的请求进行校验,如果它认为我们的请求是非法的,就会不返回数据,或者返回错误的数据。所以为了避免发生这种情况,我们有的时候需要把程序伪装成一个正常的用户,以便顺利得到服务器的回应。如何伪装呢?这就要看用户通过浏览器访问一个网页与我们通过程序访问一个网页之间的区别。通常来说,我们通过浏览器访问一个网页,除了发送访问的url之外,还会给服务发送额外的信息,比如headers(头部信息)等,这就相当于是请求的身份证明,服务器看到了这些数据,就会知道我们是通过正常的浏览器访问的,就会乖乖地返回数据给我们了。所以我们程序就得像浏览器一样,在发送请求的时候,带上这些标志着我们身份的信息,这样就能顺利拿到数据。有的时候,我们必须在登录状态下才能得到一些数据,所以我们必须要模拟登录。本质上来说,通过浏览器登录就是post一些表单信息给服务器(包括用户名,密码等信息),服务器校验之后我们就可以顺利登录了,利用程序也是一样,浏览器post什么数据,我们原样发送就可以了。关于模拟登录,我后面会专门介绍一下。当然事情有的时候也不会这么顺利,因为有些网站设置了反爬措施,比如如果访问过快,有时候会被封ip(典型的比如豆瓣)。这个时候我们还得要设置代理服务器,即变更我们的ip地址,如果一个ip被封了,就换另外一个ip,具体怎么做,这些话题以后慢慢再说。
  最后,再介绍一个我认为在写爬虫过程中非常有用的一个小技巧。如果你在使用火狐浏览器或者chrome的话,也许你会注意到有一个叫作开发者工具(chrome)或者web控制台(firefox)的地方。这个工具非常有用,因为利用它,我们可以清楚地看到在访问一个网站的过程中,浏览器到底发送了什么信息,服务器究竟返回了什么信息,这些信息是我们写爬虫的关键所在。下面你就会看到它的巨大用处。
  ————————正式开始的分割线——————————
  首先打开网易云音乐的网页版,随便选择一首歌曲打开它的网页,这里我以周杰伦的《晴天》为例。如下图1
  
  图1
  接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),如下图2
  
  图2
  然后这个时候我们需要点选网络,清除所有的信息,然后点击重新发送(相当于是刷新浏览器),这样我们就可以直观看到浏览器发送了什么信息以及服务器回应了什么信息。如下图3
  
  图3
  刷新之后得到的数据如下图4所示:
  图4
  可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。如下图5所示:
  图5
  通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。注意图5中的请求网址一栏即是我们想要请求的网址,请求的方法有两种:get和post,还有一个需要重点关注的就是请求头,里面包含了user-Agent(客户端信息),refrence(从何处跳转过来)等多种信息,一般无论是get还是post方法我们都会把头部信息带上。头部信息如下图6所示:
  图6
  另外还需要注意的是:get请求一般就直接把请求的参数以?parameter1=value1&parameter2=value2 等这样的形式发送了,所以不需要带上额外的请求参数,而post请求则一般需要带上额外的参数,而不直接把参数放在url当中,所以有的时候我们还需要关注参数这一栏。经过仔细寻找,我们终于找到原来与评论相关的请求在 这个请求当中,如下图7所示:
  图7
  点开这个请求,我们发现它是一个post请求,请求的参数有两个,一个是params,还有一个是encSecKey,这两个参数的值非常的长,感觉应该像是加密过的。如下图8所示:
  
  图8
  服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),如下图9所示:(其实hotComments为热门评论,comments为评论数组)
  
  图9
  至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可,这个问题困扰了我一下午,我弄了很久也没有搞清楚这两个参数的加密方式,但是我发现了一个规律, 中 R_SO_4_后面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌比如A的这两个参数值传给B这首歌,那么对于相同的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得相应歌曲的第一页的评论,对于第二页,第三页等也是类似。但是遗憾的是,不同的页数参数是不同的,这种办法只能抓取有限的几页(当然抓取评论总数和热门评论已经足够了),如果要想抓取全部数据,就必须搞明白这两个参数值的加密方式。以为没有搞明白,昨天晚上我带着这个问题去知乎搜索了一下,居然真的被我找到了答案。在这个问题 下,@平胸小仙女 这位知友详细说明了如何破解这两个参数的加密过程,我研究了一下,发现还是有点小复杂的,按照他写的方法,我改动了一下,就成功得到了全部的评论。这里要对@平胸小仙女(个人主页 )表示感谢。如果大家对于破解参数加密有兴趣的话,可以去直接参考原帖,地址是:。
  到此为止,如何抓取网易云音乐的评论全部数据就全部讲完了。按照惯例,最后上代码,亲测有效:
  #!/usr/bin/env python2.7
  # -*- coding: utf-8 -*-
  # @Time : 2017/3/28 8:46
  # @Author : Lyrichu
  # @Email:
  # @File : NetCloud_spider3.py
  '''
  @Description:
  网易云音乐评论爬虫,可以完整爬取整个评论
  部分参考了@平胸小仙女的文章(地址:)
  post加密部分也给出了,可以参考原帖:
  作者:平胸小仙女
  来源:知乎
  '''
  from Crypto.Cipher import AES
  import base64
  import requests
  import json
  import codecs
  import time
  # 头部信息
  headers = {
  'Host':"",
  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  'Accept-Encoding':"gzip, deflate",
  'Content-Type':"application/x-www-form-urlencoded",
  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,27; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A80; _iuqxldmzr_=32; vjuids=c8ca7976。15a029d006a。0。51373751e63af8; vjlast=1486102528。1490172479。21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e。
  1。1。69。05。42; P_INFO=m@163。com|1489375076|1|study|00&99|null&null&null#hub&420100#10#0#0|155439&1|study_client|@163。com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg。ws。126。net%2Fe%2Fimg5。cache。netease。com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62。png。39x39。100。jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1。2。1549851014。1489469781; __utma=94650624。1549851014。
  1489469781。1490664577。1490672820。8; __utmc=94650624; __utmz=94650624。1490661822。6。2。utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624。23。10。1490672820",
  'Connection':"keep-alive",
  'Referer':''
  }
  # 设置代理服务器
  proxies= {
  'http:':'',
  'https:':''
  }
  # offset的取值为:(评论页数-1)*20,total第一页为true,其余页为false
  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数
  second_param = "010001"# 第二个参数
  # 第三个参数
  third_param = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
  # 第四个参数
  forth_param = "0CoJUm6Qyw8W8jud"
  # 获取参数
  def get_params(page): # page为传入页数
  iv = "60708"
  first_key = forth_param
  second_key = 16 * 'F'
  if(page == 1): # 如果为第一页
  first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'
  h_encText = AES_encrypt(first_param,first_key,iv)
  else:
  offset = str((page-1)*20)
  first_param = '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}' %(offset,'false')
  h_encText = AES_encrypt(first_param,first_key,iv)
  h_encText = AES_encrypt(h_encText,second_key,iv)
  returnh_encText
  # 获取 encSecKey
  def get_encSecKey():
  encSecKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"
  returnencSecKey
  # 解密过程
  def AES_encrypt(text,key,iv):
  pad = 16 - len(text) % 16
  text = text + pad *chr(pad)
  encryptor = AES.new(key,AES.MODE_CBC,iv)
  encrypt_text = encryptor.encrypt(text)
  encrypt_text = base64.b64encode(encrypt_text)
  returnencrypt_text
  # 获得评论json数据
  def get_json(url,params,encSecKey):
  data = {
  "params": params,
  "encSecKey": encSecKey
  }
  response = requests.post(url,headers=headers,data=data,proxies = proxies)
  returnresponse.content
  # 抓取热门评论,返回热评列表
  def get_hot_comments(url):
  hot_comments_list = []
  hot_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")
  params = get_params(1)# 第一页
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  hot_comments = json_dict['hotComments']# 热门评论
  print("共有%d条热门评论!" % len(hot_comments))
  foritem inhot_comments:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userID']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = userID + " " + nickname + " " + avatarUrl + " " + comment_time + " " + likedCount + " " + comment + u"\n"
  hot_comments_list.append(comment_info)
  returnhot_comments_list
  # 抓取某一首歌的全部评论
  def get_all_comments(url):
  all_comments_list = []# 存放所有评论
  all_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")# 头部信息
  params = get_params(1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  comments_num = int(json_dict['total'])
  if(comments_num % 20 == 0):
  page = comments_num / 20
  else:
  page = int(comments_num / 20) + 1
  print("共有%d页评论!" % page)
  foriinrange(page):# 逐页抓取
  params = get_params(i+1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  ifi == 0:
  print("共有%d条评论!" % comments_num)# 全部评论总数
  foritem injson_dict['comments']:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userId']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = unicode(userID) + u" " + nickname + u" " + avatarUrl + u" " + unicode(comment_time) + u" " + unicode(likedCount) + u" " + comment + u"\n"
  all_comments_list.append(comment_info)
  print("第%d页抓取完毕!" % (i+1))
  returnall_comments_list
  # 将评论写入文本文件
  def save_to_file(list,filename):
  with codecs.open(filename,'a',encoding='utf-8')asf:
  f.writelines(list)
  print("写入文件成功!")
  if__name__ == "__main__":
  start_time = time.time()# 开始时间
  url = ""
  filename = u"晴天.txt"
  all_comments_list = get_all_comments(url)
  save_to_file(all_comments_list,filename)
  end_time = time.time()#结束时间
  print("程序耗时%f秒." % (end_time - start_time))
  我利用上述代码跑了一下,抓了两首周杰伦的热门歌曲《晴天》(有130多万评论)和《告白气球》(有20多万评论),前者跑了大概有20多分钟,后者有6600多秒(也就是将近2个小时),截图如下:
  
  注意我是按照空格来分隔的,每一行分别有用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容 这些内容。我将这两个txt文件上传到百度云了,对数据感兴趣的同学可以直接下载进行文本分析,地址为:《晴天》(),《告白气球》(),或者自己跑一下代码抓取一下也是可以的(注意不要开太多线程给网易云的服务器太大压力哦~~中间有一段时间服务器返回数据特别慢,不知道是不是限制访问了,后来又好了)。我后面也许会自己去对评论数据进行可视化分析,敬请期待!
  看完本文有收获?请转发分享给更多人
  关注「Python开发者」,提升Python技能

Power BI财务报表分析:数据准备篇

网站优化优采云 发表了文章 • 0 个评论 • 180 次浏览 • 2022-06-20 09:38 • 来自相关话题

  Power BI财务报表分析:数据准备篇
  PowerBI财务报表分析系列之:
  数据准备篇
  数据分析第一步,需要有数据,然后才能开始后续的一系列分析过程,PowerBI财务报表分析也不例外,第一篇,先来介绍报表数据的获取,以及将获取的数据整理成适合分析的样式。
  在这个分析示例中,用的是公开的上市公司数据,所以数据获取,主要的工作就是利用PowerBI来批量爬取网页数据。
  如果你的分析对象是本公司的财务报表,会更加简便,可以跳过网页抓取数据的过程,直接进行整理数据就好了,不过学会了利用PowerBI抓取网页数据的技能,以后总能用的上。
  下面进入正文。
  这个PowerBI财务报表分析报告,用的数据是2010年至2019年,5个上市公司的资产负债表、利润表和现金流量表数据。
  数据来源于新浪财经,先选取一个公司,比如万科A,点击财务报表>资产负债表>2019,出现在眼前的网页是这样的:
  2019年四个季度的资产负债表就同时展现出来了,并且数据结构非常好,可以为后期的整理省去很多工作。
  然后查看这个网址结构:
  BalanceSheet/stockid/000002/ctrl/2019/displaytype/4.phtml
  猜测其中的BalanceSheet、000002、2019就是分别表示资产负债表、万科的股票代码和年度,可以换个公司和年度来验证,比如五粮液的2018年利润表,网址为:
  ProfitStatement/stockid/000858/ctrl/2018/displaytype/4.phtml
  和猜测的完全一致,那么就可以利用PowerBI,来批量来抓取。
  抓取多公司、多年度、多个报表的整体思路:
  1、先抓取一个公司一年的一个报表;
  2、利用第1步的查询创建自定义函数;3、构建参数列表;
  4,调用自定义函数,批量抓取数据。
  下面进入具体操作步骤。
  1,利用PowerBI抓取一个公司、一年的报表
  以上面第一个网址:2019年万科的资产负债表为例,点击获取数据>从web,将网址输入进去,在弹出的导航器中,会看到PowerBI识别出来很多表格,因为这一页本来就是有很多组数据,分别点击查看,会看到表17的结构最为规范,
  
  选中这个表,然后加载数据,进入Power Query编辑器。
  首先观察这个表的数据,空值都显示为"--",首先将它替换为0,然后将第一行用作标题:
  
  如果对PowerQuery的基础操作还不熟悉,建议先看看这篇文章:
  这是一个二维结构表,为便于之后的分析,将其转换为一维表:选中第一列,点击逆透视>逆透视其他列,就变成了一维表:
  
  不了解一维表的可以参考:
  万科2019年的资产负债表提取并整理完毕。
  其实这一步到这里就可以结束了。不过在这个模型中,为了简化,我将现金流量表的间接法附加数据删除,只保留了直接法的现金流量表项目,因此,多做了现金流量表的查询。
  所以提取现金流量表的时候,在上面资产负债表操作的基础上,增加了删除底部行的步骤,其他步骤都相同(如果你需要使用现金补充资料,可以不单独处理,只需要获取一个资产负债表就行)。
  2,建立自定义函数
  在PowerBI中,操作的每一个步骤都会自动记录下来,数据源更新后,刷新就可以自动完成所有的操作步骤。
  更进一步的,还可以将这个查询函数化,进而应用于相似的其他查询,这就用到了PowerQuery的自定义函数(如果你还不清楚什么是自定义函数,可以先看看:)。
  自定义函数并不是都需要自己从零开始一点点写M代码,还有更加简便的方法。
  第1步完成以后,右键该查询的名称,点击"创建函数"。
  
  输入函数名,这里我按报表的类型,定义该函数为balancesheet。
  然后选中这个自定义函数,点击进入高级编辑器,将前面几行代码调整为下图所显示的内容:
  就是修改一下获取数据网址,将网址中的:报表类型、公司代码、年度分别用:type、code、year表示,并将这三个变量作为自定义函数的三个参数。
  然后这个自定义函数就建好了,
  
  在这个窗口,任意输入三个有效参数,就能提取某个上市公司某年度的一个报表。
  不过我们建立自定义函数的目的是为了批量获取数据,所以在这个窗口中不需要操作。
  同样的方式,为现金流量表也生成一个自定义函数,命名为cashflow。
  3,构建参数列表
  针对三个参数,我们需要构建这三个参数的笛卡尔积,来得到每个公司的2010年-2019年的三大报表数据。
  为了便于后期的修改和维护,我们先建立三个单独的参数表。
  在PowerQuery编辑器中,直接点击输入数据,将需要分析的公司名称和股票代码录进去:
  
  就生成了一个公司名称表,同样的方式,生成年度表和报表类型表。
  接下来要做的是,生成这三个表的笛卡尔积,也就是公司代码、年度、报表类型的任意组合。
  在PowerQuery中,生成笛卡尔积很简单,先为这三个表都添加一列,比如1,然后合并查询。
  先合并查询报表类型和年度:
  得到的结果如下:
  
  这就是报表类型和年度的任何组合,然后继续将这个表与公司名称表合并查询,就得到了公司代码、年度、报表类型的任意组合表。
  4、调用自定义函数
  在第3步生成的表的基础上,添加自定义列,
  
  这个M代码的意思是,如果报表类型是CashFlow(现金流量表),就调用自定义函数:cashflow,否者调用balancesheet,他们的参数相同(如果只有一个自定义函数,就不需要用IF做判断,直接调用就行)。
  然后就抓取到了这5家公司10年的三大报表数据:
  并且,批量抓取的报表数据,已经是我们需要的一维表数据,因为第一步的操作,就含有二维转一维的步骤,后面在调用自定义函数的时候,都自动做了相同的操作。
  当然你也可以用这种方法,一次性抓取上百家公司的数据,但速度会非常慢,所以建议只抓取需要的公司、最近年份的数据就可以了。
  至此,三大表的数据抓取完成,主要就是利用PowerQuery的界面操作,以及简单的几个代码修改,即使没有任何基础,照着上面的步骤,也可以快速完成。
  在这个财务分析示例中,其中有一页是公司概况,也是通过网页抓取的公司信息:
  数据来源于下面三个网页:
  公司公告公司简介历史行情
  这些数据的抓取和上面财报数据抓取步骤完全一样,不过更加简单,因为只有一个参数:公司代码,大家可以自己动手练习。
  通过以上的介绍,你应该可以轻松从网页中抓取财报数据,需要相关的其他数据时,你都可以从网上搜索资源,然后批量抓取。
  正如开头所说,如果你要做的是自己公司的内部财报分析,你可以忽略掉本文抓取数据的步骤,而直接导入现成的财务报表就行了,不过为了后续分析的需要,建议你仍应该将报表数据整理成一维表的结构。
  数据整理好并上载,就可以进行下一步的数据建模。
  成为PowerBI星球会员,获取财务报表分析模板 查看全部

  Power BI财务报表分析:数据准备篇
  PowerBI财务报表分析系列之:
  数据准备篇
  数据分析第一步,需要有数据,然后才能开始后续的一系列分析过程,PowerBI财务报表分析也不例外,第一篇,先来介绍报表数据的获取,以及将获取的数据整理成适合分析的样式。
  在这个分析示例中,用的是公开的上市公司数据,所以数据获取,主要的工作就是利用PowerBI来批量爬取网页数据。
  如果你的分析对象是本公司的财务报表,会更加简便,可以跳过网页抓取数据的过程,直接进行整理数据就好了,不过学会了利用PowerBI抓取网页数据的技能,以后总能用的上。
  下面进入正文。
  这个PowerBI财务报表分析报告,用的数据是2010年至2019年,5个上市公司的资产负债表、利润表和现金流量表数据。
  数据来源于新浪财经,先选取一个公司,比如万科A,点击财务报表>资产负债表>2019,出现在眼前的网页是这样的:
  2019年四个季度的资产负债表就同时展现出来了,并且数据结构非常好,可以为后期的整理省去很多工作。
  然后查看这个网址结构:
  BalanceSheet/stockid/000002/ctrl/2019/displaytype/4.phtml
  猜测其中的BalanceSheet、000002、2019就是分别表示资产负债表、万科的股票代码和年度,可以换个公司和年度来验证,比如五粮液的2018年利润表,网址为:
  ProfitStatement/stockid/000858/ctrl/2018/displaytype/4.phtml
  和猜测的完全一致,那么就可以利用PowerBI,来批量来抓取。
  抓取多公司、多年度、多个报表的整体思路:
  1、先抓取一个公司一年的一个报表;
  2、利用第1步的查询创建自定义函数;3、构建参数列表;
  4,调用自定义函数,批量抓取数据。
  下面进入具体操作步骤。
  1,利用PowerBI抓取一个公司、一年的报表
  以上面第一个网址:2019年万科的资产负债表为例,点击获取数据>从web,将网址输入进去,在弹出的导航器中,会看到PowerBI识别出来很多表格,因为这一页本来就是有很多组数据,分别点击查看,会看到表17的结构最为规范,
  
  选中这个表,然后加载数据,进入Power Query编辑器。
  首先观察这个表的数据,空值都显示为"--",首先将它替换为0,然后将第一行用作标题:
  
  如果对PowerQuery的基础操作还不熟悉,建议先看看这篇文章:
  这是一个二维结构表,为便于之后的分析,将其转换为一维表:选中第一列,点击逆透视>逆透视其他列,就变成了一维表:
  
  不了解一维表的可以参考:
  万科2019年的资产负债表提取并整理完毕。
  其实这一步到这里就可以结束了。不过在这个模型中,为了简化,我将现金流量表的间接法附加数据删除,只保留了直接法的现金流量表项目,因此,多做了现金流量表的查询。
  所以提取现金流量表的时候,在上面资产负债表操作的基础上,增加了删除底部行的步骤,其他步骤都相同(如果你需要使用现金补充资料,可以不单独处理,只需要获取一个资产负债表就行)。
  2,建立自定义函数
  在PowerBI中,操作的每一个步骤都会自动记录下来,数据源更新后,刷新就可以自动完成所有的操作步骤。
  更进一步的,还可以将这个查询函数化,进而应用于相似的其他查询,这就用到了PowerQuery的自定义函数(如果你还不清楚什么是自定义函数,可以先看看:)。
  自定义函数并不是都需要自己从零开始一点点写M代码,还有更加简便的方法。
  第1步完成以后,右键该查询的名称,点击"创建函数"。
  
  输入函数名,这里我按报表的类型,定义该函数为balancesheet。
  然后选中这个自定义函数,点击进入高级编辑器,将前面几行代码调整为下图所显示的内容:
  就是修改一下获取数据网址,将网址中的:报表类型、公司代码、年度分别用:type、code、year表示,并将这三个变量作为自定义函数的三个参数。
  然后这个自定义函数就建好了,
  
  在这个窗口,任意输入三个有效参数,就能提取某个上市公司某年度的一个报表。
  不过我们建立自定义函数的目的是为了批量获取数据,所以在这个窗口中不需要操作。
  同样的方式,为现金流量表也生成一个自定义函数,命名为cashflow。
  3,构建参数列表
  针对三个参数,我们需要构建这三个参数的笛卡尔积,来得到每个公司的2010年-2019年的三大报表数据。
  为了便于后期的修改和维护,我们先建立三个单独的参数表。
  在PowerQuery编辑器中,直接点击输入数据,将需要分析的公司名称和股票代码录进去:
  
  就生成了一个公司名称表,同样的方式,生成年度表和报表类型表。
  接下来要做的是,生成这三个表的笛卡尔积,也就是公司代码、年度、报表类型的任意组合。
  在PowerQuery中,生成笛卡尔积很简单,先为这三个表都添加一列,比如1,然后合并查询。
  先合并查询报表类型和年度:
  得到的结果如下:
  
  这就是报表类型和年度的任何组合,然后继续将这个表与公司名称表合并查询,就得到了公司代码、年度、报表类型的任意组合表。
  4、调用自定义函数
  在第3步生成的表的基础上,添加自定义列,
  
  这个M代码的意思是,如果报表类型是CashFlow(现金流量表),就调用自定义函数:cashflow,否者调用balancesheet,他们的参数相同(如果只有一个自定义函数,就不需要用IF做判断,直接调用就行)。
  然后就抓取到了这5家公司10年的三大报表数据:
  并且,批量抓取的报表数据,已经是我们需要的一维表数据,因为第一步的操作,就含有二维转一维的步骤,后面在调用自定义函数的时候,都自动做了相同的操作。
  当然你也可以用这种方法,一次性抓取上百家公司的数据,但速度会非常慢,所以建议只抓取需要的公司、最近年份的数据就可以了。
  至此,三大表的数据抓取完成,主要就是利用PowerQuery的界面操作,以及简单的几个代码修改,即使没有任何基础,照着上面的步骤,也可以快速完成。
  在这个财务分析示例中,其中有一页是公司概况,也是通过网页抓取的公司信息:
  数据来源于下面三个网页:
  公司公告公司简介历史行情
  这些数据的抓取和上面财报数据抓取步骤完全一样,不过更加简单,因为只有一个参数:公司代码,大家可以自己动手练习。
  通过以上的介绍,你应该可以轻松从网页中抓取财报数据,需要相关的其他数据时,你都可以从网上搜索资源,然后批量抓取。
  正如开头所说,如果你要做的是自己公司的内部财报分析,你可以忽略掉本文抓取数据的步骤,而直接导入现成的财务报表就行了,不过为了后续分析的需要,建议你仍应该将报表数据整理成一维表的结构。
  数据整理好并上载,就可以进行下一步的数据建模。
  成为PowerBI星球会员,获取财务报表分析模板

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-17 22:05 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-06-16 02:53 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2022-06-11 15:07 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-09 12:43 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

为开发者准备的9个实用PHP代码片段

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-06-05 13:42 • 来自相关话题

  为开发者准备的9个实用PHP代码片段
  本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作!
  当你开发网站、app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发。更多PHP的学习内容,您还可以参考《深入探讨PHP类的封装与继承》《PHP比较运算符的详细学习》《国外PHP学习网站书籍资料汇总》《超实用PHP函数总结整理》,希望对你的PHP学习有帮助。
  
  一.查看邮件是否已被阅读
  当你发送邮件时,你肯定很想知道你的邮件是否已被对方查看。下面的代码就能实现记录阅读你邮件的IP地址,还有实际的阅读日期和时间。
  error_reporting(0);
  Header("Content-Type: image/jpeg");
  //Get IP
  if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_CLIENT_IP&#39;];
  }
  elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
  }
  else
  {
  $ip=$_SERVER[&#39;REMOTE_ADDR&#39;];
  }
  //Time
  $actual_time = time();
  $actual_day = date(&#39;Y.m.d&#39;, $actual_time);
  $actual_day_chart = date(&#39;d/m/y&#39;, $actual_time);
  $actual_hour = date(&#39;H:i:s&#39;, $actual_time);
  //GET Browser
  $browser = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
  //LOG
  $myFile = "log.txt";
  $fh = fopen($myFile, &#39;a+&#39;);
  $stringData = $actual_day . &#39; &#39; . $actual_hour . &#39; &#39; . $ip . &#39; &#39; . $browser . &#39; &#39; . "\r\n";
  fwrite($fh, $stringData);
  fclose($fh);
  //Generate Image (Es. dimesion is 1x1)
  $newimage = ImageCreate(1,1);
  $grigio = ImageColorAllocate($newimage,255,255,255);
  ImageJPEG($newimage);
  ImageDestroy($newimage);
  源代码:
  二.从网页中提取关键词
  这段优秀的代码可以简单地实现从网页中提取关键词的功能。
  $meta = get_meta_tags(&#39;#39;);
  $keywords = $meta[&#39;keywords&#39;];
  // Split keywords
  $keywords = explode(&#39;,&#39;, $keywords );
  // Trim them
  $keywords = array_map( &#39;trim&#39;, $keywords );
  // Remove empty values
  $keywords = array_filter( $keywords );
  print_r( $keywords );
  源代码:
  三.查找页面上的所有链接
  使用DOM,你可以在任意页面上抓取链接,示例如下。
  $html = file_get_contents(&#39;#39;);
  $dom = new DOMDocument();
  @$dom->loadHTML($html);
  // grab all the on the page
  $xpath = new DOMXPath($dom);
  $hrefs = $xpath->evaluate("/html/body//a");
  for ($i = 0; $i < $hrefs->length; $i++) {
  $href = $hrefs->item($i);
  $url = $href->getAttribute(&#39;href&#39;);
  echo $url.&#39;
  &#39;;
  }
  源代码:
  四.自动转换URL为可点击超链接
  在Wordpress中,如果你想自动转换所有的URLs为可点击超链接,你就可以使用内置函数make_clickable()实现。当你在WordPress外操作时,你可以参考wp-includes/formatting.php中的源代码。
  function _make_url_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $url = $matches[2];
  if ( empty($url) )
  return $matches[0];
  // removed trailing [.,;:] from URL
  if ( in_array(substr($url, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($url, -1);
  $url = substr($url, 0, strlen($url)-1);
  }
  return $matches[1] . "$url" . $ret;
  }
  function _make_web_ftp_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $dest = $matches[2];
  $dest = &#39;#39; . $dest;
  if ( empty($dest) )
  return $matches[0];
  // removed trailing [,;:] from URL
  if ( in_array(substr($dest, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($dest, -1);
  $dest = substr($dest, 0, strlen($dest)-1);
  }
  return $matches[1] . "$dest" . $ret;
  }
  function _make_email_clickable_cb($matches) {
  $email = $matches[2] . &#39;@&#39; . $matches[3];
  return $matches[1] . "$email";
  }
  function make_clickable($ret) {
  $ret = &#39; &#39; . $ret;
  // in testing, using arrays here was found to be faster
  $ret = preg_replace_callback(&#39;#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_url_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_web_ftp_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i&#39;, &#39;_make_email_clickable_cb&#39;, $ret);
  // this one is not in an array because we need it to run last, for cleanup of accidental links within links
  $ret = preg_replace("#(]+?>|>))]+?>([^>]+?)#i", "$1$3", $ret);
  $ret = trim($ret);
  return $ret;
  }
  源代码:
  五.创建数据URI
  数据URI可以帮助将图像嵌入到HTML/CSS/JS中,从而节省HTTP请求。下面的函数可以利用$file创建数据URI。
  function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
  }
  源代码:
  六.下载和保存远程图片到你的服务器
  当你在搭建网站时,很可能会从远程服务器上下载图片保存到你自己的服务器上,下面的代码就可以帮助你实现这个功能。
  $image = file_get_contents(&#39;#39;);
  file_put_contents(&#39;/images/image.jpg&#39;, $image); //Where to save the image
  源代码:
  七.移除Microsoft Word HTML标签
  当你使用Microsoft Word时,会创建很多标签tag,比如font、span、style、class等,这些标签在Word中十分有用,但当你从Word中把文本粘贴到网页上,就会出现很多没用的标签。下面实用的函数可以帮助你清除所有的Word HTML标签。
  function cleanHTML($html) {
  ///
  /// Removes all FONT and SPAN tags, and all Class and Style attributes.
  /// Designed to get rid of non-standard Microsoft Word HTML tags.
  ///
  // start by completely removing all unwanted tags
  $html = ereg_replace("]*>","",$html);
  // then run another pass over the html (twice), removing unwanted attributes
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  return $html
  }
  源代码:,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
  八.检测浏览器语言
  如果你的网站是多种语言的,下面的代码可以帮助你检测浏览器语言,它会返回客户端浏览器的默认语言。
  function get_client_language($availableLanguages, $default=&#39;en&#39;){
  if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
  $langs=explode(&#39;,&#39;,$_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
  foreach ($langs as $value){
  $choice=substr($value,0,2);
  if(in_array($choice, $availableLanguages)){
  return $choice;
  }
  }
  }
  return $default;
  }
  源代码:
  九.显示Facebook上的粉丝数量
  如果在你的网站或博客中,链有Facebook页面,你可能希望显示Facebook上的粉丝数量,下面的代码就可以帮助你获取粉丝数量,另外不要忘记在代码第二行添加你的页面ID。
  $page_id = "YOUR PAGE-ID";
  $xml = @simplexml_load_file(" 20page_id=".$page_id."") or die ("a lot");
  $fans = $xml->page->fan_count;
  echo $fans;
  源代码: 查看全部

  为开发者准备的9个实用PHP代码片段
  本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作!
  当你开发网站、app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发。更多PHP的学习内容,您还可以参考《深入探讨PHP类的封装与继承》《PHP比较运算符的详细学习》《国外PHP学习网站书籍资料汇总》《超实用PHP函数总结整理》,希望对你的PHP学习有帮助。
  
  一.查看邮件是否已被阅读
  当你发送邮件时,你肯定很想知道你的邮件是否已被对方查看。下面的代码就能实现记录阅读你邮件的IP地址,还有实际的阅读日期和时间。
  error_reporting(0);
  Header("Content-Type: image/jpeg");
  //Get IP
  if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_CLIENT_IP&#39;];
  }
  elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
  }
  else
  {
  $ip=$_SERVER[&#39;REMOTE_ADDR&#39;];
  }
  //Time
  $actual_time = time();
  $actual_day = date(&#39;Y.m.d&#39;, $actual_time);
  $actual_day_chart = date(&#39;d/m/y&#39;, $actual_time);
  $actual_hour = date(&#39;H:i:s&#39;, $actual_time);
  //GET Browser
  $browser = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
  //LOG
  $myFile = "log.txt";
  $fh = fopen($myFile, &#39;a+&#39;);
  $stringData = $actual_day . &#39; &#39; . $actual_hour . &#39; &#39; . $ip . &#39; &#39; . $browser . &#39; &#39; . "\r\n";
  fwrite($fh, $stringData);
  fclose($fh);
  //Generate Image (Es. dimesion is 1x1)
  $newimage = ImageCreate(1,1);
  $grigio = ImageColorAllocate($newimage,255,255,255);
  ImageJPEG($newimage);
  ImageDestroy($newimage);
  源代码:
  二.从网页中提取关键词
  这段优秀的代码可以简单地实现从网页中提取关键词的功能。
  $meta = get_meta_tags(&#39;#39;);
  $keywords = $meta[&#39;keywords&#39;];
  // Split keywords
  $keywords = explode(&#39;,&#39;, $keywords );
  // Trim them
  $keywords = array_map( &#39;trim&#39;, $keywords );
  // Remove empty values
  $keywords = array_filter( $keywords );
  print_r( $keywords );
  源代码:
  三.查找页面上的所有链接
  使用DOM,你可以在任意页面上抓取链接,示例如下。
  $html = file_get_contents(&#39;#39;);
  $dom = new DOMDocument();
  @$dom->loadHTML($html);
  // grab all the on the page
  $xpath = new DOMXPath($dom);
  $hrefs = $xpath->evaluate("/html/body//a");
  for ($i = 0; $i < $hrefs->length; $i++) {
  $href = $hrefs->item($i);
  $url = $href->getAttribute(&#39;href&#39;);
  echo $url.&#39;
  &#39;;
  }
  源代码:
  四.自动转换URL为可点击超链接
  在Wordpress中,如果你想自动转换所有的URLs为可点击超链接,你就可以使用内置函数make_clickable()实现。当你在WordPress外操作时,你可以参考wp-includes/formatting.php中的源代码。
  function _make_url_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $url = $matches[2];
  if ( empty($url) )
  return $matches[0];
  // removed trailing [.,;:] from URL
  if ( in_array(substr($url, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($url, -1);
  $url = substr($url, 0, strlen($url)-1);
  }
  return $matches[1] . "$url" . $ret;
  }
  function _make_web_ftp_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $dest = $matches[2];
  $dest = &#39;#39; . $dest;
  if ( empty($dest) )
  return $matches[0];
  // removed trailing [,;:] from URL
  if ( in_array(substr($dest, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($dest, -1);
  $dest = substr($dest, 0, strlen($dest)-1);
  }
  return $matches[1] . "$dest" . $ret;
  }
  function _make_email_clickable_cb($matches) {
  $email = $matches[2] . &#39;@&#39; . $matches[3];
  return $matches[1] . "$email";
  }
  function make_clickable($ret) {
  $ret = &#39; &#39; . $ret;
  // in testing, using arrays here was found to be faster
  $ret = preg_replace_callback(&#39;#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_url_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_web_ftp_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i&#39;, &#39;_make_email_clickable_cb&#39;, $ret);
  // this one is not in an array because we need it to run last, for cleanup of accidental links within links
  $ret = preg_replace("#(]+?>|>))]+?>([^>]+?)#i", "$1$3", $ret);
  $ret = trim($ret);
  return $ret;
  }
  源代码:
  五.创建数据URI
  数据URI可以帮助将图像嵌入到HTML/CSS/JS中,从而节省HTTP请求。下面的函数可以利用$file创建数据URI。
  function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
  }
  源代码:
  六.下载和保存远程图片到你的服务器
  当你在搭建网站时,很可能会从远程服务器上下载图片保存到你自己的服务器上,下面的代码就可以帮助你实现这个功能。
  $image = file_get_contents(&#39;#39;);
  file_put_contents(&#39;/images/image.jpg&#39;, $image); //Where to save the image
  源代码:
  七.移除Microsoft Word HTML标签
  当你使用Microsoft Word时,会创建很多标签tag,比如font、span、style、class等,这些标签在Word中十分有用,但当你从Word中把文本粘贴到网页上,就会出现很多没用的标签。下面实用的函数可以帮助你清除所有的Word HTML标签。
  function cleanHTML($html) {
  ///
  /// Removes all FONT and SPAN tags, and all Class and Style attributes.
  /// Designed to get rid of non-standard Microsoft Word HTML tags.
  ///
  // start by completely removing all unwanted tags
  $html = ereg_replace("]*>","",$html);
  // then run another pass over the html (twice), removing unwanted attributes
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  return $html
  }
  源代码:,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
  八.检测浏览器语言
  如果你的网站是多种语言的,下面的代码可以帮助你检测浏览器语言,它会返回客户端浏览器的默认语言。
  function get_client_language($availableLanguages, $default=&#39;en&#39;){
  if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
  $langs=explode(&#39;,&#39;,$_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
  foreach ($langs as $value){
  $choice=substr($value,0,2);
  if(in_array($choice, $availableLanguages)){
  return $choice;
  }
  }
  }
  return $default;
  }
  源代码:
  九.显示Facebook上的粉丝数量
  如果在你的网站或博客中,链有Facebook页面,你可能希望显示Facebook上的粉丝数量,下面的代码就可以帮助你获取粉丝数量,另外不要忘记在代码第二行添加你的页面ID。
  $page_id = "YOUR PAGE-ID";
  $xml = @simplexml_load_file(" 20page_id=".$page_id."") or die ("a lot");
  $fans = $xml->page->fan_count;
  echo $fans;
  源代码:

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-05-31 01:43 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

面试PHP一般会考查你哪些内容呢?不妨看看

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-05-25 09:28 • 来自相关话题

  面试PHP一般会考查你哪些内容呢?不妨看看
  状态码 401表示未授权;<br />header(“HTTP/1.0 404 Not Found”);<br />
  扩展
  8、把John新增到users阵列?
  $users[] = ‘john’;   <br />array_push($users,‘john’);<br />
  9 、在PHP中error_reporting这个函数有什么作用?
  error_reporting()设置PHP的报错级别并返回当前级别。
  10、如何修改SESSION的生存时间.
  方法1:将php.ini中的session.gc_maxlifetime设置为9999  重启apache<br /><br />方法2:<br />$savePath = "./session_save_dir/";<br />$lifeTime = 小时 * 秒;<br />session_save_path($savePath);<br />session_set_cookie_params($lifeTime);<br />session_start();<br /><br />方法3:<br />setcookie() and session_set_cookie_params($lifeTime);<br />
  11、有一个网页地址,比如PHP自学中心的主页:,如何得到它的内容?
  方法1(对于PHP5及更高版本):<br />$readcontents = fopen("http://www.startphp.cn/index.html", "rb");<br />$contents = stream_get_contents($readcontents);<br />fclose($readcontents);<br />echo $contents;<br /><br />方法2:<br />echo file_get_contents("http://www.startphp.cn/index.html");<br />
  12、写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名
  例如:需要取出php或.php
  方法1:<br />function getExt($url){<br />    $arr = parse_url($url);<br />    $file = basename($arr['path']);<br />    $ext = explode(".",$file);<br />    return $ext[1];<br />}<br /><br />方法2:<br />function getExt($url) {<br />    $url = basename($url);<br />    $pos1 = strpos($url,".");<br />    $pos2 = strpos($url,"?");<br /><br />    if(strstr($url,"?")){<br />        Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);<br /><br />    } else {<br />        return substr($url,$pos1);<br />    }<br />}<br />
  13、使用五种以上方式获取一个文件的扩展名
  要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数get_ext1($file_name),get_ext2($file_name)
  方法1:<br />function get_ext1($file_name){<br />    return strrchr($file_name, '.');<br />}<br />方法2:<br />function get_ext2($file_name){<br />    return substr($file_name,strrpos($file_name, '.'));<br />}<br />方法3:<br />function get_ext3($file_name){<br />    return array_pop(explode('.', $file_name));<br />}<br />方法4:<br />function get_ext4($file_name){<br />    $p = pathinfo($file_name);<br />    return $p['extension'];<br /><br />}<br />方法5:<br />function get_ext5($file_name){<br />    return strrev(substr(strrev($file_name), 0,strpos(strrev($file_name), '.')));<br />}<br />
  14、PHP中的null与false,‘’与0有什么区别?
<p> 查看全部

  面试PHP一般会考查你哪些内容呢?不妨看看
  状态码 401表示未授权;<br />header(“HTTP/1.0 404 Not Found”);<br />
  扩展
  8、把John新增到users阵列?
  $users[] = ‘john’;   <br />array_push($users,‘john’);<br />
  9 、在PHP中error_reporting这个函数有什么作用?
  error_reporting()设置PHP的报错级别并返回当前级别。
  10、如何修改SESSION的生存时间.
  方法1:将php.ini中的session.gc_maxlifetime设置为9999  重启apache<br /><br />方法2:<br />$savePath = "./session_save_dir/";<br />$lifeTime = 小时 * 秒;<br />session_save_path($savePath);<br />session_set_cookie_params($lifeTime);<br />session_start();<br /><br />方法3:<br />setcookie() and session_set_cookie_params($lifeTime);<br />
  11、有一个网页地址,比如PHP自学中心的主页:,如何得到它的内容?
  方法1(对于PHP5及更高版本):<br />$readcontents = fopen("http://www.startphp.cn/index.html", "rb");<br />$contents = stream_get_contents($readcontents);<br />fclose($readcontents);<br />echo $contents;<br /><br />方法2:<br />echo file_get_contents("http://www.startphp.cn/index.html";);<br />
  12、写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名
  例如:需要取出php或.php
  方法1:<br />function getExt($url){<br />    $arr = parse_url($url);<br />    $file = basename($arr['path']);<br />    $ext = explode(".",$file);<br />    return $ext[1];<br />}<br /><br />方法2:<br />function getExt($url) {<br />    $url = basename($url);<br />    $pos1 = strpos($url,".");<br />    $pos2 = strpos($url,"?");<br /><br />    if(strstr($url,"?")){<br />        Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);<br /><br />    } else {<br />        return substr($url,$pos1);<br />    }<br />}<br />
  13、使用五种以上方式获取一个文件的扩展名
  要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数get_ext1($file_name),get_ext2($file_name)
  方法1:<br />function get_ext1($file_name){<br />    return strrchr($file_name, '.');<br />}<br />方法2:<br />function get_ext2($file_name){<br />    return substr($file_name,strrpos($file_name, '.'));<br />}<br />方法3:<br />function get_ext3($file_name){<br />    return array_pop(explode('.', $file_name));<br />}<br />方法4:<br />function get_ext4($file_name){<br />    $p = pathinfo($file_name);<br />    return $p['extension'];<br /><br />}<br />方法5:<br />function get_ext5($file_name){<br />    return strrev(substr(strrev($file_name), 0,strpos(strrev($file_name), '.')));<br />}<br />
  14、PHP中的null与false,‘’与0有什么区别?
<p>

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-05-21 03:18 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

用php可以抓取网页数据吗?解决方法有哪些?

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-05-17 04:03 • 来自相关话题

  用php可以抓取网页数据吗?解决方法有哪些?
  php可以抓取网页数据吗?很多人在做php爬虫的时候都会涉及到抓取网页数据的操作,但是同时会出现几个问题,下面小编简单介绍一下解决方法。用php抓取网页数据的方法,当然只能在php语言中使用,当然还是有很多不同于php的语言,这里介绍的网页抓取是在windows平台上使用的网页抓取方法。另外数据类型方面也有几种,比如使用phptoken来获取对应的账号,比如使用java注解来获取对应的数据,本文使用java网页抓取来介绍如何使用php网页来抓取数据。
  java网页抓取分为四步:第一步:java代码完整执行--java代码编写swoole代码。第二步:打开ubuntu或linux的浏览器,用fastcgi客户端登录到你所要抓取的网站,然后点击打开网页源代码或者右键单击开始抓取,运行代码完整文件。第三步:从浏览器打开源代码图。第四步:从打开的源代码中你可以看到对应网页的信息,例如:浏览器:/抓取:/详细查看数据库:/抓取:。
  支持楼上,不同的语言有相同的方法,有兴趣自己去调代码,可以大概实现小程序功能,当然如果手机端,因为微信不支持分享到朋友圈等的话,
  php可以抓取网页数据吗?php没有抓取网页数据的接口,只能抓取链接。比如:/(网址)。如果有这样一个接口,那么通过php在服务器端可以抓取,提供网页的xml或json文件。如果真的要做到抓取网页,必须要用java语言,也就是jsp。 查看全部

  用php可以抓取网页数据吗?解决方法有哪些?
  php可以抓取网页数据吗?很多人在做php爬虫的时候都会涉及到抓取网页数据的操作,但是同时会出现几个问题,下面小编简单介绍一下解决方法。用php抓取网页数据的方法,当然只能在php语言中使用,当然还是有很多不同于php的语言,这里介绍的网页抓取是在windows平台上使用的网页抓取方法。另外数据类型方面也有几种,比如使用phptoken来获取对应的账号,比如使用java注解来获取对应的数据,本文使用java网页抓取来介绍如何使用php网页来抓取数据。
  java网页抓取分为四步:第一步:java代码完整执行--java代码编写swoole代码。第二步:打开ubuntu或linux的浏览器,用fastcgi客户端登录到你所要抓取的网站,然后点击打开网页源代码或者右键单击开始抓取,运行代码完整文件。第三步:从浏览器打开源代码图。第四步:从打开的源代码中你可以看到对应网页的信息,例如:浏览器:/抓取:/详细查看数据库:/抓取:。
  支持楼上,不同的语言有相同的方法,有兴趣自己去调代码,可以大概实现小程序功能,当然如果手机端,因为微信不支持分享到朋友圈等的话,
  php可以抓取网页数据吗?php没有抓取网页数据的接口,只能抓取链接。比如:/(网址)。如果有这样一个接口,那么通过php在服务器端可以抓取,提供网页的xml或json文件。如果真的要做到抓取网页,必须要用java语言,也就是jsp。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-15 10:50 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-05-15 06:41 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

php可以抓取网页数据吗 PHP之伪静态与真静态

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-05-12 09:02 • 来自相关话题

  php可以抓取网页数据吗 PHP之伪静态与真静态
  
  首先,什么是伪静态:
  伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写 URL 方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。
  另外在补充两个名词解析
  静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页
  动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2
  动态、静态、伪静态之间的利与弊(新)
  动态网址
  首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数。
  其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理。
  最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面。
  静态网址
  首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高。
  其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富。
  最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
  伪静态网址
  首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档。
  其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。
  最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用。
  在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html。
  再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID)。
  我们应该选择伪静态还是真静态
  1、使用真静态和假静态对SEO来说没有什么区别
  2、使用真静态可能将导致硬盘损坏并将影响论坛性能
  3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
  4、最重要的一点,我们要静态是为了SEO
  所以:
  1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
  2、既然真伪静态的效果一样,我们就可以选择伪静态了。
  3、但是伪静态大量使用会造成CPU超负荷。
  4、所以我们只要不大量使用就可以了。
  5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
  6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
  7、谢谢大家耐心看我写的文章。
  8、有何不解的地方或是有不同的看法欢迎提出 查看全部

  php可以抓取网页数据吗 PHP之伪静态与真静态
  
  首先,什么是伪静态:
  伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写 URL 方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。
  另外在补充两个名词解析
  静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页
  动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2
  动态、静态、伪静态之间的利与弊(新)
  动态网址
  首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数。
  其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理。
  最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面。
  静态网址
  首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高。
  其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富。
  最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
  伪静态网址
  首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档。
  其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。
  最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用。
  在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html。
  再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID)。
  我们应该选择伪静态还是真静态
  1、使用真静态和假静态对SEO来说没有什么区别
  2、使用真静态可能将导致硬盘损坏并将影响论坛性能
  3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
  4、最重要的一点,我们要静态是为了SEO
  所以:
  1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
  2、既然真伪静态的效果一样,我们就可以选择伪静态了。
  3、但是伪静态大量使用会造成CPU超负荷。
  4、所以我们只要不大量使用就可以了。
  5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
  6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
  7、谢谢大家耐心看我写的文章。
  8、有何不解的地方或是有不同的看法欢迎提出

apachephp可以抓取网页数据吗?回答可以的。。

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-09-20 02:02 • 来自相关话题

  apachephp可以抓取网页数据吗?回答可以的。。
  php可以抓取网页数据吗?回答可以的。如果想借助php程序抓取网页的html代码,那么有很多选择,本文主要针对apache的php抓取项目进行介绍。apachephp抓取包括了apache对于get和post请求的封装,对于页面中存在html代码的请求还封装了gzip和encoding,所以这样做非常方便。
  
  最后通过apache的tomcat作为web容器,将抓取结果存储到localhost下,便于之后apache后端负责解析数据库数据,因此通常不需要编写后端代码。(php的后端代码一般在业务层。)web抓取php在apache的后端有:请求/响应的各种数据格式、请求/响应的各种参数格式、请求/响应的各种接口数据格式、请求/响应的各种返回格式等。
  当然要封装这些请求和响应格式需要使用apache的http库,本文只介绍apache的http库,其他请求响应库如何封装请自行google。apachehttp库封装。有一些php扩展可以直接访问请求、响应头和cookie。但是请求登录、form表单(无论get还是post)等各种请求头,因为涉及到数据库操作,php扩展一般无法访问。
  
  php提供了几个小扩展支持请求、响应头,通过此类扩展也可以实现一个简单的后端程序。一般把此类扩展都封装成了php扩展来用,如httpurlconnection、weburlconnection、apacheinfo、apacheseleno等。使用方法:#-*-coding:utf-8-*-importosimportsysimporturllibimporttimeimportwebbrowserasbrowserimportthreadingimportosimportsysimporturllib#指定定义访问的端口为8080#指定提交表单/cookie的参数个数,超过则使用默认值;input_cookie的path="/about.php",意思是指定请求/响应头的路径param=r'user[accept]|host[accept-language]=anonymous'param=r'temp'#提交表单/cookiecookie=r'temp=test'form=browser.open('about.php',8080)#param属性指定调用本php扩展对数据库、表单、session等进行操作的参数param=r'location'#指定请求/响应头的路径param=r'form'param=r'name'#指定请求/响应头的username和password。
  第一个参数字符集为utf-8,意思是php要处理的一切utf-8字符的数据,后面两个参数base64的默认值都是ascii,意思是所有字符都会被解码成ascii,我们使用base64解码之后,就是可以通过javascript直接获取数据。#当php遇到'anonymous'的字符时执行对应php扩展的post方法$param=r'anonymous='+param#要转换的字符为ascii格式。 查看全部

  apachephp可以抓取网页数据吗?回答可以的。。
  php可以抓取网页数据吗?回答可以的。如果想借助php程序抓取网页的html代码,那么有很多选择,本文主要针对apache的php抓取项目进行介绍。apachephp抓取包括了apache对于get和post请求的封装,对于页面中存在html代码的请求还封装了gzip和encoding,所以这样做非常方便。
  
  最后通过apache的tomcat作为web容器,将抓取结果存储到localhost下,便于之后apache后端负责解析数据库数据,因此通常不需要编写后端代码。(php的后端代码一般在业务层。)web抓取php在apache的后端有:请求/响应的各种数据格式、请求/响应的各种参数格式、请求/响应的各种接口数据格式、请求/响应的各种返回格式等。
  当然要封装这些请求和响应格式需要使用apache的http库,本文只介绍apache的http库,其他请求响应库如何封装请自行google。apachehttp库封装。有一些php扩展可以直接访问请求、响应头和cookie。但是请求登录、form表单(无论get还是post)等各种请求头,因为涉及到数据库操作,php扩展一般无法访问。
  
  php提供了几个小扩展支持请求、响应头,通过此类扩展也可以实现一个简单的后端程序。一般把此类扩展都封装成了php扩展来用,如httpurlconnection、weburlconnection、apacheinfo、apacheseleno等。使用方法:#-*-coding:utf-8-*-importosimportsysimporturllibimporttimeimportwebbrowserasbrowserimportthreadingimportosimportsysimporturllib#指定定义访问的端口为8080#指定提交表单/cookie的参数个数,超过则使用默认值;input_cookie的path="/about.php",意思是指定请求/响应头的路径param=r'user[accept]|host[accept-language]=anonymous'param=r'temp'#提交表单/cookiecookie=r'temp=test'form=browser.open('about.php',8080)#param属性指定调用本php扩展对数据库、表单、session等进行操作的参数param=r'location'#指定请求/响应头的路径param=r'form'param=r'name'#指定请求/响应头的username和password。
  第一个参数字符集为utf-8,意思是php要处理的一切utf-8字符的数据,后面两个参数base64的默认值都是ascii,意思是所有字符都会被解码成ascii,我们使用base64解码之后,就是可以通过javascript直接获取数据。#当php遇到'anonymous'的字符时执行对应php扩展的post方法$param=r'anonymous='+param#要转换的字符为ascii格式。

php可以抓取网页数据吗?-郭向立的回答

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-08-29 04:05 • 来自相关话题

  php可以抓取网页数据吗?-郭向立的回答
  php可以抓取网页数据吗?-郭向立的回答,谷歌爬虫抓取网页都是过滤javascript代码的,先抓取html中的网页元素,如title,content。然后用tagul将此html文档过滤了去除该javascript代码。headers和post数据都过滤掉。所以这个爬虫原理就是爬取到html文档,然后清除掉tagul过滤掉的javascript代码,然后返回给服务器一个html字符串。
  
  你可以考虑尝试用黑客手段给站点上锁。
  搜狐、凤凰等大站网站都被封锁了。搜狐首页,还限制上爬虫、留邮箱等...凤凰、谷歌试了都是静态页面,都上不去,什么情况呢?暂且不说,可能是php执行速度太慢了吧。so如果想用php爬虫抓取web站点,可以看看easyui模板引擎怎么抓取html,写一个引擎抓。也不要执行javascript脚本,抓取速度慢的一塌糊涂,人家没有必要搭理。
  
  php可以抓网页数据,谷歌学术上介绍了一些大牛的爬虫工具,详细说明了php在谷歌学术上有哪些应用。和php执行效率相比,无非是爬虫工具将数据转化为爬虫语言的形式返回给php函数,比如转化为php函数的形式。至于php抓取网页数据,其实只是抓取html或者javascript,并不直接获取该数据。这和php执行效率也没有关系。
  可以尝试用uwsgi服务来处理服务器端php页面的script代码,加上浏览器的缓存机制。如果在国内的话(国内抓取速度太慢),使用阿里云ecs做个php的webserver,自己写个php服务器抓取页面,然后将数据封装到json格式。用json格式请求java和php的页面,效率还是比较快的,速度也没快到突破天际的那种程度。百度云欢迎来钓鱼。 查看全部

  php可以抓取网页数据吗?-郭向立的回答
  php可以抓取网页数据吗?-郭向立的回答,谷歌爬虫抓取网页都是过滤javascript代码的,先抓取html中的网页元素,如title,content。然后用tagul将此html文档过滤了去除该javascript代码。headers和post数据都过滤掉。所以这个爬虫原理就是爬取到html文档,然后清除掉tagul过滤掉的javascript代码,然后返回给服务器一个html字符串。
  
  你可以考虑尝试用黑客手段给站点上锁。
  搜狐、凤凰等大站网站都被封锁了。搜狐首页,还限制上爬虫、留邮箱等...凤凰、谷歌试了都是静态页面,都上不去,什么情况呢?暂且不说,可能是php执行速度太慢了吧。so如果想用php爬虫抓取web站点,可以看看easyui模板引擎怎么抓取html,写一个引擎抓。也不要执行javascript脚本,抓取速度慢的一塌糊涂,人家没有必要搭理。
  
  php可以抓网页数据,谷歌学术上介绍了一些大牛的爬虫工具,详细说明了php在谷歌学术上有哪些应用。和php执行效率相比,无非是爬虫工具将数据转化为爬虫语言的形式返回给php函数,比如转化为php函数的形式。至于php抓取网页数据,其实只是抓取html或者javascript,并不直接获取该数据。这和php执行效率也没有关系。
  可以尝试用uwsgi服务来处理服务器端php页面的script代码,加上浏览器的缓存机制。如果在国内的话(国内抓取速度太慢),使用阿里云ecs做个php的webserver,自己写个php服务器抓取页面,然后将数据封装到json格式。用json格式请求java和php的页面,效率还是比较快的,速度也没快到突破天际的那种程度。百度云欢迎来钓鱼。

php可以抓取网页数据吗?可以解决我们php爬虫的一些问题

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-08-04 12:06 • 来自相关话题

  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题
  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题,我们知道,在php语言之上的数据库采用关系型数据库系统mysql(商业版本大约在3~6万元左右),如果需要php的原生数据库,我们可以使用php的web服务器来加载,这样就可以从php代码里面获取数据了。web服务器可以是本地的php服务器,也可以是云服务器,还可以通过git来实现。
  
  当然,一般用云服务器更加方便一些,因为一般php的写法和用法比较多,因此,云服务器可以设置不同的密码和访问权限来保证安全性。但是,我们在开发php爬虫时,数据是来自于客户端的请求,要从爬虫服务器获取数据,需要先获取客户端网络的tcp/ip地址和端口,还要在请求发送到服务器之前把自己的账号密码发送给服务器,而这些问题在本地的web服务器上实现还是比较麻烦,这时就可以借助抓包工具或者webrtc协议模块来对发送给爬虫服务器的请求进行解析,得到数据。
  抓包工具有很多,比如scapy,比如paramatic,我们可以把抓取到的数据,保存在本地,继续进行爬虫优化(本文只涉及爬虫优化问题)。那么,我们到底要从php代码里面获取数据,要用到什么工具呢?php官方的爬虫工具——requestslib,我们没有在php代码中直接开发爬虫代码,所以不能直接用,我们通过正则表达式匹配各种条件,然后用requestslib的正则表达式来解析requests连接返回的数据(如果没有网络或者设置过正则表达式,此过程可能需要selenium模拟浏览器登录,但是只需要抓包获取主动发出的请求即可获取)。
  
  如下图:下面是requestslibdemo,此过程中存在三个必要条件:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
  在上述网页数据中,用requestslib去提取文字的时候,大约需要三步:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
<p>下面一步一步来演示,正则表达式的匹配规则如下:letmap=newhashmap();for(leti=0;i 查看全部

  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题
  php可以抓取网页数据吗?可以解决我们php爬虫的一些问题,我们知道,在php语言之上的数据库采用关系型数据库系统mysql(商业版本大约在3~6万元左右),如果需要php的原生数据库,我们可以使用php的web服务器来加载,这样就可以从php代码里面获取数据了。web服务器可以是本地的php服务器,也可以是云服务器,还可以通过git来实现。
  
  当然,一般用云服务器更加方便一些,因为一般php的写法和用法比较多,因此,云服务器可以设置不同的密码和访问权限来保证安全性。但是,我们在开发php爬虫时,数据是来自于客户端的请求,要从爬虫服务器获取数据,需要先获取客户端网络的tcp/ip地址和端口,还要在请求发送到服务器之前把自己的账号密码发送给服务器,而这些问题在本地的web服务器上实现还是比较麻烦,这时就可以借助抓包工具或者webrtc协议模块来对发送给爬虫服务器的请求进行解析,得到数据。
  抓包工具有很多,比如scapy,比如paramatic,我们可以把抓取到的数据,保存在本地,继续进行爬虫优化(本文只涉及爬虫优化问题)。那么,我们到底要从php代码里面获取数据,要用到什么工具呢?php官方的爬虫工具——requestslib,我们没有在php代码中直接开发爬虫代码,所以不能直接用,我们通过正则表达式匹配各种条件,然后用requestslib的正则表达式来解析requests连接返回的数据(如果没有网络或者设置过正则表达式,此过程可能需要selenium模拟浏览器登录,但是只需要抓包获取主动发出的请求即可获取)。
  
  如下图:下面是requestslibdemo,此过程中存在三个必要条件:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
  在上述网页数据中,用requestslib去提取文字的时候,大约需要三步:从目标服务器上获取tcp/ip地址和端口;获取这些请求的headers,然后解析headers来获取不同数据(包括requests的headers里面的头部和post的headers里面的头部);解析到我们需要的数据之后,添加到我们自己的web服务器中。
<p>下面一步一步来演示,正则表达式的匹配规则如下:letmap=newhashmap();for(leti=0;i

php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-08-01 21:06 • 来自相关话题

  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?
  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?另一位答主的答案很详细,只不过他给出的php抓取网页数据的代码有一个拼写错误。无论这位答主在回答中选择哪种方式,都不能很好地解决题主的问题。
  1、这个php代码用了标准拼写,例如mcdonald_from_complete_name,你的php代码可能拼写全是“mcdonald_from_complete_name”,导致网页url乱码,解决方法就是保证自己的写法在“mcdonald_from_complete_name”前不要有空格或非法字符,如果可能的话使用双引号。
  2、php缺少字符集支持,通常我们都是使用pcre字符集,它是微软定制的,而且使用的字符集是utf-8;关于movword类我不是很熟悉,更新一下这个网站,让答主更加了解这个php。但是微软并没有规定pcre字符集,因此我们无法读取外国网站的数据,我们通常使用网页特征码解析。
  
  以下是我补充的常用开源网站数据解析库apache常用开源解析库scrapy原理解析方法:
  1、curl
  2、ncapache环境,use‘/’并且加上/spf:nc="bbc15/"prefix=/xvf:nc="bbc15/"prefix="bbc"subwrite="%s%20%20"%4这句代码能够读取网页上的内容。也就是我给你的php代码,就是给你一个pcre字符集,你读取下表格中的内容。也有可能读取字符串然后再转换成数组,然后数组中存储一个叫做bbcname的字符串串,存储这个字符串就可以了。另外补充一下,网页上要是有多个字符串的话,php还需要再读取一次。
  3、使用二元字符集nul字符集来破解apache网页源码我们通常不会去获取数据的源码,apache其实加密了数据,和加密后的php代码匹配,就可以读取数据了。我选择apache,因为读取和解密的效率有保证。这里讲到二元字符集,也是因为一些网站会带有js,利用js脚本去读取网页,当然是数据结构无关,php可以解密js,还可以进行其他操作。
  
  php使用js脚本破解url到数据:libfuture-javascript无需解码,解析js:jquery不需要解码,解析js:domauthorizer已经解密:webpack以上都是通过反向代理的方式,读取一个数据包,反向生成js脚本,解密后生成json数据。最后,回到题主的问题。
  中国的网站,
  1、其他网站,例如贴吧、天涯等站点,可以找百度知道这种网站,答案就是一个json数据,解密后就是你要的数据。
  2、淘宝、天猫等,参考类似的问题。如果一定要采用爬虫,下面就给出一些网站。手机连接知乎。以下是分析的思路,网站才是关键。 查看全部

  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?
  php可以抓取网页数据吗?php采用语言暴力破解的方式是否可行?另一位答主的答案很详细,只不过他给出的php抓取网页数据的代码有一个拼写错误。无论这位答主在回答中选择哪种方式,都不能很好地解决题主的问题。
  1、这个php代码用了标准拼写,例如mcdonald_from_complete_name,你的php代码可能拼写全是“mcdonald_from_complete_name”,导致网页url乱码,解决方法就是保证自己的写法在“mcdonald_from_complete_name”前不要有空格或非法字符,如果可能的话使用双引号。
  2、php缺少字符集支持,通常我们都是使用pcre字符集,它是微软定制的,而且使用的字符集是utf-8;关于movword类我不是很熟悉,更新一下这个网站,让答主更加了解这个php。但是微软并没有规定pcre字符集,因此我们无法读取外国网站的数据,我们通常使用网页特征码解析。
  
  以下是我补充的常用开源网站数据解析库apache常用开源解析库scrapy原理解析方法:
  1、curl
  2、ncapache环境,use‘/’并且加上/spf:nc="bbc15/"prefix=/xvf:nc="bbc15/"prefix="bbc"subwrite="%s%20%20"%4这句代码能够读取网页上的内容。也就是我给你的php代码,就是给你一个pcre字符集,你读取下表格中的内容。也有可能读取字符串然后再转换成数组,然后数组中存储一个叫做bbcname的字符串串,存储这个字符串就可以了。另外补充一下,网页上要是有多个字符串的话,php还需要再读取一次。
  3、使用二元字符集nul字符集来破解apache网页源码我们通常不会去获取数据的源码,apache其实加密了数据,和加密后的php代码匹配,就可以读取数据了。我选择apache,因为读取和解密的效率有保证。这里讲到二元字符集,也是因为一些网站会带有js,利用js脚本去读取网页,当然是数据结构无关,php可以解密js,还可以进行其他操作。
  
  php使用js脚本破解url到数据:libfuture-javascript无需解码,解析js:jquery不需要解码,解析js:domauthorizer已经解密:webpack以上都是通过反向代理的方式,读取一个数据包,反向生成js脚本,解密后生成json数据。最后,回到题主的问题。
  中国的网站,
  1、其他网站,例如贴吧、天涯等站点,可以找百度知道这种网站,答案就是一个json数据,解密后就是你要的数据。
  2、淘宝、天猫等,参考类似的问题。如果一定要采用爬虫,下面就给出一些网站。手机连接知乎。以下是分析的思路,网站才是关键。

php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?

网站优化优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-07-02 08:10 • 来自相关话题

  php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?
  php可以抓取网页数据吗?通过php抓取网页数据的操作过程及原理是什么?可以爬取自己网站上的,包括.cn和.com域名的网页数据,当然有些.com域名的网页是cookie加密解密处理后抓取下来的,当然也可以抓取服务器上的网页,但是没有.cn的权威,网页中被加密的乱七八糟网址也没办法拿来用来做网页爬虫获取数据。
  所以要注意判断哪些网址可以用php拿来爬取?例如,小云存储cloudmagic在linux中可以完全通过php抓取云存储的网页数据,而phpwind在windows上抓取,都有权限问题,用phpwind来抓取其实并不安全。php是不是就只能爬虫网页数据?能爬虫什么?就是php可以抓取网页数据,但是爬虫的数据格式通常和网页数据一致,爬虫和网页差异比较大,目前除了把爬虫应用于web服务,例如淘宝、天猫等电商网站,所有的php爬虫都没有被归为爬虫范畴。
  
  我们说php爬虫和网页数据一致有三个方面,一是数据格式一致,网页数据是json,爬虫数据也是json格式,这个是基本一致,二是抓取速度一致,例如小云存储cloudmagic的抓取速度几十毫秒,php记录的都是http协议下的网页数据,速度有区别,三是权限问题,其实也就是爬虫爬取到的数据内容对原服务器是否安全,在国内,如果爬虫没有权限或非法抓取,爬虫的爬取速度是无法达到标准,就有可能被禁止访问。
  php可以post获取数据吗?不能!!!数据传输要求是明文传输,如果有加密解密就不行了,post获取数据之后要发送给服务器,如果发送给服务器后服务器支持幂等性,并且存在密钥,那你的数据是安全的,但是如果不能保证幂等性,那你的数据就是不安全的,并且有很多ssl证书需要证明你是被授权的,所以存在一定风险。
  可以post,stream,punto对数据进行操作吗?可以。例如可以把数据保存在ntfs目录下,完全可以把数据发送给服务器,把ntfs目录下的数据,复制一份,通过phpstream操作把数据同步到另一台服务器,在另一台服务器上进行ntfs读写操作,并且和本地一致。可以推荐工具吗?爬虫工具还是有的,例如小云存储,爬虫容器greendao,爬虫ui部署到github,爬虫vps等,有一些大厂有支持这些php爬虫工具。(。
  
  1)推荐工具,因为其他工具比如集成环境没有这些爬虫工具好用。
  2)推荐工具,因为可以直接抓取数据,不需要再单独抓取很多中间网站,大大节省中间代理存储费用。
  3)php爬虫工具配置:
  4)推荐工具,这些工具用于phpweb开发、简单爬虫入门、爬虫联调等场景非常方便,相比花费了大量时间配置一套完整工具, 查看全部

  php可以抓取网页数据吗?通过php抓取数据的操作过程及原理是什么?
  php可以抓取网页数据吗?通过php抓取网页数据的操作过程及原理是什么?可以爬取自己网站上的,包括.cn和.com域名的网页数据,当然有些.com域名的网页是cookie加密解密处理后抓取下来的,当然也可以抓取服务器上的网页,但是没有.cn的权威,网页中被加密的乱七八糟网址也没办法拿来用来做网页爬虫获取数据。
  所以要注意判断哪些网址可以用php拿来爬取?例如,小云存储cloudmagic在linux中可以完全通过php抓取云存储的网页数据,而phpwind在windows上抓取,都有权限问题,用phpwind来抓取其实并不安全。php是不是就只能爬虫网页数据?能爬虫什么?就是php可以抓取网页数据,但是爬虫的数据格式通常和网页数据一致,爬虫和网页差异比较大,目前除了把爬虫应用于web服务,例如淘宝、天猫等电商网站,所有的php爬虫都没有被归为爬虫范畴。
  
  我们说php爬虫和网页数据一致有三个方面,一是数据格式一致,网页数据是json,爬虫数据也是json格式,这个是基本一致,二是抓取速度一致,例如小云存储cloudmagic的抓取速度几十毫秒,php记录的都是http协议下的网页数据,速度有区别,三是权限问题,其实也就是爬虫爬取到的数据内容对原服务器是否安全,在国内,如果爬虫没有权限或非法抓取,爬虫的爬取速度是无法达到标准,就有可能被禁止访问。
  php可以post获取数据吗?不能!!!数据传输要求是明文传输,如果有加密解密就不行了,post获取数据之后要发送给服务器,如果发送给服务器后服务器支持幂等性,并且存在密钥,那你的数据是安全的,但是如果不能保证幂等性,那你的数据就是不安全的,并且有很多ssl证书需要证明你是被授权的,所以存在一定风险。
  可以post,stream,punto对数据进行操作吗?可以。例如可以把数据保存在ntfs目录下,完全可以把数据发送给服务器,把ntfs目录下的数据,复制一份,通过phpstream操作把数据同步到另一台服务器,在另一台服务器上进行ntfs读写操作,并且和本地一致。可以推荐工具吗?爬虫工具还是有的,例如小云存储,爬虫容器greendao,爬虫ui部署到github,爬虫vps等,有一些大厂有支持这些php爬虫工具。(。
  
  1)推荐工具,因为其他工具比如集成环境没有这些爬虫工具好用。
  2)推荐工具,因为可以直接抓取数据,不需要再单独抓取很多中间网站,大大节省中间代理存储费用。
  3)php爬虫工具配置:
  4)推荐工具,这些工具用于phpweb开发、简单爬虫入门、爬虫联调等场景非常方便,相比花费了大量时间配置一套完整工具,

php可以抓取网页数据吗?get方法怎么抓取数据?

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-28 09:00 • 来自相关话题

  php可以抓取网页数据吗?get方法怎么抓取数据?
  php可以抓取网页数据吗?相信这个问题一定会让很多小伙伴心生疑问。当然,如果是想要从php获取数据信息还是能够实现的,只要通过某种php脚本语言来实现,例如php5.x版本,提供了多种方法可以支持php爬虫的实现,爬取网页上的内容,实现一些功能和特效。但是这其中依然有很多限制条件,在不同的php版本上也可能会出现一些问题。
  
  也就是说,这其中的缺陷依然让一些用户望而却步。在这里可以提供一个php抓取网页数据的脚本工具,工具所用的版本是php5.4版本,可以满足大部分开发需求。其中网站数据内容都是针对twitter、pinterest、blogger等国外网站。好了,就不再赘述,可以通过下面的链接直接获取:本教程不会对外开放,但我们的php版本不低于php5.4(至少3.5)。
  
  使用工具的php版本不低于php5.4(至少3.5)。这个工具和传统的抓取网页数据需要在浏览器下通过xhr文件请求的方式获取是不同的,我们没有添加浏览器的viewlistener,而是通过使用php自带的request::open_http_frame()方法来获取网页数据。其中php自带的request::open_http_frame()方法既包含get()方法也包含post()方法,还可以包含其他方法。
  利用这个方法我们就可以完成数据抓取了。get方法抓取数据的端口是8080,tcp连接会被request::close_http_frame禁止,那么get方法怎么抓取数据呢?有几种方法:通过调用select方法,用if指令判断数据是否会被显示;通过str_replace方法把部分单词拼写错误的数据替换,如果替换为正确的,则把错误的拼写忽略;通过str_replace的副作用把正确的拼写替换为错误的拼写;通过正则表达式匹配目标中的单词;利用urlparse方法自动加载生成的url文件;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用select方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用正则表达式抓取单词替换后的字符串;利用正则表达式抓取单词替换后的字符串;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用str_replace方法把部分单词拼写错误的数据替换;利用str_replace的副作用把正确的拼写替换为错误的拼写;利用正则表达式匹配目标中的单词;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用str_r。 查看全部

  php可以抓取网页数据吗?get方法怎么抓取数据?
  php可以抓取网页数据吗?相信这个问题一定会让很多小伙伴心生疑问。当然,如果是想要从php获取数据信息还是能够实现的,只要通过某种php脚本语言来实现,例如php5.x版本,提供了多种方法可以支持php爬虫的实现,爬取网页上的内容,实现一些功能和特效。但是这其中依然有很多限制条件,在不同的php版本上也可能会出现一些问题。
  
  也就是说,这其中的缺陷依然让一些用户望而却步。在这里可以提供一个php抓取网页数据的脚本工具,工具所用的版本是php5.4版本,可以满足大部分开发需求。其中网站数据内容都是针对twitter、pinterest、blogger等国外网站。好了,就不再赘述,可以通过下面的链接直接获取:本教程不会对外开放,但我们的php版本不低于php5.4(至少3.5)。
  
  使用工具的php版本不低于php5.4(至少3.5)。这个工具和传统的抓取网页数据需要在浏览器下通过xhr文件请求的方式获取是不同的,我们没有添加浏览器的viewlistener,而是通过使用php自带的request::open_http_frame()方法来获取网页数据。其中php自带的request::open_http_frame()方法既包含get()方法也包含post()方法,还可以包含其他方法。
  利用这个方法我们就可以完成数据抓取了。get方法抓取数据的端口是8080,tcp连接会被request::close_http_frame禁止,那么get方法怎么抓取数据呢?有几种方法:通过调用select方法,用if指令判断数据是否会被显示;通过str_replace方法把部分单词拼写错误的数据替换,如果替换为正确的,则把错误的拼写忽略;通过str_replace的副作用把正确的拼写替换为错误的拼写;通过正则表达式匹配目标中的单词;利用urlparse方法自动加载生成的url文件;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用async方法调用get参数;利用select方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用正则表达式抓取单词替换后的字符串;利用正则表达式抓取单词替换后的字符串;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用str_replace方法把部分单词拼写错误的数据替换;利用str_replace的副作用把正确的拼写替换为错误的拼写;利用正则表达式匹配目标中的单词;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用async方法抓取网页数据;利用awaitinclude方法查找所有相关字段;利用str_r。

Python 获取网易云音乐热门评论

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-06-21 04:27 • 来自相关话题

  Python 获取网易云音乐热门评论
  (点击上方蓝字,快速关注我们)
  来源:lyrichu
  最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。
  那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,python 等,我个人比较喜欢使用python。因为python不仅有着内置的功能强大的网络库,还有诸多优秀的第三方库,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的方便。不夸张地说,使用不到10行python代码其实就可以写一个小小的爬虫,而使用其他的语言可以要多写很多代码,简洁易懂正是python的巨大的优势。
  好了废话不多说,进入今天的正题。最近几年网易云音乐火了起来,我自己就是网易云音乐的用户,用了几年了。以前用的是QQ音乐和酷狗,通过我自己的亲身经历来看,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论(郑重声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。经常一首歌曲下面会有一些被点赞众多的神评论。加上前些日子网易云音乐将精选用户评论搬上了地铁,网易云音乐的评论又火了一把。所以我想对网易云的评论进行分析,发现其中的规律,特别是分析一些热评具有什么共同的特点。带着这个目的,我开始了对网易云评论的抓取工作。
  python内置了两个网络库urllib和urllib2,但是这两个库使用起来不是特别方便,所以在这里我们使用一个广受好评的第三方库requests。使用requests只用很少的几行代码就可以实现设置代理,模拟登陆等比较复杂的爬虫工作。如果已经安装pip的话,直接使用pip install requests 即可安装。中文文档地址在此,大家有什么问题可以自行参考官方文档,上面会有非常详细的介绍。至于urllib和urllib2这两个库也是比较有用的,以后如果有机会我会再给大家介绍一下。
  在正式开始介绍爬虫之前,首先来说一下爬虫的基本工作原理,我们知道我们打开浏览器访问某个网址本质上是向服务器发送了一定的请求,服务器在收到我们的请求之后,会根据我们的请求返回数据,然后通过浏览器将这些数据解析好,呈现在我们的面前。如果我们使用代码的话,就要跳过浏览器的这个步骤,直接向服务器发送一定的数据,然后再取回服务器返回的数据,提取出我们想要的信息。但是问题是,有的时候服务器需要对我们发送的请求进行校验,如果它认为我们的请求是非法的,就会不返回数据,或者返回错误的数据。所以为了避免发生这种情况,我们有的时候需要把程序伪装成一个正常的用户,以便顺利得到服务器的回应。如何伪装呢?这就要看用户通过浏览器访问一个网页与我们通过程序访问一个网页之间的区别。通常来说,我们通过浏览器访问一个网页,除了发送访问的url之外,还会给服务发送额外的信息,比如headers(头部信息)等,这就相当于是请求的身份证明,服务器看到了这些数据,就会知道我们是通过正常的浏览器访问的,就会乖乖地返回数据给我们了。所以我们程序就得像浏览器一样,在发送请求的时候,带上这些标志着我们身份的信息,这样就能顺利拿到数据。有的时候,我们必须在登录状态下才能得到一些数据,所以我们必须要模拟登录。本质上来说,通过浏览器登录就是post一些表单信息给服务器(包括用户名,密码等信息),服务器校验之后我们就可以顺利登录了,利用程序也是一样,浏览器post什么数据,我们原样发送就可以了。关于模拟登录,我后面会专门介绍一下。当然事情有的时候也不会这么顺利,因为有些网站设置了反爬措施,比如如果访问过快,有时候会被封ip(典型的比如豆瓣)。这个时候我们还得要设置代理服务器,即变更我们的ip地址,如果一个ip被封了,就换另外一个ip,具体怎么做,这些话题以后慢慢再说。
  最后,再介绍一个我认为在写爬虫过程中非常有用的一个小技巧。如果你在使用火狐浏览器或者chrome的话,也许你会注意到有一个叫作开发者工具(chrome)或者web控制台(firefox)的地方。这个工具非常有用,因为利用它,我们可以清楚地看到在访问一个网站的过程中,浏览器到底发送了什么信息,服务器究竟返回了什么信息,这些信息是我们写爬虫的关键所在。下面你就会看到它的巨大用处。
  ————————正式开始的分割线——————————
  首先打开网易云音乐的网页版,随便选择一首歌曲打开它的网页,这里我以周杰伦的《晴天》为例。如下图1
  
  图1
  接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),如下图2
  
  图2
  然后这个时候我们需要点选网络,清除所有的信息,然后点击重新发送(相当于是刷新浏览器),这样我们就可以直观看到浏览器发送了什么信息以及服务器回应了什么信息。如下图3
  
  图3
  刷新之后得到的数据如下图4所示:
  图4
  可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。如下图5所示:
  图5
  通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。注意图5中的请求网址一栏即是我们想要请求的网址,请求的方法有两种:get和post,还有一个需要重点关注的就是请求头,里面包含了user-Agent(客户端信息),refrence(从何处跳转过来)等多种信息,一般无论是get还是post方法我们都会把头部信息带上。头部信息如下图6所示:
  图6
  另外还需要注意的是:get请求一般就直接把请求的参数以?parameter1=value1&parameter2=value2 等这样的形式发送了,所以不需要带上额外的请求参数,而post请求则一般需要带上额外的参数,而不直接把参数放在url当中,所以有的时候我们还需要关注参数这一栏。经过仔细寻找,我们终于找到原来与评论相关的请求在 这个请求当中,如下图7所示:
  图7
  点开这个请求,我们发现它是一个post请求,请求的参数有两个,一个是params,还有一个是encSecKey,这两个参数的值非常的长,感觉应该像是加密过的。如下图8所示:
  
  图8
  服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),如下图9所示:(其实hotComments为热门评论,comments为评论数组)
  
  图9
  至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可,这个问题困扰了我一下午,我弄了很久也没有搞清楚这两个参数的加密方式,但是我发现了一个规律, 中 R_SO_4_后面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌比如A的这两个参数值传给B这首歌,那么对于相同的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得相应歌曲的第一页的评论,对于第二页,第三页等也是类似。但是遗憾的是,不同的页数参数是不同的,这种办法只能抓取有限的几页(当然抓取评论总数和热门评论已经足够了),如果要想抓取全部数据,就必须搞明白这两个参数值的加密方式。以为没有搞明白,昨天晚上我带着这个问题去知乎搜索了一下,居然真的被我找到了答案。在这个问题 下,@平胸小仙女 这位知友详细说明了如何破解这两个参数的加密过程,我研究了一下,发现还是有点小复杂的,按照他写的方法,我改动了一下,就成功得到了全部的评论。这里要对@平胸小仙女(个人主页 )表示感谢。如果大家对于破解参数加密有兴趣的话,可以去直接参考原帖,地址是:。
  到此为止,如何抓取网易云音乐的评论全部数据就全部讲完了。按照惯例,最后上代码,亲测有效:
  #!/usr/bin/env python2.7
  # -*- coding: utf-8 -*-
  # @Time : 2017/3/28 8:46
  # @Author : Lyrichu
  # @Email:
  # @File : NetCloud_spider3.py
  '''
  @Description:
  网易云音乐评论爬虫,可以完整爬取整个评论
  部分参考了@平胸小仙女的文章(地址:)
  post加密部分也给出了,可以参考原帖:
  作者:平胸小仙女
  来源:知乎
  '''
  from Crypto.Cipher import AES
  import base64
  import requests
  import json
  import codecs
  import time
  # 头部信息
  headers = {
  'Host':"",
  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  'Accept-Encoding':"gzip, deflate",
  'Content-Type':"application/x-www-form-urlencoded",
  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,27; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A80; _iuqxldmzr_=32; vjuids=c8ca7976。15a029d006a。0。51373751e63af8; vjlast=1486102528。1490172479。21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e。
  1。1。69。05。42; P_INFO=m@163。com|1489375076|1|study|00&99|null&null&null#hub&420100#10#0#0|155439&1|study_client|@163。com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg。ws。126。net%2Fe%2Fimg5。cache。netease。com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62。png。39x39。100。jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1。2。1549851014。1489469781; __utma=94650624。1549851014。
  1489469781。1490664577。1490672820。8; __utmc=94650624; __utmz=94650624。1490661822。6。2。utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624。23。10。1490672820",
  'Connection':"keep-alive",
  'Referer':''
  }
  # 设置代理服务器
  proxies= {
  'http:':'',
  'https:':''
  }
  # offset的取值为:(评论页数-1)*20,total第一页为true,其余页为false
  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数
  second_param = "010001"# 第二个参数
  # 第三个参数
  third_param = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
  # 第四个参数
  forth_param = "0CoJUm6Qyw8W8jud"
  # 获取参数
  def get_params(page): # page为传入页数
  iv = "60708"
  first_key = forth_param
  second_key = 16 * 'F'
  if(page == 1): # 如果为第一页
  first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'
  h_encText = AES_encrypt(first_param,first_key,iv)
  else:
  offset = str((page-1)*20)
  first_param = '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}' %(offset,'false')
  h_encText = AES_encrypt(first_param,first_key,iv)
  h_encText = AES_encrypt(h_encText,second_key,iv)
  returnh_encText
  # 获取 encSecKey
  def get_encSecKey():
  encSecKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"
  returnencSecKey
  # 解密过程
  def AES_encrypt(text,key,iv):
  pad = 16 - len(text) % 16
  text = text + pad *chr(pad)
  encryptor = AES.new(key,AES.MODE_CBC,iv)
  encrypt_text = encryptor.encrypt(text)
  encrypt_text = base64.b64encode(encrypt_text)
  returnencrypt_text
  # 获得评论json数据
  def get_json(url,params,encSecKey):
  data = {
  "params": params,
  "encSecKey": encSecKey
  }
  response = requests.post(url,headers=headers,data=data,proxies = proxies)
  returnresponse.content
  # 抓取热门评论,返回热评列表
  def get_hot_comments(url):
  hot_comments_list = []
  hot_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")
  params = get_params(1)# 第一页
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  hot_comments = json_dict['hotComments']# 热门评论
  print("共有%d条热门评论!" % len(hot_comments))
  foritem inhot_comments:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userID']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = userID + " " + nickname + " " + avatarUrl + " " + comment_time + " " + likedCount + " " + comment + u"\n"
  hot_comments_list.append(comment_info)
  returnhot_comments_list
  # 抓取某一首歌的全部评论
  def get_all_comments(url):
  all_comments_list = []# 存放所有评论
  all_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")# 头部信息
  params = get_params(1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  comments_num = int(json_dict['total'])
  if(comments_num % 20 == 0):
  page = comments_num / 20
  else:
  page = int(comments_num / 20) + 1
  print("共有%d页评论!" % page)
  foriinrange(page):# 逐页抓取
  params = get_params(i+1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  ifi == 0:
  print("共有%d条评论!" % comments_num)# 全部评论总数
  foritem injson_dict['comments']:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userId']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = unicode(userID) + u" " + nickname + u" " + avatarUrl + u" " + unicode(comment_time) + u" " + unicode(likedCount) + u" " + comment + u"\n"
  all_comments_list.append(comment_info)
  print("第%d页抓取完毕!" % (i+1))
  returnall_comments_list
  # 将评论写入文本文件
  def save_to_file(list,filename):
  with codecs.open(filename,'a',encoding='utf-8')asf:
  f.writelines(list)
  print("写入文件成功!")
  if__name__ == "__main__":
  start_time = time.time()# 开始时间
  url = ""
  filename = u"晴天.txt"
  all_comments_list = get_all_comments(url)
  save_to_file(all_comments_list,filename)
  end_time = time.time()#结束时间
  print("程序耗时%f秒." % (end_time - start_time))
  我利用上述代码跑了一下,抓了两首周杰伦的热门歌曲《晴天》(有130多万评论)和《告白气球》(有20多万评论),前者跑了大概有20多分钟,后者有6600多秒(也就是将近2个小时),截图如下:
  
  注意我是按照空格来分隔的,每一行分别有用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容 这些内容。我将这两个txt文件上传到百度云了,对数据感兴趣的同学可以直接下载进行文本分析,地址为:《晴天》(),《告白气球》(),或者自己跑一下代码抓取一下也是可以的(注意不要开太多线程给网易云的服务器太大压力哦~~中间有一段时间服务器返回数据特别慢,不知道是不是限制访问了,后来又好了)。我后面也许会自己去对评论数据进行可视化分析,敬请期待!
  看完本文有收获?请转发分享给更多人
  关注「Python开发者」,提升Python技能 查看全部

  Python 获取网易云音乐热门评论
  (点击上方蓝字,快速关注我们)
  来源:lyrichu
  最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。
  那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,python 等,我个人比较喜欢使用python。因为python不仅有着内置的功能强大的网络库,还有诸多优秀的第三方库,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的方便。不夸张地说,使用不到10行python代码其实就可以写一个小小的爬虫,而使用其他的语言可以要多写很多代码,简洁易懂正是python的巨大的优势。
  好了废话不多说,进入今天的正题。最近几年网易云音乐火了起来,我自己就是网易云音乐的用户,用了几年了。以前用的是QQ音乐和酷狗,通过我自己的亲身经历来看,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论(郑重声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。经常一首歌曲下面会有一些被点赞众多的神评论。加上前些日子网易云音乐将精选用户评论搬上了地铁,网易云音乐的评论又火了一把。所以我想对网易云的评论进行分析,发现其中的规律,特别是分析一些热评具有什么共同的特点。带着这个目的,我开始了对网易云评论的抓取工作。
  python内置了两个网络库urllib和urllib2,但是这两个库使用起来不是特别方便,所以在这里我们使用一个广受好评的第三方库requests。使用requests只用很少的几行代码就可以实现设置代理,模拟登陆等比较复杂的爬虫工作。如果已经安装pip的话,直接使用pip install requests 即可安装。中文文档地址在此,大家有什么问题可以自行参考官方文档,上面会有非常详细的介绍。至于urllib和urllib2这两个库也是比较有用的,以后如果有机会我会再给大家介绍一下。
  在正式开始介绍爬虫之前,首先来说一下爬虫的基本工作原理,我们知道我们打开浏览器访问某个网址本质上是向服务器发送了一定的请求,服务器在收到我们的请求之后,会根据我们的请求返回数据,然后通过浏览器将这些数据解析好,呈现在我们的面前。如果我们使用代码的话,就要跳过浏览器的这个步骤,直接向服务器发送一定的数据,然后再取回服务器返回的数据,提取出我们想要的信息。但是问题是,有的时候服务器需要对我们发送的请求进行校验,如果它认为我们的请求是非法的,就会不返回数据,或者返回错误的数据。所以为了避免发生这种情况,我们有的时候需要把程序伪装成一个正常的用户,以便顺利得到服务器的回应。如何伪装呢?这就要看用户通过浏览器访问一个网页与我们通过程序访问一个网页之间的区别。通常来说,我们通过浏览器访问一个网页,除了发送访问的url之外,还会给服务发送额外的信息,比如headers(头部信息)等,这就相当于是请求的身份证明,服务器看到了这些数据,就会知道我们是通过正常的浏览器访问的,就会乖乖地返回数据给我们了。所以我们程序就得像浏览器一样,在发送请求的时候,带上这些标志着我们身份的信息,这样就能顺利拿到数据。有的时候,我们必须在登录状态下才能得到一些数据,所以我们必须要模拟登录。本质上来说,通过浏览器登录就是post一些表单信息给服务器(包括用户名,密码等信息),服务器校验之后我们就可以顺利登录了,利用程序也是一样,浏览器post什么数据,我们原样发送就可以了。关于模拟登录,我后面会专门介绍一下。当然事情有的时候也不会这么顺利,因为有些网站设置了反爬措施,比如如果访问过快,有时候会被封ip(典型的比如豆瓣)。这个时候我们还得要设置代理服务器,即变更我们的ip地址,如果一个ip被封了,就换另外一个ip,具体怎么做,这些话题以后慢慢再说。
  最后,再介绍一个我认为在写爬虫过程中非常有用的一个小技巧。如果你在使用火狐浏览器或者chrome的话,也许你会注意到有一个叫作开发者工具(chrome)或者web控制台(firefox)的地方。这个工具非常有用,因为利用它,我们可以清楚地看到在访问一个网站的过程中,浏览器到底发送了什么信息,服务器究竟返回了什么信息,这些信息是我们写爬虫的关键所在。下面你就会看到它的巨大用处。
  ————————正式开始的分割线——————————
  首先打开网易云音乐的网页版,随便选择一首歌曲打开它的网页,这里我以周杰伦的《晴天》为例。如下图1
  
  图1
  接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),如下图2
  
  图2
  然后这个时候我们需要点选网络,清除所有的信息,然后点击重新发送(相当于是刷新浏览器),这样我们就可以直观看到浏览器发送了什么信息以及服务器回应了什么信息。如下图3
  
  图3
  刷新之后得到的数据如下图4所示:
  图4
  可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。如下图5所示:
  图5
  通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。注意图5中的请求网址一栏即是我们想要请求的网址,请求的方法有两种:get和post,还有一个需要重点关注的就是请求头,里面包含了user-Agent(客户端信息),refrence(从何处跳转过来)等多种信息,一般无论是get还是post方法我们都会把头部信息带上。头部信息如下图6所示:
  图6
  另外还需要注意的是:get请求一般就直接把请求的参数以?parameter1=value1&parameter2=value2 等这样的形式发送了,所以不需要带上额外的请求参数,而post请求则一般需要带上额外的参数,而不直接把参数放在url当中,所以有的时候我们还需要关注参数这一栏。经过仔细寻找,我们终于找到原来与评论相关的请求在 这个请求当中,如下图7所示:
  图7
  点开这个请求,我们发现它是一个post请求,请求的参数有两个,一个是params,还有一个是encSecKey,这两个参数的值非常的长,感觉应该像是加密过的。如下图8所示:
  
  图8
  服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),如下图9所示:(其实hotComments为热门评论,comments为评论数组)
  
  图9
  至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可,这个问题困扰了我一下午,我弄了很久也没有搞清楚这两个参数的加密方式,但是我发现了一个规律, 中 R_SO_4_后面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌比如A的这两个参数值传给B这首歌,那么对于相同的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得相应歌曲的第一页的评论,对于第二页,第三页等也是类似。但是遗憾的是,不同的页数参数是不同的,这种办法只能抓取有限的几页(当然抓取评论总数和热门评论已经足够了),如果要想抓取全部数据,就必须搞明白这两个参数值的加密方式。以为没有搞明白,昨天晚上我带着这个问题去知乎搜索了一下,居然真的被我找到了答案。在这个问题 下,@平胸小仙女 这位知友详细说明了如何破解这两个参数的加密过程,我研究了一下,发现还是有点小复杂的,按照他写的方法,我改动了一下,就成功得到了全部的评论。这里要对@平胸小仙女(个人主页 )表示感谢。如果大家对于破解参数加密有兴趣的话,可以去直接参考原帖,地址是:。
  到此为止,如何抓取网易云音乐的评论全部数据就全部讲完了。按照惯例,最后上代码,亲测有效:
  #!/usr/bin/env python2.7
  # -*- coding: utf-8 -*-
  # @Time : 2017/3/28 8:46
  # @Author : Lyrichu
  # @Email:
  # @File : NetCloud_spider3.py
  '''
  @Description:
  网易云音乐评论爬虫,可以完整爬取整个评论
  部分参考了@平胸小仙女的文章(地址:)
  post加密部分也给出了,可以参考原帖:
  作者:平胸小仙女
  来源:知乎
  '''
  from Crypto.Cipher import AES
  import base64
  import requests
  import json
  import codecs
  import time
  # 头部信息
  headers = {
  'Host':"",
  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  'Accept-Encoding':"gzip, deflate",
  'Content-Type':"application/x-www-form-urlencoded",
  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,27; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A80; _iuqxldmzr_=32; vjuids=c8ca7976。15a029d006a。0。51373751e63af8; vjlast=1486102528。1490172479。21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e。
  1。1。69。05。42; P_INFO=m@163。com|1489375076|1|study|00&99|null&null&null#hub&420100#10#0#0|155439&1|study_client|@163。com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg。ws。126。net%2Fe%2Fimg5。cache。netease。com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62。png。39x39。100。jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1。2。1549851014。1489469781; __utma=94650624。1549851014。
  1489469781。1490664577。1490672820。8; __utmc=94650624; __utmz=94650624。1490661822。6。2。utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624。23。10。1490672820",
  'Connection':"keep-alive",
  'Referer':''
  }
  # 设置代理服务器
  proxies= {
  'http:':'',
  'https:':''
  }
  # offset的取值为:(评论页数-1)*20,total第一页为true,其余页为false
  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数
  second_param = "010001"# 第二个参数
  # 第三个参数
  third_param = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
  # 第四个参数
  forth_param = "0CoJUm6Qyw8W8jud"
  # 获取参数
  def get_params(page): # page为传入页数
  iv = "60708"
  first_key = forth_param
  second_key = 16 * 'F'
  if(page == 1): # 如果为第一页
  first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'
  h_encText = AES_encrypt(first_param,first_key,iv)
  else:
  offset = str((page-1)*20)
  first_param = '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}' %(offset,'false')
  h_encText = AES_encrypt(first_param,first_key,iv)
  h_encText = AES_encrypt(h_encText,second_key,iv)
  returnh_encText
  # 获取 encSecKey
  def get_encSecKey():
  encSecKey = "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"
  returnencSecKey
  # 解密过程
  def AES_encrypt(text,key,iv):
  pad = 16 - len(text) % 16
  text = text + pad *chr(pad)
  encryptor = AES.new(key,AES.MODE_CBC,iv)
  encrypt_text = encryptor.encrypt(text)
  encrypt_text = base64.b64encode(encrypt_text)
  returnencrypt_text
  # 获得评论json数据
  def get_json(url,params,encSecKey):
  data = {
  "params": params,
  "encSecKey": encSecKey
  }
  response = requests.post(url,headers=headers,data=data,proxies = proxies)
  returnresponse.content
  # 抓取热门评论,返回热评列表
  def get_hot_comments(url):
  hot_comments_list = []
  hot_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")
  params = get_params(1)# 第一页
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  hot_comments = json_dict['hotComments']# 热门评论
  print("共有%d条热门评论!" % len(hot_comments))
  foritem inhot_comments:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userID']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = userID + " " + nickname + " " + avatarUrl + " " + comment_time + " " + likedCount + " " + comment + u"\n"
  hot_comments_list.append(comment_info)
  returnhot_comments_list
  # 抓取某一首歌的全部评论
  def get_all_comments(url):
  all_comments_list = []# 存放所有评论
  all_comments_list.append(u"用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容\n")# 头部信息
  params = get_params(1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  comments_num = int(json_dict['total'])
  if(comments_num % 20 == 0):
  page = comments_num / 20
  else:
  page = int(comments_num / 20) + 1
  print("共有%d页评论!" % page)
  foriinrange(page):# 逐页抓取
  params = get_params(i+1)
  encSecKey = get_encSecKey()
  json_text = get_json(url,params,encSecKey)
  json_dict = json.loads(json_text)
  ifi == 0:
  print("共有%d条评论!" % comments_num)# 全部评论总数
  foritem injson_dict['comments']:
  comment = item['content']# 评论内容
  likedCount = item['likedCount']# 点赞总数
  comment_time = item['time']# 评论时间(时间戳)
  userID = item['user']['userId']# 评论者id
  nickname = item['user']['nickname']# 昵称
  avatarUrl = item['user']['avatarUrl']# 头像地址
  comment_info = unicode(userID) + u" " + nickname + u" " + avatarUrl + u" " + unicode(comment_time) + u" " + unicode(likedCount) + u" " + comment + u"\n"
  all_comments_list.append(comment_info)
  print("第%d页抓取完毕!" % (i+1))
  returnall_comments_list
  # 将评论写入文本文件
  def save_to_file(list,filename):
  with codecs.open(filename,'a',encoding='utf-8')asf:
  f.writelines(list)
  print("写入文件成功!")
  if__name__ == "__main__":
  start_time = time.time()# 开始时间
  url = ""
  filename = u"晴天.txt"
  all_comments_list = get_all_comments(url)
  save_to_file(all_comments_list,filename)
  end_time = time.time()#结束时间
  print("程序耗时%f秒." % (end_time - start_time))
  我利用上述代码跑了一下,抓了两首周杰伦的热门歌曲《晴天》(有130多万评论)和《告白气球》(有20多万评论),前者跑了大概有20多分钟,后者有6600多秒(也就是将近2个小时),截图如下:
  
  注意我是按照空格来分隔的,每一行分别有用户ID 用户昵称 用户头像地址 评论时间 点赞总数 评论内容 这些内容。我将这两个txt文件上传到百度云了,对数据感兴趣的同学可以直接下载进行文本分析,地址为:《晴天》(),《告白气球》(),或者自己跑一下代码抓取一下也是可以的(注意不要开太多线程给网易云的服务器太大压力哦~~中间有一段时间服务器返回数据特别慢,不知道是不是限制访问了,后来又好了)。我后面也许会自己去对评论数据进行可视化分析,敬请期待!
  看完本文有收获?请转发分享给更多人
  关注「Python开发者」,提升Python技能

Power BI财务报表分析:数据准备篇

网站优化优采云 发表了文章 • 0 个评论 • 180 次浏览 • 2022-06-20 09:38 • 来自相关话题

  Power BI财务报表分析:数据准备篇
  PowerBI财务报表分析系列之:
  数据准备篇
  数据分析第一步,需要有数据,然后才能开始后续的一系列分析过程,PowerBI财务报表分析也不例外,第一篇,先来介绍报表数据的获取,以及将获取的数据整理成适合分析的样式。
  在这个分析示例中,用的是公开的上市公司数据,所以数据获取,主要的工作就是利用PowerBI来批量爬取网页数据。
  如果你的分析对象是本公司的财务报表,会更加简便,可以跳过网页抓取数据的过程,直接进行整理数据就好了,不过学会了利用PowerBI抓取网页数据的技能,以后总能用的上。
  下面进入正文。
  这个PowerBI财务报表分析报告,用的数据是2010年至2019年,5个上市公司的资产负债表、利润表和现金流量表数据。
  数据来源于新浪财经,先选取一个公司,比如万科A,点击财务报表>资产负债表>2019,出现在眼前的网页是这样的:
  2019年四个季度的资产负债表就同时展现出来了,并且数据结构非常好,可以为后期的整理省去很多工作。
  然后查看这个网址结构:
  BalanceSheet/stockid/000002/ctrl/2019/displaytype/4.phtml
  猜测其中的BalanceSheet、000002、2019就是分别表示资产负债表、万科的股票代码和年度,可以换个公司和年度来验证,比如五粮液的2018年利润表,网址为:
  ProfitStatement/stockid/000858/ctrl/2018/displaytype/4.phtml
  和猜测的完全一致,那么就可以利用PowerBI,来批量来抓取。
  抓取多公司、多年度、多个报表的整体思路:
  1、先抓取一个公司一年的一个报表;
  2、利用第1步的查询创建自定义函数;3、构建参数列表;
  4,调用自定义函数,批量抓取数据。
  下面进入具体操作步骤。
  1,利用PowerBI抓取一个公司、一年的报表
  以上面第一个网址:2019年万科的资产负债表为例,点击获取数据>从web,将网址输入进去,在弹出的导航器中,会看到PowerBI识别出来很多表格,因为这一页本来就是有很多组数据,分别点击查看,会看到表17的结构最为规范,
  
  选中这个表,然后加载数据,进入Power Query编辑器。
  首先观察这个表的数据,空值都显示为"--",首先将它替换为0,然后将第一行用作标题:
  
  如果对PowerQuery的基础操作还不熟悉,建议先看看这篇文章:
  这是一个二维结构表,为便于之后的分析,将其转换为一维表:选中第一列,点击逆透视>逆透视其他列,就变成了一维表:
  
  不了解一维表的可以参考:
  万科2019年的资产负债表提取并整理完毕。
  其实这一步到这里就可以结束了。不过在这个模型中,为了简化,我将现金流量表的间接法附加数据删除,只保留了直接法的现金流量表项目,因此,多做了现金流量表的查询。
  所以提取现金流量表的时候,在上面资产负债表操作的基础上,增加了删除底部行的步骤,其他步骤都相同(如果你需要使用现金补充资料,可以不单独处理,只需要获取一个资产负债表就行)。
  2,建立自定义函数
  在PowerBI中,操作的每一个步骤都会自动记录下来,数据源更新后,刷新就可以自动完成所有的操作步骤。
  更进一步的,还可以将这个查询函数化,进而应用于相似的其他查询,这就用到了PowerQuery的自定义函数(如果你还不清楚什么是自定义函数,可以先看看:)。
  自定义函数并不是都需要自己从零开始一点点写M代码,还有更加简便的方法。
  第1步完成以后,右键该查询的名称,点击"创建函数"。
  
  输入函数名,这里我按报表的类型,定义该函数为balancesheet。
  然后选中这个自定义函数,点击进入高级编辑器,将前面几行代码调整为下图所显示的内容:
  就是修改一下获取数据网址,将网址中的:报表类型、公司代码、年度分别用:type、code、year表示,并将这三个变量作为自定义函数的三个参数。
  然后这个自定义函数就建好了,
  
  在这个窗口,任意输入三个有效参数,就能提取某个上市公司某年度的一个报表。
  不过我们建立自定义函数的目的是为了批量获取数据,所以在这个窗口中不需要操作。
  同样的方式,为现金流量表也生成一个自定义函数,命名为cashflow。
  3,构建参数列表
  针对三个参数,我们需要构建这三个参数的笛卡尔积,来得到每个公司的2010年-2019年的三大报表数据。
  为了便于后期的修改和维护,我们先建立三个单独的参数表。
  在PowerQuery编辑器中,直接点击输入数据,将需要分析的公司名称和股票代码录进去:
  
  就生成了一个公司名称表,同样的方式,生成年度表和报表类型表。
  接下来要做的是,生成这三个表的笛卡尔积,也就是公司代码、年度、报表类型的任意组合。
  在PowerQuery中,生成笛卡尔积很简单,先为这三个表都添加一列,比如1,然后合并查询。
  先合并查询报表类型和年度:
  得到的结果如下:
  
  这就是报表类型和年度的任何组合,然后继续将这个表与公司名称表合并查询,就得到了公司代码、年度、报表类型的任意组合表。
  4、调用自定义函数
  在第3步生成的表的基础上,添加自定义列,
  
  这个M代码的意思是,如果报表类型是CashFlow(现金流量表),就调用自定义函数:cashflow,否者调用balancesheet,他们的参数相同(如果只有一个自定义函数,就不需要用IF做判断,直接调用就行)。
  然后就抓取到了这5家公司10年的三大报表数据:
  并且,批量抓取的报表数据,已经是我们需要的一维表数据,因为第一步的操作,就含有二维转一维的步骤,后面在调用自定义函数的时候,都自动做了相同的操作。
  当然你也可以用这种方法,一次性抓取上百家公司的数据,但速度会非常慢,所以建议只抓取需要的公司、最近年份的数据就可以了。
  至此,三大表的数据抓取完成,主要就是利用PowerQuery的界面操作,以及简单的几个代码修改,即使没有任何基础,照着上面的步骤,也可以快速完成。
  在这个财务分析示例中,其中有一页是公司概况,也是通过网页抓取的公司信息:
  数据来源于下面三个网页:
  公司公告公司简介历史行情
  这些数据的抓取和上面财报数据抓取步骤完全一样,不过更加简单,因为只有一个参数:公司代码,大家可以自己动手练习。
  通过以上的介绍,你应该可以轻松从网页中抓取财报数据,需要相关的其他数据时,你都可以从网上搜索资源,然后批量抓取。
  正如开头所说,如果你要做的是自己公司的内部财报分析,你可以忽略掉本文抓取数据的步骤,而直接导入现成的财务报表就行了,不过为了后续分析的需要,建议你仍应该将报表数据整理成一维表的结构。
  数据整理好并上载,就可以进行下一步的数据建模。
  成为PowerBI星球会员,获取财务报表分析模板 查看全部

  Power BI财务报表分析:数据准备篇
  PowerBI财务报表分析系列之:
  数据准备篇
  数据分析第一步,需要有数据,然后才能开始后续的一系列分析过程,PowerBI财务报表分析也不例外,第一篇,先来介绍报表数据的获取,以及将获取的数据整理成适合分析的样式。
  在这个分析示例中,用的是公开的上市公司数据,所以数据获取,主要的工作就是利用PowerBI来批量爬取网页数据。
  如果你的分析对象是本公司的财务报表,会更加简便,可以跳过网页抓取数据的过程,直接进行整理数据就好了,不过学会了利用PowerBI抓取网页数据的技能,以后总能用的上。
  下面进入正文。
  这个PowerBI财务报表分析报告,用的数据是2010年至2019年,5个上市公司的资产负债表、利润表和现金流量表数据。
  数据来源于新浪财经,先选取一个公司,比如万科A,点击财务报表>资产负债表>2019,出现在眼前的网页是这样的:
  2019年四个季度的资产负债表就同时展现出来了,并且数据结构非常好,可以为后期的整理省去很多工作。
  然后查看这个网址结构:
  BalanceSheet/stockid/000002/ctrl/2019/displaytype/4.phtml
  猜测其中的BalanceSheet、000002、2019就是分别表示资产负债表、万科的股票代码和年度,可以换个公司和年度来验证,比如五粮液的2018年利润表,网址为:
  ProfitStatement/stockid/000858/ctrl/2018/displaytype/4.phtml
  和猜测的完全一致,那么就可以利用PowerBI,来批量来抓取。
  抓取多公司、多年度、多个报表的整体思路:
  1、先抓取一个公司一年的一个报表;
  2、利用第1步的查询创建自定义函数;3、构建参数列表;
  4,调用自定义函数,批量抓取数据。
  下面进入具体操作步骤。
  1,利用PowerBI抓取一个公司、一年的报表
  以上面第一个网址:2019年万科的资产负债表为例,点击获取数据>从web,将网址输入进去,在弹出的导航器中,会看到PowerBI识别出来很多表格,因为这一页本来就是有很多组数据,分别点击查看,会看到表17的结构最为规范,
  
  选中这个表,然后加载数据,进入Power Query编辑器。
  首先观察这个表的数据,空值都显示为"--",首先将它替换为0,然后将第一行用作标题:
  
  如果对PowerQuery的基础操作还不熟悉,建议先看看这篇文章:
  这是一个二维结构表,为便于之后的分析,将其转换为一维表:选中第一列,点击逆透视>逆透视其他列,就变成了一维表:
  
  不了解一维表的可以参考:
  万科2019年的资产负债表提取并整理完毕。
  其实这一步到这里就可以结束了。不过在这个模型中,为了简化,我将现金流量表的间接法附加数据删除,只保留了直接法的现金流量表项目,因此,多做了现金流量表的查询。
  所以提取现金流量表的时候,在上面资产负债表操作的基础上,增加了删除底部行的步骤,其他步骤都相同(如果你需要使用现金补充资料,可以不单独处理,只需要获取一个资产负债表就行)。
  2,建立自定义函数
  在PowerBI中,操作的每一个步骤都会自动记录下来,数据源更新后,刷新就可以自动完成所有的操作步骤。
  更进一步的,还可以将这个查询函数化,进而应用于相似的其他查询,这就用到了PowerQuery的自定义函数(如果你还不清楚什么是自定义函数,可以先看看:)。
  自定义函数并不是都需要自己从零开始一点点写M代码,还有更加简便的方法。
  第1步完成以后,右键该查询的名称,点击"创建函数"。
  
  输入函数名,这里我按报表的类型,定义该函数为balancesheet。
  然后选中这个自定义函数,点击进入高级编辑器,将前面几行代码调整为下图所显示的内容:
  就是修改一下获取数据网址,将网址中的:报表类型、公司代码、年度分别用:type、code、year表示,并将这三个变量作为自定义函数的三个参数。
  然后这个自定义函数就建好了,
  
  在这个窗口,任意输入三个有效参数,就能提取某个上市公司某年度的一个报表。
  不过我们建立自定义函数的目的是为了批量获取数据,所以在这个窗口中不需要操作。
  同样的方式,为现金流量表也生成一个自定义函数,命名为cashflow。
  3,构建参数列表
  针对三个参数,我们需要构建这三个参数的笛卡尔积,来得到每个公司的2010年-2019年的三大报表数据。
  为了便于后期的修改和维护,我们先建立三个单独的参数表。
  在PowerQuery编辑器中,直接点击输入数据,将需要分析的公司名称和股票代码录进去:
  
  就生成了一个公司名称表,同样的方式,生成年度表和报表类型表。
  接下来要做的是,生成这三个表的笛卡尔积,也就是公司代码、年度、报表类型的任意组合。
  在PowerQuery中,生成笛卡尔积很简单,先为这三个表都添加一列,比如1,然后合并查询。
  先合并查询报表类型和年度:
  得到的结果如下:
  
  这就是报表类型和年度的任何组合,然后继续将这个表与公司名称表合并查询,就得到了公司代码、年度、报表类型的任意组合表。
  4、调用自定义函数
  在第3步生成的表的基础上,添加自定义列,
  
  这个M代码的意思是,如果报表类型是CashFlow(现金流量表),就调用自定义函数:cashflow,否者调用balancesheet,他们的参数相同(如果只有一个自定义函数,就不需要用IF做判断,直接调用就行)。
  然后就抓取到了这5家公司10年的三大报表数据:
  并且,批量抓取的报表数据,已经是我们需要的一维表数据,因为第一步的操作,就含有二维转一维的步骤,后面在调用自定义函数的时候,都自动做了相同的操作。
  当然你也可以用这种方法,一次性抓取上百家公司的数据,但速度会非常慢,所以建议只抓取需要的公司、最近年份的数据就可以了。
  至此,三大表的数据抓取完成,主要就是利用PowerQuery的界面操作,以及简单的几个代码修改,即使没有任何基础,照着上面的步骤,也可以快速完成。
  在这个财务分析示例中,其中有一页是公司概况,也是通过网页抓取的公司信息:
  数据来源于下面三个网页:
  公司公告公司简介历史行情
  这些数据的抓取和上面财报数据抓取步骤完全一样,不过更加简单,因为只有一个参数:公司代码,大家可以自己动手练习。
  通过以上的介绍,你应该可以轻松从网页中抓取财报数据,需要相关的其他数据时,你都可以从网上搜索资源,然后批量抓取。
  正如开头所说,如果你要做的是自己公司的内部财报分析,你可以忽略掉本文抓取数据的步骤,而直接导入现成的财务报表就行了,不过为了后续分析的需要,建议你仍应该将报表数据整理成一维表的结构。
  数据整理好并上载,就可以进行下一步的数据建模。
  成为PowerBI星球会员,获取财务报表分析模板

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-17 22:05 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-06-16 02:53 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 38 次浏览 • 2022-06-11 15:07 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-06-09 12:43 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

为开发者准备的9个实用PHP代码片段

网站优化优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-06-05 13:42 • 来自相关话题

  为开发者准备的9个实用PHP代码片段
  本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作!
  当你开发网站、app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发。更多PHP的学习内容,您还可以参考《深入探讨PHP类的封装与继承》《PHP比较运算符的详细学习》《国外PHP学习网站书籍资料汇总》《超实用PHP函数总结整理》,希望对你的PHP学习有帮助。
  
  一.查看邮件是否已被阅读
  当你发送邮件时,你肯定很想知道你的邮件是否已被对方查看。下面的代码就能实现记录阅读你邮件的IP地址,还有实际的阅读日期和时间。
  error_reporting(0);
  Header("Content-Type: image/jpeg");
  //Get IP
  if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_CLIENT_IP&#39;];
  }
  elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
  }
  else
  {
  $ip=$_SERVER[&#39;REMOTE_ADDR&#39;];
  }
  //Time
  $actual_time = time();
  $actual_day = date(&#39;Y.m.d&#39;, $actual_time);
  $actual_day_chart = date(&#39;d/m/y&#39;, $actual_time);
  $actual_hour = date(&#39;H:i:s&#39;, $actual_time);
  //GET Browser
  $browser = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
  //LOG
  $myFile = "log.txt";
  $fh = fopen($myFile, &#39;a+&#39;);
  $stringData = $actual_day . &#39; &#39; . $actual_hour . &#39; &#39; . $ip . &#39; &#39; . $browser . &#39; &#39; . "\r\n";
  fwrite($fh, $stringData);
  fclose($fh);
  //Generate Image (Es. dimesion is 1x1)
  $newimage = ImageCreate(1,1);
  $grigio = ImageColorAllocate($newimage,255,255,255);
  ImageJPEG($newimage);
  ImageDestroy($newimage);
  源代码:
  二.从网页中提取关键词
  这段优秀的代码可以简单地实现从网页中提取关键词的功能。
  $meta = get_meta_tags(&#39;#39;);
  $keywords = $meta[&#39;keywords&#39;];
  // Split keywords
  $keywords = explode(&#39;,&#39;, $keywords );
  // Trim them
  $keywords = array_map( &#39;trim&#39;, $keywords );
  // Remove empty values
  $keywords = array_filter( $keywords );
  print_r( $keywords );
  源代码:
  三.查找页面上的所有链接
  使用DOM,你可以在任意页面上抓取链接,示例如下。
  $html = file_get_contents(&#39;#39;);
  $dom = new DOMDocument();
  @$dom->loadHTML($html);
  // grab all the on the page
  $xpath = new DOMXPath($dom);
  $hrefs = $xpath->evaluate("/html/body//a");
  for ($i = 0; $i < $hrefs->length; $i++) {
  $href = $hrefs->item($i);
  $url = $href->getAttribute(&#39;href&#39;);
  echo $url.&#39;
  &#39;;
  }
  源代码:
  四.自动转换URL为可点击超链接
  在Wordpress中,如果你想自动转换所有的URLs为可点击超链接,你就可以使用内置函数make_clickable()实现。当你在WordPress外操作时,你可以参考wp-includes/formatting.php中的源代码。
  function _make_url_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $url = $matches[2];
  if ( empty($url) )
  return $matches[0];
  // removed trailing [.,;:] from URL
  if ( in_array(substr($url, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($url, -1);
  $url = substr($url, 0, strlen($url)-1);
  }
  return $matches[1] . "$url" . $ret;
  }
  function _make_web_ftp_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $dest = $matches[2];
  $dest = &#39;#39; . $dest;
  if ( empty($dest) )
  return $matches[0];
  // removed trailing [,;:] from URL
  if ( in_array(substr($dest, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($dest, -1);
  $dest = substr($dest, 0, strlen($dest)-1);
  }
  return $matches[1] . "$dest" . $ret;
  }
  function _make_email_clickable_cb($matches) {
  $email = $matches[2] . &#39;@&#39; . $matches[3];
  return $matches[1] . "$email";
  }
  function make_clickable($ret) {
  $ret = &#39; &#39; . $ret;
  // in testing, using arrays here was found to be faster
  $ret = preg_replace_callback(&#39;#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_url_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_web_ftp_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i&#39;, &#39;_make_email_clickable_cb&#39;, $ret);
  // this one is not in an array because we need it to run last, for cleanup of accidental links within links
  $ret = preg_replace("#(]+?>|>))]+?>([^>]+?)#i", "$1$3", $ret);
  $ret = trim($ret);
  return $ret;
  }
  源代码:
  五.创建数据URI
  数据URI可以帮助将图像嵌入到HTML/CSS/JS中,从而节省HTTP请求。下面的函数可以利用$file创建数据URI。
  function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
  }
  源代码:
  六.下载和保存远程图片到你的服务器
  当你在搭建网站时,很可能会从远程服务器上下载图片保存到你自己的服务器上,下面的代码就可以帮助你实现这个功能。
  $image = file_get_contents(&#39;#39;);
  file_put_contents(&#39;/images/image.jpg&#39;, $image); //Where to save the image
  源代码:
  七.移除Microsoft Word HTML标签
  当你使用Microsoft Word时,会创建很多标签tag,比如font、span、style、class等,这些标签在Word中十分有用,但当你从Word中把文本粘贴到网页上,就会出现很多没用的标签。下面实用的函数可以帮助你清除所有的Word HTML标签。
  function cleanHTML($html) {
  ///
  /// Removes all FONT and SPAN tags, and all Class and Style attributes.
  /// Designed to get rid of non-standard Microsoft Word HTML tags.
  ///
  // start by completely removing all unwanted tags
  $html = ereg_replace("]*>","",$html);
  // then run another pass over the html (twice), removing unwanted attributes
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  return $html
  }
  源代码:,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
  八.检测浏览器语言
  如果你的网站是多种语言的,下面的代码可以帮助你检测浏览器语言,它会返回客户端浏览器的默认语言。
  function get_client_language($availableLanguages, $default=&#39;en&#39;){
  if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
  $langs=explode(&#39;,&#39;,$_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
  foreach ($langs as $value){
  $choice=substr($value,0,2);
  if(in_array($choice, $availableLanguages)){
  return $choice;
  }
  }
  }
  return $default;
  }
  源代码:
  九.显示Facebook上的粉丝数量
  如果在你的网站或博客中,链有Facebook页面,你可能希望显示Facebook上的粉丝数量,下面的代码就可以帮助你获取粉丝数量,另外不要忘记在代码第二行添加你的页面ID。
  $page_id = "YOUR PAGE-ID";
  $xml = @simplexml_load_file(" 20page_id=".$page_id."") or die ("a lot");
  $fans = $xml->page->fan_count;
  echo $fans;
  源代码: 查看全部

  为开发者准备的9个实用PHP代码片段
  本文由PHP100中文网编译,转载请看文末的转载要求,谢谢合作!
  当你开发网站、app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发。更多PHP的学习内容,您还可以参考《深入探讨PHP类的封装与继承》《PHP比较运算符的详细学习》《国外PHP学习网站书籍资料汇总》《超实用PHP函数总结整理》,希望对你的PHP学习有帮助。
  
  一.查看邮件是否已被阅读
  当你发送邮件时,你肯定很想知道你的邮件是否已被对方查看。下面的代码就能实现记录阅读你邮件的IP地址,还有实际的阅读日期和时间。
  error_reporting(0);
  Header("Content-Type: image/jpeg");
  //Get IP
  if (!empty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_CLIENT_IP&#39;];
  }
  elseif (!empty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]))
  {
  $ip=$_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
  }
  else
  {
  $ip=$_SERVER[&#39;REMOTE_ADDR&#39;];
  }
  //Time
  $actual_time = time();
  $actual_day = date(&#39;Y.m.d&#39;, $actual_time);
  $actual_day_chart = date(&#39;d/m/y&#39;, $actual_time);
  $actual_hour = date(&#39;H:i:s&#39;, $actual_time);
  //GET Browser
  $browser = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
  //LOG
  $myFile = "log.txt";
  $fh = fopen($myFile, &#39;a+&#39;);
  $stringData = $actual_day . &#39; &#39; . $actual_hour . &#39; &#39; . $ip . &#39; &#39; . $browser . &#39; &#39; . "\r\n";
  fwrite($fh, $stringData);
  fclose($fh);
  //Generate Image (Es. dimesion is 1x1)
  $newimage = ImageCreate(1,1);
  $grigio = ImageColorAllocate($newimage,255,255,255);
  ImageJPEG($newimage);
  ImageDestroy($newimage);
  源代码:
  二.从网页中提取关键词
  这段优秀的代码可以简单地实现从网页中提取关键词的功能。
  $meta = get_meta_tags(&#39;#39;);
  $keywords = $meta[&#39;keywords&#39;];
  // Split keywords
  $keywords = explode(&#39;,&#39;, $keywords );
  // Trim them
  $keywords = array_map( &#39;trim&#39;, $keywords );
  // Remove empty values
  $keywords = array_filter( $keywords );
  print_r( $keywords );
  源代码:
  三.查找页面上的所有链接
  使用DOM,你可以在任意页面上抓取链接,示例如下。
  $html = file_get_contents(&#39;#39;);
  $dom = new DOMDocument();
  @$dom->loadHTML($html);
  // grab all the on the page
  $xpath = new DOMXPath($dom);
  $hrefs = $xpath->evaluate("/html/body//a");
  for ($i = 0; $i < $hrefs->length; $i++) {
  $href = $hrefs->item($i);
  $url = $href->getAttribute(&#39;href&#39;);
  echo $url.&#39;
  &#39;;
  }
  源代码:
  四.自动转换URL为可点击超链接
  在Wordpress中,如果你想自动转换所有的URLs为可点击超链接,你就可以使用内置函数make_clickable()实现。当你在WordPress外操作时,你可以参考wp-includes/formatting.php中的源代码。
  function _make_url_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $url = $matches[2];
  if ( empty($url) )
  return $matches[0];
  // removed trailing [.,;:] from URL
  if ( in_array(substr($url, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($url, -1);
  $url = substr($url, 0, strlen($url)-1);
  }
  return $matches[1] . "$url" . $ret;
  }
  function _make_web_ftp_clickable_cb($matches) {
  $ret = &#39;&#39;;
  $dest = $matches[2];
  $dest = &#39;#39; . $dest;
  if ( empty($dest) )
  return $matches[0];
  // removed trailing [,;:] from URL
  if ( in_array(substr($dest, -1), array(&#39;.&#39;, &#39;,&#39;, &#39;;&#39;, &#39;:&#39;)) === true ) {
  $ret = substr($dest, -1);
  $dest = substr($dest, 0, strlen($dest)-1);
  }
  return $matches[1] . "$dest" . $ret;
  }
  function _make_email_clickable_cb($matches) {
  $email = $matches[2] . &#39;@&#39; . $matches[3];
  return $matches[1] . "$email";
  }
  function make_clickable($ret) {
  $ret = &#39; &#39; . $ret;
  // in testing, using arrays here was found to be faster
  $ret = preg_replace_callback(&#39;#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_url_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is&#39;, &#39;_make_web_ftp_clickable_cb&#39;, $ret);
  $ret = preg_replace_callback(&#39;#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i&#39;, &#39;_make_email_clickable_cb&#39;, $ret);
  // this one is not in an array because we need it to run last, for cleanup of accidental links within links
  $ret = preg_replace("#(]+?>|>))]+?>([^>]+?)#i", "$1$3", $ret);
  $ret = trim($ret);
  return $ret;
  }
  源代码:
  五.创建数据URI
  数据URI可以帮助将图像嵌入到HTML/CSS/JS中,从而节省HTTP请求。下面的函数可以利用$file创建数据URI。
  function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
  }
  源代码:
  六.下载和保存远程图片到你的服务器
  当你在搭建网站时,很可能会从远程服务器上下载图片保存到你自己的服务器上,下面的代码就可以帮助你实现这个功能。
  $image = file_get_contents(&#39;#39;);
  file_put_contents(&#39;/images/image.jpg&#39;, $image); //Where to save the image
  源代码:
  七.移除Microsoft Word HTML标签
  当你使用Microsoft Word时,会创建很多标签tag,比如font、span、style、class等,这些标签在Word中十分有用,但当你从Word中把文本粘贴到网页上,就会出现很多没用的标签。下面实用的函数可以帮助你清除所有的Word HTML标签。
  function cleanHTML($html) {
  ///
  /// Removes all FONT and SPAN tags, and all Class and Style attributes.
  /// Designed to get rid of non-standard Microsoft Word HTML tags.
  ///
  // start by completely removing all unwanted tags
  $html = ereg_replace("]*>","",$html);
  // then run another pass over the html (twice), removing unwanted attributes
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  $html = ereg_replace("]*)(class|lang|style|size|face)=("[^"]*"|&#39;[^&#39;]*&#39;|[^>]+)([^>]*)>","",$html);
  return $html
  }
  源代码:,guid,2ece42de-a334-4fd0-8f94-53c6602d5718.aspx
  八.检测浏览器语言
  如果你的网站是多种语言的,下面的代码可以帮助你检测浏览器语言,它会返回客户端浏览器的默认语言。
  function get_client_language($availableLanguages, $default=&#39;en&#39;){
  if (isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])) {
  $langs=explode(&#39;,&#39;,$_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;]);
  foreach ($langs as $value){
  $choice=substr($value,0,2);
  if(in_array($choice, $availableLanguages)){
  return $choice;
  }
  }
  }
  return $default;
  }
  源代码:
  九.显示Facebook上的粉丝数量
  如果在你的网站或博客中,链有Facebook页面,你可能希望显示Facebook上的粉丝数量,下面的代码就可以帮助你获取粉丝数量,另外不要忘记在代码第二行添加你的页面ID。
  $page_id = "YOUR PAGE-ID";
  $xml = @simplexml_load_file(" 20page_id=".$page_id."") or die ("a lot");
  $fans = $xml->page->fan_count;
  echo $fans;
  源代码:

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-05-31 01:43 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

面试PHP一般会考查你哪些内容呢?不妨看看

网站优化优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-05-25 09:28 • 来自相关话题

  面试PHP一般会考查你哪些内容呢?不妨看看
  状态码 401表示未授权;<br />header(“HTTP/1.0 404 Not Found”);<br />
  扩展
  8、把John新增到users阵列?
  $users[] = ‘john’;   <br />array_push($users,‘john’);<br />
  9 、在PHP中error_reporting这个函数有什么作用?
  error_reporting()设置PHP的报错级别并返回当前级别。
  10、如何修改SESSION的生存时间.
  方法1:将php.ini中的session.gc_maxlifetime设置为9999  重启apache<br /><br />方法2:<br />$savePath = "./session_save_dir/";<br />$lifeTime = 小时 * 秒;<br />session_save_path($savePath);<br />session_set_cookie_params($lifeTime);<br />session_start();<br /><br />方法3:<br />setcookie() and session_set_cookie_params($lifeTime);<br />
  11、有一个网页地址,比如PHP自学中心的主页:,如何得到它的内容?
  方法1(对于PHP5及更高版本):<br />$readcontents = fopen("http://www.startphp.cn/index.html", "rb");<br />$contents = stream_get_contents($readcontents);<br />fclose($readcontents);<br />echo $contents;<br /><br />方法2:<br />echo file_get_contents("http://www.startphp.cn/index.html");<br />
  12、写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名
  例如:需要取出php或.php
  方法1:<br />function getExt($url){<br />    $arr = parse_url($url);<br />    $file = basename($arr['path']);<br />    $ext = explode(".",$file);<br />    return $ext[1];<br />}<br /><br />方法2:<br />function getExt($url) {<br />    $url = basename($url);<br />    $pos1 = strpos($url,".");<br />    $pos2 = strpos($url,"?");<br /><br />    if(strstr($url,"?")){<br />        Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);<br /><br />    } else {<br />        return substr($url,$pos1);<br />    }<br />}<br />
  13、使用五种以上方式获取一个文件的扩展名
  要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数get_ext1($file_name),get_ext2($file_name)
  方法1:<br />function get_ext1($file_name){<br />    return strrchr($file_name, '.');<br />}<br />方法2:<br />function get_ext2($file_name){<br />    return substr($file_name,strrpos($file_name, '.'));<br />}<br />方法3:<br />function get_ext3($file_name){<br />    return array_pop(explode('.', $file_name));<br />}<br />方法4:<br />function get_ext4($file_name){<br />    $p = pathinfo($file_name);<br />    return $p['extension'];<br /><br />}<br />方法5:<br />function get_ext5($file_name){<br />    return strrev(substr(strrev($file_name), 0,strpos(strrev($file_name), '.')));<br />}<br />
  14、PHP中的null与false,‘’与0有什么区别?
<p> 查看全部

  面试PHP一般会考查你哪些内容呢?不妨看看
  状态码 401表示未授权;<br />header(“HTTP/1.0 404 Not Found”);<br />
  扩展
  8、把John新增到users阵列?
  $users[] = ‘john’;   <br />array_push($users,‘john’);<br />
  9 、在PHP中error_reporting这个函数有什么作用?
  error_reporting()设置PHP的报错级别并返回当前级别。
  10、如何修改SESSION的生存时间.
  方法1:将php.ini中的session.gc_maxlifetime设置为9999  重启apache<br /><br />方法2:<br />$savePath = "./session_save_dir/";<br />$lifeTime = 小时 * 秒;<br />session_save_path($savePath);<br />session_set_cookie_params($lifeTime);<br />session_start();<br /><br />方法3:<br />setcookie() and session_set_cookie_params($lifeTime);<br />
  11、有一个网页地址,比如PHP自学中心的主页:,如何得到它的内容?
  方法1(对于PHP5及更高版本):<br />$readcontents = fopen("http://www.startphp.cn/index.html", "rb");<br />$contents = stream_get_contents($readcontents);<br />fclose($readcontents);<br />echo $contents;<br /><br />方法2:<br />echo file_get_contents("http://www.startphp.cn/index.html";);<br />
  12、写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名
  例如:需要取出php或.php
  方法1:<br />function getExt($url){<br />    $arr = parse_url($url);<br />    $file = basename($arr['path']);<br />    $ext = explode(".",$file);<br />    return $ext[1];<br />}<br /><br />方法2:<br />function getExt($url) {<br />    $url = basename($url);<br />    $pos1 = strpos($url,".");<br />    $pos2 = strpos($url,"?");<br /><br />    if(strstr($url,"?")){<br />        Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);<br /><br />    } else {<br />        return substr($url,$pos1);<br />    }<br />}<br />
  13、使用五种以上方式获取一个文件的扩展名
  要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数get_ext1($file_name),get_ext2($file_name)
  方法1:<br />function get_ext1($file_name){<br />    return strrchr($file_name, '.');<br />}<br />方法2:<br />function get_ext2($file_name){<br />    return substr($file_name,strrpos($file_name, '.'));<br />}<br />方法3:<br />function get_ext3($file_name){<br />    return array_pop(explode('.', $file_name));<br />}<br />方法4:<br />function get_ext4($file_name){<br />    $p = pathinfo($file_name);<br />    return $p['extension'];<br /><br />}<br />方法5:<br />function get_ext5($file_name){<br />    return strrev(substr(strrev($file_name), 0,strpos(strrev($file_name), '.')));<br />}<br />
  14、PHP中的null与false,‘’与0有什么区别?
<p>

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-05-21 03:18 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

用php可以抓取网页数据吗?解决方法有哪些?

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-05-17 04:03 • 来自相关话题

  用php可以抓取网页数据吗?解决方法有哪些?
  php可以抓取网页数据吗?很多人在做php爬虫的时候都会涉及到抓取网页数据的操作,但是同时会出现几个问题,下面小编简单介绍一下解决方法。用php抓取网页数据的方法,当然只能在php语言中使用,当然还是有很多不同于php的语言,这里介绍的网页抓取是在windows平台上使用的网页抓取方法。另外数据类型方面也有几种,比如使用phptoken来获取对应的账号,比如使用java注解来获取对应的数据,本文使用java网页抓取来介绍如何使用php网页来抓取数据。
  java网页抓取分为四步:第一步:java代码完整执行--java代码编写swoole代码。第二步:打开ubuntu或linux的浏览器,用fastcgi客户端登录到你所要抓取的网站,然后点击打开网页源代码或者右键单击开始抓取,运行代码完整文件。第三步:从浏览器打开源代码图。第四步:从打开的源代码中你可以看到对应网页的信息,例如:浏览器:/抓取:/详细查看数据库:/抓取:。
  支持楼上,不同的语言有相同的方法,有兴趣自己去调代码,可以大概实现小程序功能,当然如果手机端,因为微信不支持分享到朋友圈等的话,
  php可以抓取网页数据吗?php没有抓取网页数据的接口,只能抓取链接。比如:/(网址)。如果有这样一个接口,那么通过php在服务器端可以抓取,提供网页的xml或json文件。如果真的要做到抓取网页,必须要用java语言,也就是jsp。 查看全部

  用php可以抓取网页数据吗?解决方法有哪些?
  php可以抓取网页数据吗?很多人在做php爬虫的时候都会涉及到抓取网页数据的操作,但是同时会出现几个问题,下面小编简单介绍一下解决方法。用php抓取网页数据的方法,当然只能在php语言中使用,当然还是有很多不同于php的语言,这里介绍的网页抓取是在windows平台上使用的网页抓取方法。另外数据类型方面也有几种,比如使用phptoken来获取对应的账号,比如使用java注解来获取对应的数据,本文使用java网页抓取来介绍如何使用php网页来抓取数据。
  java网页抓取分为四步:第一步:java代码完整执行--java代码编写swoole代码。第二步:打开ubuntu或linux的浏览器,用fastcgi客户端登录到你所要抓取的网站,然后点击打开网页源代码或者右键单击开始抓取,运行代码完整文件。第三步:从浏览器打开源代码图。第四步:从打开的源代码中你可以看到对应网页的信息,例如:浏览器:/抓取:/详细查看数据库:/抓取:。
  支持楼上,不同的语言有相同的方法,有兴趣自己去调代码,可以大概实现小程序功能,当然如果手机端,因为微信不支持分享到朋友圈等的话,
  php可以抓取网页数据吗?php没有抓取网页数据的接口,只能抓取链接。比如:/(网址)。如果有这样一个接口,那么通过php在服务器端可以抓取,提供网页的xml或json文件。如果真的要做到抓取网页,必须要用java语言,也就是jsp。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-15 10:50 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

[精选] 模拟登陆并抓取数据,用php也是可以做到的

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-05-15 06:41 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。 查看全部

  [精选] 模拟登陆并抓取数据,用php也是可以做到的
  点击加入:
  商务合作请加微信(QQ):2230304070
  精选文章正文
  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:
  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下
  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
  1)登录页面的地址;
  2)验证码的地址;
  3)登录表单需要提交的各个字段的名称和提交方式;
  4)登录表单提交的地址;
  5)另外要需要知道要抓取的数据所在的地址。
  2. 获取cookie并存储(针对使用cookie文件的网站)
  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  3. 获取验证码并存储(针对使用验证码的网站)
  $verify_url = "http://www.xxxx";   //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
  说明:
  由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
  4. 模拟提交登录表单:
  $ post_url = 'http://www.xxxx';   //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
  5. 抓取数据:
  $data_url = "http://www.xxxx";   //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
  到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
  需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

php可以抓取网页数据吗 PHP之伪静态与真静态

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-05-12 09:02 • 来自相关话题

  php可以抓取网页数据吗 PHP之伪静态与真静态
  
  首先,什么是伪静态:
  伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写 URL 方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。
  另外在补充两个名词解析
  静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页
  动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2
  动态、静态、伪静态之间的利与弊(新)
  动态网址
  首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数。
  其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理。
  最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面。
  静态网址
  首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高。
  其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富。
  最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
  伪静态网址
  首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档。
  其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。
  最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用。
  在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html。
  再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID)。
  我们应该选择伪静态还是真静态
  1、使用真静态和假静态对SEO来说没有什么区别
  2、使用真静态可能将导致硬盘损坏并将影响论坛性能
  3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
  4、最重要的一点,我们要静态是为了SEO
  所以:
  1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
  2、既然真伪静态的效果一样,我们就可以选择伪静态了。
  3、但是伪静态大量使用会造成CPU超负荷。
  4、所以我们只要不大量使用就可以了。
  5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
  6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
  7、谢谢大家耐心看我写的文章。
  8、有何不解的地方或是有不同的看法欢迎提出 查看全部

  php可以抓取网页数据吗 PHP之伪静态与真静态
  
  首先,什么是伪静态:
  伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过重写 URL 方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。
  另外在补充两个名词解析
  静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页
  动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2
  动态、静态、伪静态之间的利与弊(新)
  动态网址
  首先,动态网址目前对于Google来说,“不能被抓取”的说法是错误的,Google能够很好的处理动态网址并顺利抓取;其次“参数不能超过3个”的说法也不正确,Google能够抓取参数超过3个的动态网址,不过,为了避免URL太长应尽量减少参数。
  其次,动态网址有其一定的优势,以上面所说的 news.php?lang=cn&class=1&id=2 为例,网址中的参数准确的告诉Google,此URL内容语言为cn、隶属于分类1、内容ID为2,更便于Google对内容的识别处理。
  最后,动态网址应尽量精简,特别是会话标识(sid)和查询(query)参数,容易造成大量相同页面。
  静态网址
  首先,静态网址具有的绝对优势是其明晰,/product/nokia/n95.html和/about.html可以很容易被理解,从而在搜索结果中可能点击量相对较高。
  其次,静态网址未必就是最好的网址形式,上述动态网址中说到,动态网址能够告诉Google一些可以识别的参数,而静态网址如果文档布置不够恰当(如:过于扁平化,将HTML文档全放在根目录下)及其他因素,反而不如静态网址为Google提供的参考信息丰富。
  最后,樂思蜀觉得Google此文中是否有其隐藏含义?“更新此种类型网址的页面会比较耗费时间,尤其是当信息量增长很快时,因为每一个单独的页面都必须更改编译代码。”虽然所说的是网站,但在Google系统中是否同样存在这样的问题呢?
  伪静态网址
  首先,伪静态网址不能让动态网址“静态化”,伪静态仅仅是对动态网址的一个重写,Google不会认为伪静态就是HTML文档。
  其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。
  最后,伪静态有很大潜大危险,最好在对网站系统、网站结构、内容分布、参数意义熟悉的情况下使用。
  在写伪静态规则时,应保留有价值的参数,不要将有价值的参数全部精简掉,如前面例子中的 news.php?lang=cn&class=1&id=2 最好重写为 news-cn-class1-id2.html,而不是过份精简重写为 news-2.html。
  再就是伪静态中一定不能包含会话标识(sid)和查询(query)参数,/product.asp?sid=98971298178906&id=1234 这样的动态网址,其中的sid本来Google能够识别并屏蔽,但如果重写为 /product/98971298178906/1234,Google不但无法识别,还在整站中造成无限重复页面(每个会话都会产生一个新的会话ID)。
  我们应该选择伪静态还是真静态
  1、使用真静态和假静态对SEO来说没有什么区别
  2、使用真静态可能将导致硬盘损坏并将影响论坛性能
  3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
  4、最重要的一点,我们要静态是为了SEO
  所以:
  1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
  2、既然真伪静态的效果一样,我们就可以选择伪静态了。
  3、但是伪静态大量使用会造成CPU超负荷。
  4、所以我们只要不大量使用就可以了。
  5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
  6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
  7、谢谢大家耐心看我写的文章。
  8、有何不解的地方或是有不同的看法欢迎提出

官方客服QQ群

微信人工客服

QQ人工客服


线