php curl抓取网页数据

php curl抓取网页数据

利用flashxmlhttprequest对象传递参数的一些基本操作1-6

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

  利用flashxmlhttprequest对象传递参数的一些基本操作1-6
  
  phpcurl抓取网页数据,使用的是flashxmlhttprequest对象。flashxmlhttprequest数据传递方式为application/x-www-form-urlencoded,然后http请求返回的是html标签,还需要去解析这些html标签。利用xmlhttprequest对象传递参数有很多好处,比如方便页面构造,方便做数据对比。
  
  flashxmlhttprequest对象中还有一个参数是opener,来接收请求的参数,另外一个还是opener,来传递具体的参数。下面来简单说一下利用flashxmlhttprequest对象传递参数的一些基本操作1.构造请求参数如果我们要从网站中获取一段json,比如下面这段json:/*。 查看全部

  利用flashxmlhttprequest对象传递参数的一些基本操作1-6
  
  phpcurl抓取网页数据,使用的是flashxmlhttprequest对象。flashxmlhttprequest数据传递方式为application/x-www-form-urlencoded,然后http请求返回的是html标签,还需要去解析这些html标签。利用xmlhttprequest对象传递参数有很多好处,比如方便页面构造,方便做数据对比。
  
  flashxmlhttprequest对象中还有一个参数是opener,来接收请求的参数,另外一个还是opener,来传递具体的参数。下面来简单说一下利用flashxmlhttprequest对象传递参数的一些基本操作1.构造请求参数如果我们要从网站中获取一段json,比如下面这段json:/*。

phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件

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

  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件
  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件,有些xml文件在开发语言中本身是写死的格式,如php需要在java中显示调用json文件,对于php这些内容就不能通过schema进行修改了,而有些xml文件是可以通过本地的phpcurl进行字符串解析得到,因此大家会用一些phpxml解析库来解析这些文件。
  
  针对php6的extractx:php6中引入了extractx接口,用来解析php中所存储的数据库中的各种xml格式。对于phpinfo已经没有什么意义,不过通过phpinfo,我们可以大致了解php的的文件格式。intread_content(intnss,xml_extracted_typesost)xml_extracted_types规定了有几种嵌套路径是不能访问的:{"content":"content","content-dependent":"id1_content.xml","doc":"xmldecoder","extracted_path":"content_default_path"}实际执行过程中,intread_content(intnss,ost)的返回值是nsclass("foreign_origin_name");```所以默认情况下,extractx不会抓取任何xml文件。
  intread_frame(intnss,char*file)file是浏览器下的xml解析器的字符串,nss这个字符串是php中一种特殊的php-native字符串(非php语言可读),来自php5:monsystem对象,该对象内部有一个file_extracted_types类型表达式,可以对这些文件进行解析。
  
  如果在解析xml时,发现某个数据不是来自一个模板文件,也不是xml文件的表达式中被定义了某个字符串,就会得到该数据。file("stimg",nssamplefile(file,"test.xml"))在某些情况下,只能通过访问文件来获取xml数据,所以我们使用nslookup方法进行查找。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))查找时如果出现字符串嵌套,则通过转换操作。
  intread_response(intnss,xml_extracted_typesost)ost这个属性用来解析php缓存中的某个xml文件。通过ost可以查看该xml文件内容是否存在。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))我们在编写代码时,定义一个模板程序,用来显示相应xml文件中的表达式,如下intmain(intargc,char*argv[]){//解析php缓存中的xml文件a::p。 查看全部

  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件
  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件,有些xml文件在开发语言中本身是写死的格式,如php需要在java中显示调用json文件,对于php这些内容就不能通过schema进行修改了,而有些xml文件是可以通过本地的phpcurl进行字符串解析得到,因此大家会用一些phpxml解析库来解析这些文件。
  
  针对php6的extractx:php6中引入了extractx接口,用来解析php中所存储的数据库中的各种xml格式。对于phpinfo已经没有什么意义,不过通过phpinfo,我们可以大致了解php的的文件格式。intread_content(intnss,xml_extracted_typesost)xml_extracted_types规定了有几种嵌套路径是不能访问的:{"content":"content","content-dependent":"id1_content.xml","doc":"xmldecoder","extracted_path":"content_default_path"}实际执行过程中,intread_content(intnss,ost)的返回值是nsclass("foreign_origin_name");```所以默认情况下,extractx不会抓取任何xml文件。
  intread_frame(intnss,char*file)file是浏览器下的xml解析器的字符串,nss这个字符串是php中一种特殊的php-native字符串(非php语言可读),来自php5:monsystem对象,该对象内部有一个file_extracted_types类型表达式,可以对这些文件进行解析。
  
  如果在解析xml时,发现某个数据不是来自一个模板文件,也不是xml文件的表达式中被定义了某个字符串,就会得到该数据。file("stimg",nssamplefile(file,"test.xml"))在某些情况下,只能通过访问文件来获取xml数据,所以我们使用nslookup方法进行查找。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))查找时如果出现字符串嵌套,则通过转换操作。
  intread_response(intnss,xml_extracted_typesost)ost这个属性用来解析php缓存中的某个xml文件。通过ost可以查看该xml文件内容是否存在。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))我们在编写代码时,定义一个模板程序,用来显示相应xml文件中的表达式,如下intmain(intargc,char*argv[]){//解析php缓存中的xml文件a::p。

:phpcurl抓取网页数据,可通过php中的get方法

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

  :phpcurl抓取网页数据,可通过php中的get方法
  
  phpcurl抓取网页数据,可通过php中的get方法去请求获取网页的内容。那么,通过get方法请求时,常常会遇到以下几个问题:请求头中header、user-agent、http、post请求都是会发送到对应服务器,如果设置请求头,curl一般来说会带上xhr.request.headers,如果请求头中缺少xhr.request.headers,但通过json的post方法可以将请求发送到该服务器。
  
  而通过post方法,curl一般就不会带上请求头。具体怎么避免这些问题呢?也很简单,只要在post请求中,填写请求头即可。\r\n或\r\n都可以代替。\r\n就是请求头的意思。请求头user-agent代表服务器返回的服务器端信息头部user-agent:mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/68.0.3104.176safari/537.36link:其中\r\n代表请求头中不带上header、user-agent、body以及其他依赖特殊字符就代表其他字符块。
  \r\n:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r。 查看全部

  :phpcurl抓取网页数据,可通过php中的get方法
  
  phpcurl抓取网页数据,可通过php中的get方法去请求获取网页的内容。那么,通过get方法请求时,常常会遇到以下几个问题:请求头中header、user-agent、http、post请求都是会发送到对应服务器,如果设置请求头,curl一般来说会带上xhr.request.headers,如果请求头中缺少xhr.request.headers,但通过json的post方法可以将请求发送到该服务器。
  
  而通过post方法,curl一般就不会带上请求头。具体怎么避免这些问题呢?也很简单,只要在post请求中,填写请求头即可。\r\n或\r\n都可以代替。\r\n就是请求头的意思。请求头user-agent代表服务器返回的服务器端信息头部user-agent:mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/68.0.3104.176safari/537.36link:其中\r\n代表请求头中不带上header、user-agent、body以及其他依赖特殊字符就代表其他字符块。
  \r\n:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r。

php curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

php curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 个评论 • 70 次浏览 • 2022-06-22 22:16 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?

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

  phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?
  phpcurl抓取网页数据
  看你的爬虫核心代码是写python还是php?我个人爬虫用curl写的,github里可以找到源码。如果想学的话,推荐一个很好的文章翻译平台-语言学习-中国最大的it技术社区不要纠结这些技术性的东西。如果只是要抓网页那就写爬虫,设定好范围,爬哪些平台,然后再设定设定动机、要求啥的,注意锻炼业务能力,多设问,多思考,提高代码重构能力。网页抓取不是特别困难,用js+css也可以,就是多了点。
  首先,requests库是基于requests模块的http请求库,还有httpcookie之类的,如果只是抓取网页的话很简单,基本http协议抓取就可以。但是要搞懂通用语言python是个太大的话题,python可以爬取国内所有网站,但每个网站涉及的不一样,爬取各种网站后也许会发现某些网站对js加密严重,之类的,当你下定决心爬虫之后,你会发现模块啊、框架啊之类的太多,过多概念使得你无从下手,当你发现爬取又遇到问题时,又开始迷茫了。
  所以,建议先确定基础的爬虫框架,对照之,分析每个模块的使用场景,针对性的学习。python网页抓取的常用框架是requests、scrapy。有的框架的具体使用文档,例如web_base_requests,模块介绍的不错。我用过。首先看下介绍:各种框架,注意一点,要安装。requests:最基础的httpheader接收和处理方式,详细可以看书:http请求的处理(豆瓣)requests最基础的异步异步代理使用。
  scrapy:用scrapy搭建爬虫。scrapy对xpath文档爬取最新开源文档,当然有人会推荐爬虫框架crawlform,但是我没有找到太好的模块。爬虫框架lxml,这个版本后忘记,只找到过代码:代码:fromlxmlimportetreeclassbaseurlspider(scrapy.request):name='baseurlspider'allowed_domains=['jiafengchen']urlpatterns=[';a=ad&prefix=peizhihu']middlewares=[scrapy.cookiejar,scrapy.session]referer='/'class_tag='scrapy-form'meta={'user-agent':'mozilla/5.0(windowsnt6.1;win64;x64)applewebkit/537.36(khtml,likegecko)chrome/74.0.3423.136safari/537.36'}defparse(self,response):data=response.xpath('//html/div[1]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/div/di。 查看全部

  phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?
  phpcurl抓取网页数据
  看你的爬虫核心代码是写python还是php?我个人爬虫用curl写的,github里可以找到源码。如果想学的话,推荐一个很好的文章翻译平台-语言学习-中国最大的it技术社区不要纠结这些技术性的东西。如果只是要抓网页那就写爬虫,设定好范围,爬哪些平台,然后再设定设定动机、要求啥的,注意锻炼业务能力,多设问,多思考,提高代码重构能力。网页抓取不是特别困难,用js+css也可以,就是多了点。
  首先,requests库是基于requests模块的http请求库,还有httpcookie之类的,如果只是抓取网页的话很简单,基本http协议抓取就可以。但是要搞懂通用语言python是个太大的话题,python可以爬取国内所有网站,但每个网站涉及的不一样,爬取各种网站后也许会发现某些网站对js加密严重,之类的,当你下定决心爬虫之后,你会发现模块啊、框架啊之类的太多,过多概念使得你无从下手,当你发现爬取又遇到问题时,又开始迷茫了。
  所以,建议先确定基础的爬虫框架,对照之,分析每个模块的使用场景,针对性的学习。python网页抓取的常用框架是requests、scrapy。有的框架的具体使用文档,例如web_base_requests,模块介绍的不错。我用过。首先看下介绍:各种框架,注意一点,要安装。requests:最基础的httpheader接收和处理方式,详细可以看书:http请求的处理(豆瓣)requests最基础的异步异步代理使用。
  scrapy:用scrapy搭建爬虫。scrapy对xpath文档爬取最新开源文档,当然有人会推荐爬虫框架crawlform,但是我没有找到太好的模块。爬虫框架lxml,这个版本后忘记,只找到过代码:代码:fromlxmlimportetreeclassbaseurlspider(scrapy.request):name='baseurlspider'allowed_domains=['jiafengchen']urlpatterns=[';a=ad&prefix=peizhihu']middlewares=[scrapy.cookiejar,scrapy.session]referer='/'class_tag='scrapy-form'meta={'user-agent':'mozilla/5.0(windowsnt6.1;win64;x64)applewebkit/537.36(khtml,likegecko)chrome/74.0.3423.136safari/537.36'}defparse(self,response):data=response.xpath('//html/div[1]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/div/di。

php curl抓取网页数据 自定义的断点程序么?-苏州安嘉

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

  php curl抓取网页数据 自定义的断点程序么?-苏州安嘉
  phpcurl抓取网页数据,http并非全部,只抓取一小部分:,也有一部分,自定义的断点代码,
  这个程序一般需要读取lsp、发送请求、设置断点和拦截器。目前市面上很多做的不错的web开发工具中已经自带了web断点、发送断点、设置断点、断言、观察窗口等功能。
  可以试试全局断点,不仅可以在整个链接断点,并且可以把方向阻止。
  x7或xxcff即可
  这是一个xss漏洞,虽然过期,而且它与你提到的几个命令并不相关,但它是xss漏洞之一,所以也出了解决办法(补充了一些torcrypt的信息),目前的解决办法是在目标页面加加或者在最高权限页面加钩子,这样当这些请求被触发时,它会发起断点续传。
  难道没有人做出自定义的断点程序么?我之前就想实现ajax拼接的脚本回调然后写的一个小小的后端。后来发现对于ajax一直有一个问题,那就是实际应用过程中,不能拿地址栏地址访问/获取返回内容,而且获取返回内容之后同样可以拿地址栏地址访问获取。于是考虑了很久,还是选择自定义web脚本断点断代,但还是在外置模块里编写。
  普通的断点脚本代码也是可以通过函数接口来设置断点的
  scratch可以自定义一个断点程序,最重要的是可以自定义断点条件吧,设置断点。 查看全部

  php curl抓取网页数据 自定义的断点程序么?-苏州安嘉
  phpcurl抓取网页数据,http并非全部,只抓取一小部分:,也有一部分,自定义的断点代码,
  这个程序一般需要读取lsp、发送请求、设置断点和拦截器。目前市面上很多做的不错的web开发工具中已经自带了web断点、发送断点、设置断点、断言、观察窗口等功能。
  可以试试全局断点,不仅可以在整个链接断点,并且可以把方向阻止。
  x7或xxcff即可
  这是一个xss漏洞,虽然过期,而且它与你提到的几个命令并不相关,但它是xss漏洞之一,所以也出了解决办法(补充了一些torcrypt的信息),目前的解决办法是在目标页面加加或者在最高权限页面加钩子,这样当这些请求被触发时,它会发起断点续传。
  难道没有人做出自定义的断点程序么?我之前就想实现ajax拼接的脚本回调然后写的一个小小的后端。后来发现对于ajax一直有一个问题,那就是实际应用过程中,不能拿地址栏地址访问/获取返回内容,而且获取返回内容之后同样可以拿地址栏地址访问获取。于是考虑了很久,还是选择自定义web脚本断点断代,但还是在外置模块里编写。
  普通的断点脚本代码也是可以通过函数接口来设置断点的
  scratch可以自定义一个断点程序,最重要的是可以自定义断点条件吧,设置断点。

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

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

  [精选] 模拟登陆并抓取数据,用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 个评论 • 52 次浏览 • 2022-05-23 11:08 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

phpcurl抓取网页数据-图片——填充这些图片信息构建查询表

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

  phpcurl抓取网页数据-图片——填充这些图片信息构建查询表
  phpcurl抓取网页数据-图片——切分图片数据在mysql中存储——填充这些图片信息构建查询表——数据整合到查询语句中——写进正则表达式中——并返回给浏览器word导入数据的方法——借助数据库资源
  在浏览器上看不到图片也就是它没有mac的硬盘所以即使在mac电脑上写完html发给浏览器它也看不到也就是说即使在mac上编程它还是看不到图片
  因为mac对html的支持一直都不好,直到现在从javascript开始。
  我也想问这个问题,我们团队用php写界面。不让用mac开发的主要原因,是因为mac太热,而且静态文件管理麻烦,在静态文件管理上的开销比xml大得多,严重影响开发进度和开发者的心情。在mac上,php经常出现无法加载sqlite数据库的情况。
  (看你mac装的啥版本了)其实php的加载逻辑基本就在于内置的http获取http请求头内容来解析网页源代码(cookie)其他的代码你写在js里面也能看到,网页效果也能加载完成,但是因为这个限制,php做出来的东西会干净很多
  谢谢邀请。并不是所有的mac都能使用curl,但是反之是可以的。因为curl对于浏览器来说就是脚本语言,他们的解析方式都是浏览器的一套表现,所以用mac的人就好多了,至少他能方便的使用http协议能抓取网页而不被浏览器限制,这样才有php随着更新不断添加进浏览器,获取网页上传数据, 查看全部

  phpcurl抓取网页数据-图片——填充这些图片信息构建查询表
  phpcurl抓取网页数据-图片——切分图片数据在mysql中存储——填充这些图片信息构建查询表——数据整合到查询语句中——写进正则表达式中——并返回给浏览器word导入数据的方法——借助数据库资源
  在浏览器上看不到图片也就是它没有mac的硬盘所以即使在mac电脑上写完html发给浏览器它也看不到也就是说即使在mac上编程它还是看不到图片
  因为mac对html的支持一直都不好,直到现在从javascript开始。
  我也想问这个问题,我们团队用php写界面。不让用mac开发的主要原因,是因为mac太热,而且静态文件管理麻烦,在静态文件管理上的开销比xml大得多,严重影响开发进度和开发者的心情。在mac上,php经常出现无法加载sqlite数据库的情况。
  (看你mac装的啥版本了)其实php的加载逻辑基本就在于内置的http获取http请求头内容来解析网页源代码(cookie)其他的代码你写在js里面也能看到,网页效果也能加载完成,但是因为这个限制,php做出来的东西会干净很多
  谢谢邀请。并不是所有的mac都能使用curl,但是反之是可以的。因为curl对于浏览器来说就是脚本语言,他们的解析方式都是浏览器的一套表现,所以用mac的人就好多了,至少他能方便的使用http协议能抓取网页而不被浏览器限制,这样才有php随着更新不断添加进浏览器,获取网页上传数据,

phpcurl抓取网页数据只能抓取基于url协议的数据采集策略

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

  phpcurl抓取网页数据只能抓取基于url协议的数据采集策略
  phpcurl抓取网页数据只能抓取基于url协议的数据,如何抓取wordpress或facebook类似网站的数据则需要针对不同网站的特点采用不同的爬虫策略及数据采集策略。这些不同的爬虫策略也可以有很多种,但是基本上分为两类:1.静态图片网站爬虫2.动态网站爬虫1.静态图片网站爬虫静态网站爬虫做抓取的前提是要有一定的cookie池,以redis或者memcached等数据库来存储静态页面上的图片信息。
  如果没有配置cookie池的话,可以采用phpcrawl实现,apache下也可以采用rewrite来实现。2.动态页面爬虫动态页面爬虫一般是由http的header中提供host参数来识别目标站点,然后切换目标站点来抓取,动态页面一般是以json或xml格式存储页面的数据,爬虫一般需要采用get方式来抓取页面数据,而不是post方式。
  下面用一张图来说明:inputlist=text.getline();print(inputlist);从上面的效果图可以看出来,直接post就是在请求图片名称,而http的host参数在一般情况下是不可以指定的,此时需要通过上面的rewrite函数来调用后台服务器发送一个get请求给后台程序。inputlist=text.getline();print(inputlist);rewrite()函数会把页面数据的返回值重定向到相应的响应对象(request对象或者response对象)。
  inputlist=text.getline();print(inputlist);所以从上面的效果图可以看出来,get请求和post请求区别在于返回值的不同,get请求返回的是源代码,而post请求返回的是json格式的页面数据。 查看全部

  phpcurl抓取网页数据只能抓取基于url协议的数据采集策略
  phpcurl抓取网页数据只能抓取基于url协议的数据,如何抓取wordpress或facebook类似网站的数据则需要针对不同网站的特点采用不同的爬虫策略及数据采集策略。这些不同的爬虫策略也可以有很多种,但是基本上分为两类:1.静态图片网站爬虫2.动态网站爬虫1.静态图片网站爬虫静态网站爬虫做抓取的前提是要有一定的cookie池,以redis或者memcached等数据库来存储静态页面上的图片信息。
  如果没有配置cookie池的话,可以采用phpcrawl实现,apache下也可以采用rewrite来实现。2.动态页面爬虫动态页面爬虫一般是由http的header中提供host参数来识别目标站点,然后切换目标站点来抓取,动态页面一般是以json或xml格式存储页面的数据,爬虫一般需要采用get方式来抓取页面数据,而不是post方式。
  下面用一张图来说明:inputlist=text.getline();print(inputlist);从上面的效果图可以看出来,直接post就是在请求图片名称,而http的host参数在一般情况下是不可以指定的,此时需要通过上面的rewrite函数来调用后台服务器发送一个get请求给后台程序。inputlist=text.getline();print(inputlist);rewrite()函数会把页面数据的返回值重定向到相应的响应对象(request对象或者response对象)。
  inputlist=text.getline();print(inputlist);所以从上面的效果图可以看出来,get请求和post请求区别在于返回值的不同,get请求返回的是源代码,而post请求返回的是json格式的页面数据。

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

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

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

利用flashxmlhttprequest对象传递参数的一些基本操作1-6

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

  利用flashxmlhttprequest对象传递参数的一些基本操作1-6
  
  phpcurl抓取网页数据,使用的是flashxmlhttprequest对象。flashxmlhttprequest数据传递方式为application/x-www-form-urlencoded,然后http请求返回的是html标签,还需要去解析这些html标签。利用xmlhttprequest对象传递参数有很多好处,比如方便页面构造,方便做数据对比。
  
  flashxmlhttprequest对象中还有一个参数是opener,来接收请求的参数,另外一个还是opener,来传递具体的参数。下面来简单说一下利用flashxmlhttprequest对象传递参数的一些基本操作1.构造请求参数如果我们要从网站中获取一段json,比如下面这段json:/*。 查看全部

  利用flashxmlhttprequest对象传递参数的一些基本操作1-6
  
  phpcurl抓取网页数据,使用的是flashxmlhttprequest对象。flashxmlhttprequest数据传递方式为application/x-www-form-urlencoded,然后http请求返回的是html标签,还需要去解析这些html标签。利用xmlhttprequest对象传递参数有很多好处,比如方便页面构造,方便做数据对比。
  
  flashxmlhttprequest对象中还有一个参数是opener,来接收请求的参数,另外一个还是opener,来传递具体的参数。下面来简单说一下利用flashxmlhttprequest对象传递参数的一些基本操作1.构造请求参数如果我们要从网站中获取一段json,比如下面这段json:/*。

phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件

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

  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件
  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件,有些xml文件在开发语言中本身是写死的格式,如php需要在java中显示调用json文件,对于php这些内容就不能通过schema进行修改了,而有些xml文件是可以通过本地的phpcurl进行字符串解析得到,因此大家会用一些phpxml解析库来解析这些文件。
  
  针对php6的extractx:php6中引入了extractx接口,用来解析php中所存储的数据库中的各种xml格式。对于phpinfo已经没有什么意义,不过通过phpinfo,我们可以大致了解php的的文件格式。intread_content(intnss,xml_extracted_typesost)xml_extracted_types规定了有几种嵌套路径是不能访问的:{"content":"content","content-dependent":"id1_content.xml","doc":"xmldecoder","extracted_path":"content_default_path"}实际执行过程中,intread_content(intnss,ost)的返回值是nsclass("foreign_origin_name");```所以默认情况下,extractx不会抓取任何xml文件。
  intread_frame(intnss,char*file)file是浏览器下的xml解析器的字符串,nss这个字符串是php中一种特殊的php-native字符串(非php语言可读),来自php5:monsystem对象,该对象内部有一个file_extracted_types类型表达式,可以对这些文件进行解析。
  
  如果在解析xml时,发现某个数据不是来自一个模板文件,也不是xml文件的表达式中被定义了某个字符串,就会得到该数据。file("stimg",nssamplefile(file,"test.xml"))在某些情况下,只能通过访问文件来获取xml数据,所以我们使用nslookup方法进行查找。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))查找时如果出现字符串嵌套,则通过转换操作。
  intread_response(intnss,xml_extracted_typesost)ost这个属性用来解析php缓存中的某个xml文件。通过ost可以查看该xml文件内容是否存在。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))我们在编写代码时,定义一个模板程序,用来显示相应xml文件中的表达式,如下intmain(intargc,char*argv[]){//解析php缓存中的xml文件a::p。 查看全部

  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件
  phpcurl抓取网页数据到本地缓存中缓存里有各种xml文件,有些xml文件在开发语言中本身是写死的格式,如php需要在java中显示调用json文件,对于php这些内容就不能通过schema进行修改了,而有些xml文件是可以通过本地的phpcurl进行字符串解析得到,因此大家会用一些phpxml解析库来解析这些文件。
  
  针对php6的extractx:php6中引入了extractx接口,用来解析php中所存储的数据库中的各种xml格式。对于phpinfo已经没有什么意义,不过通过phpinfo,我们可以大致了解php的的文件格式。intread_content(intnss,xml_extracted_typesost)xml_extracted_types规定了有几种嵌套路径是不能访问的:{"content":"content","content-dependent":"id1_content.xml","doc":"xmldecoder","extracted_path":"content_default_path"}实际执行过程中,intread_content(intnss,ost)的返回值是nsclass("foreign_origin_name");```所以默认情况下,extractx不会抓取任何xml文件。
  intread_frame(intnss,char*file)file是浏览器下的xml解析器的字符串,nss这个字符串是php中一种特殊的php-native字符串(非php语言可读),来自php5:monsystem对象,该对象内部有一个file_extracted_types类型表达式,可以对这些文件进行解析。
  
  如果在解析xml时,发现某个数据不是来自一个模板文件,也不是xml文件的表达式中被定义了某个字符串,就会得到该数据。file("stimg",nssamplefile(file,"test.xml"))在某些情况下,只能通过访问文件来获取xml数据,所以我们使用nslookup方法进行查找。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))查找时如果出现字符串嵌套,则通过转换操作。
  intread_response(intnss,xml_extracted_typesost)ost这个属性用来解析php缓存中的某个xml文件。通过ost可以查看该xml文件内容是否存在。strconv("syntax=json",nslookup("/\/\/entry/\/",nsurlopt(nssamplefile(file,"xml_extracted_types.xml"),"")))我们在编写代码时,定义一个模板程序,用来显示相应xml文件中的表达式,如下intmain(intargc,char*argv[]){//解析php缓存中的xml文件a::p。

:phpcurl抓取网页数据,可通过php中的get方法

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

  :phpcurl抓取网页数据,可通过php中的get方法
  
  phpcurl抓取网页数据,可通过php中的get方法去请求获取网页的内容。那么,通过get方法请求时,常常会遇到以下几个问题:请求头中header、user-agent、http、post请求都是会发送到对应服务器,如果设置请求头,curl一般来说会带上xhr.request.headers,如果请求头中缺少xhr.request.headers,但通过json的post方法可以将请求发送到该服务器。
  
  而通过post方法,curl一般就不会带上请求头。具体怎么避免这些问题呢?也很简单,只要在post请求中,填写请求头即可。\r\n或\r\n都可以代替。\r\n就是请求头的意思。请求头user-agent代表服务器返回的服务器端信息头部user-agent:mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/68.0.3104.176safari/537.36link:其中\r\n代表请求头中不带上header、user-agent、body以及其他依赖特殊字符就代表其他字符块。
  \r\n:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r。 查看全部

  :phpcurl抓取网页数据,可通过php中的get方法
  
  phpcurl抓取网页数据,可通过php中的get方法去请求获取网页的内容。那么,通过get方法请求时,常常会遇到以下几个问题:请求头中header、user-agent、http、post请求都是会发送到对应服务器,如果设置请求头,curl一般来说会带上xhr.request.headers,如果请求头中缺少xhr.request.headers,但通过json的post方法可以将请求发送到该服务器。
  
  而通过post方法,curl一般就不会带上请求头。具体怎么避免这些问题呢?也很简单,只要在post请求中,填写请求头即可。\r\n或\r\n都可以代替。\r\n就是请求头的意思。请求头user-agent代表服务器返回的服务器端信息头部user-agent:mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/68.0.3104.176safari/537.36link:其中\r\n代表请求头中不带上header、user-agent、body以及其他依赖特殊字符就代表其他字符块。
  \r\n:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r。

php curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

php curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 个评论 • 70 次浏览 • 2022-06-22 22:16 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!
  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()
  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)
  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)
  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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 curl抓取网页数据 这个包绝对值得你用心体验一次!

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

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub: 查看全部

  php curl抓取网页数据 这个包绝对值得你用心体验一次!
  
  杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang),“数据小魔方”创始人。
  这一段时间在研究R里面的数据抓取相关包,时不时的能发掘出一些惊喜。
  比如今天,我找到了一个自带请求器的解析包,而且还是嵌入的pantomjs无头浏览器,这样就不用你再傻乎乎的再去装个selenium驱动,也不用借助任何请求器(RCurl或者httr)包就可以自动解析带有js脚本的HTML文档。
  耳听为虚,眼见为实,还记得之前讲解表格数据抓取的那一节,遇到的天气数据表格,里面的数据拿不到,有些棘手。害得我动用了RSelenium调用了plantomjs才得以解决,但是!

  今天讲解的这个包将所有的任务量缩减到一句代码!
  library("rvest")
URL% xml2::url_escape(reserved ="][!$&'()*+,;=:/?@#")
  大家可以试一试使用普通的请求方法是否可以成功获取里面的表格(要是成功了算我输!!!)
  使用RCurl包请求!
  header% readHTMLTable(header=TRUE)
$`NULL`
NULL
  这是多大仇多大怨啊~_~
  使用rvest试一试:
  mytable %  read_html(encoding ="UTF-8") %>% html_table(header=TRUE) %>% `[[`(1)
[1] 月份     AQI      范围     质量等级 PM2.5    PM10     SO2      CO       NO2      O3
  恩,对,这次进步了,拿到了表头,可是这有什么卵用!!!
  使用selenium驱动浏览器
  #java -jar D:/selenium-server-standalone-3.3.1.jar<br />#system("java -jar D:/selenium-server-standalone-3.3.1.jar",intern=FALSE)<br /><br />start_session(root="http://localhost:4444/wd/hub/",browser ="phantomjs")  
post.url(URL)
mytable% stri_conv(from="utf-8") %>% read_html() %>% html_table()
quit_session()

  这次总算拿到了!数一数写了多少字的代码!
  有木有更加快捷的方法呢,当然有啦!
  接下来瞪大眼睛看这一款神器!
  使用rdom包:
  stopifnot(Sys.which("phantomjs") != "")<br />#以上代码检测系统路径中是否含有phantomjs浏览器<br />#如果没有下载过phantomjs浏览器或者下载过但是没有加入系统路径,<br />#记得从新操作一下,否则一下函数无法运行!devtools::install_github("cpsievert/rdom")<br />#安装rdom包(如果总是提示timeout的话,记得加载一下curl包)<br /><br /><br style="font-size: 14px;" />library("rdom")<br />tbl % readHTMLTable(header=TRUE)  %>% `[[`(1)

  有木有看清楚什么情况,没有,已经完事儿,真的是只有一行代码!
  似不似,有点儿惊讶,rdom后台调用了plantomjs浏览器渲染了整个html目标文档(包含里面的所有script标签里面的js动态脚本),所以readHTMLTable函数才有机会提取里面的表格(而这个过程,普通请求器比如RCurl或者httr都没有权限办到!),是不是很腻害呀!
  下面这一句只是稍微修复一下编码!
  names(tbl) % stri_conv(from="utf-8")
DT::datatable(tbl)


  这篇文章对于R语言网络数据抓取而言意义重大,这是我第一次在R里面看到竟然有一个自带请求器的解析器,而且还是调用的plantomjs无头浏览器,专治各种wed端js动态脚本的隐藏数据。
  rdom是一个很小众的包,但是它的设计理念有点儿逆天,整个包只有一个函数——rdom,和包名相同,它的工作只有一个,就是按照真实浏览器渲染HTML文档的模式去渲染整个HTML文档。在后台调用plantomjs来处理渲染的过程,之后你可以自由的使用其他R中的高效快捷函数进行元素提取。
  项目主页在这里!
  记得在使用前需要下载plantomjs无头浏览器(将浏览器目录添加到环境变量),很小的,不占内存。
  关于异步加载的逻辑以及为何带有异步加载的网页里,XML包的readHTMLTable函数和rvest包的html_table函数统统对束手无策,项目主页里作者都有提到。
  作者从更为专业的角度进行了解释!!!
  Web scraping packages such as XML, xml2 and rvest allow you to download and parse HTML files, but they lack a browsing engine to fully render the DOM.
  XML和xml2以及rvest包,允许你直接从url地址下载并解析HTML文档,但是它们确少一个中介浏览器引擎来渲染这些HTML源文档!
  XML::htmlParse() (and rvest::read_html()) returns the HTML page source,
  which is static, and doesn’t contain theelement we desire (because JavaScript is modifying the state of the DOM):
  因而,通过这些包请求到的HTML文档整体而言是静态的,它们不包含HTML文档中那些重要的嵌套在script标签内的数据(而这些script标签内的数据通常是由JavaScript脚本来进行操控和修改的)。
  The main function in rdom, rdom(), uses phantomjs to render and return the DOM as an HTML string. Instead of passing the entire DOM as a string from
  phantomjs to R, you can give rdom() a CSS Selector to extract certain element(s).
  rdom包只有一个函数——rdom,它在后台调用phantomjs浏览器来对请求的HTML文档进行渲染,并将渲染后的完整HTML文档返回。(而这个渲染过程现行R中所有请求器都无法办到)。你可以提供给rdom函数一个css路径,来从HTML文档中抽取一部分内容返回。
  对R语言数据抓取感兴趣的各位小伙伴儿,这个包绝对能给你带来惊喜,如果你有兴趣,甚至可以阅读它的源码,看大神什么是如何神不知鬼不觉的在底层封装plantomjs无头浏览器来解析动态js脚本的HTML文档的。
  希望最近这些小文,能给今后大家学习R语言数据抓取带有更多便利,让大家少走弯路。
  在线课程请点击文末原文链接:
  往期案例数据请移步本人GitHub:

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

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

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?

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

  phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?
  phpcurl抓取网页数据
  看你的爬虫核心代码是写python还是php?我个人爬虫用curl写的,github里可以找到源码。如果想学的话,推荐一个很好的文章翻译平台-语言学习-中国最大的it技术社区不要纠结这些技术性的东西。如果只是要抓网页那就写爬虫,设定好范围,爬哪些平台,然后再设定设定动机、要求啥的,注意锻炼业务能力,多设问,多思考,提高代码重构能力。网页抓取不是特别困难,用js+css也可以,就是多了点。
  首先,requests库是基于requests模块的http请求库,还有httpcookie之类的,如果只是抓取网页的话很简单,基本http协议抓取就可以。但是要搞懂通用语言python是个太大的话题,python可以爬取国内所有网站,但每个网站涉及的不一样,爬取各种网站后也许会发现某些网站对js加密严重,之类的,当你下定决心爬虫之后,你会发现模块啊、框架啊之类的太多,过多概念使得你无从下手,当你发现爬取又遇到问题时,又开始迷茫了。
  所以,建议先确定基础的爬虫框架,对照之,分析每个模块的使用场景,针对性的学习。python网页抓取的常用框架是requests、scrapy。有的框架的具体使用文档,例如web_base_requests,模块介绍的不错。我用过。首先看下介绍:各种框架,注意一点,要安装。requests:最基础的httpheader接收和处理方式,详细可以看书:http请求的处理(豆瓣)requests最基础的异步异步代理使用。
  scrapy:用scrapy搭建爬虫。scrapy对xpath文档爬取最新开源文档,当然有人会推荐爬虫框架crawlform,但是我没有找到太好的模块。爬虫框架lxml,这个版本后忘记,只找到过代码:代码:fromlxmlimportetreeclassbaseurlspider(scrapy.request):name='baseurlspider'allowed_domains=['jiafengchen']urlpatterns=[';a=ad&prefix=peizhihu']middlewares=[scrapy.cookiejar,scrapy.session]referer='/'class_tag='scrapy-form'meta={'user-agent':'mozilla/5.0(windowsnt6.1;win64;x64)applewebkit/537.36(khtml,likegecko)chrome/74.0.3423.136safari/537.36'}defparse(self,response):data=response.xpath('//html/div[1]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/div/di。 查看全部

  phpcurl抓取网页数据看你的爬虫核心代码是写python还是php?
  phpcurl抓取网页数据
  看你的爬虫核心代码是写python还是php?我个人爬虫用curl写的,github里可以找到源码。如果想学的话,推荐一个很好的文章翻译平台-语言学习-中国最大的it技术社区不要纠结这些技术性的东西。如果只是要抓网页那就写爬虫,设定好范围,爬哪些平台,然后再设定设定动机、要求啥的,注意锻炼业务能力,多设问,多思考,提高代码重构能力。网页抓取不是特别困难,用js+css也可以,就是多了点。
  首先,requests库是基于requests模块的http请求库,还有httpcookie之类的,如果只是抓取网页的话很简单,基本http协议抓取就可以。但是要搞懂通用语言python是个太大的话题,python可以爬取国内所有网站,但每个网站涉及的不一样,爬取各种网站后也许会发现某些网站对js加密严重,之类的,当你下定决心爬虫之后,你会发现模块啊、框架啊之类的太多,过多概念使得你无从下手,当你发现爬取又遇到问题时,又开始迷茫了。
  所以,建议先确定基础的爬虫框架,对照之,分析每个模块的使用场景,针对性的学习。python网页抓取的常用框架是requests、scrapy。有的框架的具体使用文档,例如web_base_requests,模块介绍的不错。我用过。首先看下介绍:各种框架,注意一点,要安装。requests:最基础的httpheader接收和处理方式,详细可以看书:http请求的处理(豆瓣)requests最基础的异步异步代理使用。
  scrapy:用scrapy搭建爬虫。scrapy对xpath文档爬取最新开源文档,当然有人会推荐爬虫框架crawlform,但是我没有找到太好的模块。爬虫框架lxml,这个版本后忘记,只找到过代码:代码:fromlxmlimportetreeclassbaseurlspider(scrapy.request):name='baseurlspider'allowed_domains=['jiafengchen']urlpatterns=[';a=ad&prefix=peizhihu']middlewares=[scrapy.cookiejar,scrapy.session]referer='/'class_tag='scrapy-form'meta={'user-agent':'mozilla/5.0(windowsnt6.1;win64;x64)applewebkit/537.36(khtml,likegecko)chrome/74.0.3423.136safari/537.36'}defparse(self,response):data=response.xpath('//html/div[1]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/div/di。

php curl抓取网页数据 自定义的断点程序么?-苏州安嘉

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

  php curl抓取网页数据 自定义的断点程序么?-苏州安嘉
  phpcurl抓取网页数据,http并非全部,只抓取一小部分:,也有一部分,自定义的断点代码,
  这个程序一般需要读取lsp、发送请求、设置断点和拦截器。目前市面上很多做的不错的web开发工具中已经自带了web断点、发送断点、设置断点、断言、观察窗口等功能。
  可以试试全局断点,不仅可以在整个链接断点,并且可以把方向阻止。
  x7或xxcff即可
  这是一个xss漏洞,虽然过期,而且它与你提到的几个命令并不相关,但它是xss漏洞之一,所以也出了解决办法(补充了一些torcrypt的信息),目前的解决办法是在目标页面加加或者在最高权限页面加钩子,这样当这些请求被触发时,它会发起断点续传。
  难道没有人做出自定义的断点程序么?我之前就想实现ajax拼接的脚本回调然后写的一个小小的后端。后来发现对于ajax一直有一个问题,那就是实际应用过程中,不能拿地址栏地址访问/获取返回内容,而且获取返回内容之后同样可以拿地址栏地址访问获取。于是考虑了很久,还是选择自定义web脚本断点断代,但还是在外置模块里编写。
  普通的断点脚本代码也是可以通过函数接口来设置断点的
  scratch可以自定义一个断点程序,最重要的是可以自定义断点条件吧,设置断点。 查看全部

  php curl抓取网页数据 自定义的断点程序么?-苏州安嘉
  phpcurl抓取网页数据,http并非全部,只抓取一小部分:,也有一部分,自定义的断点代码,
  这个程序一般需要读取lsp、发送请求、设置断点和拦截器。目前市面上很多做的不错的web开发工具中已经自带了web断点、发送断点、设置断点、断言、观察窗口等功能。
  可以试试全局断点,不仅可以在整个链接断点,并且可以把方向阻止。
  x7或xxcff即可
  这是一个xss漏洞,虽然过期,而且它与你提到的几个命令并不相关,但它是xss漏洞之一,所以也出了解决办法(补充了一些torcrypt的信息),目前的解决办法是在目标页面加加或者在最高权限页面加钩子,这样当这些请求被触发时,它会发起断点续传。
  难道没有人做出自定义的断点程序么?我之前就想实现ajax拼接的脚本回调然后写的一个小小的后端。后来发现对于ajax一直有一个问题,那就是实际应用过程中,不能拿地址栏地址访问/获取返回内容,而且获取返回内容之后同样可以拿地址栏地址访问获取。于是考虑了很久,还是选择自定义web脚本断点断代,但还是在外置模块里编写。
  普通的断点脚本代码也是可以通过函数接口来设置断点的
  scratch可以自定义一个断点程序,最重要的是可以自定义断点条件吧,设置断点。

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

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

  [精选] 模拟登陆并抓取数据,用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 个评论 • 52 次浏览 • 2022-05-23 11:08 • 来自相关话题

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

phpcurl抓取网页数据-图片——填充这些图片信息构建查询表

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

  phpcurl抓取网页数据-图片——填充这些图片信息构建查询表
  phpcurl抓取网页数据-图片——切分图片数据在mysql中存储——填充这些图片信息构建查询表——数据整合到查询语句中——写进正则表达式中——并返回给浏览器word导入数据的方法——借助数据库资源
  在浏览器上看不到图片也就是它没有mac的硬盘所以即使在mac电脑上写完html发给浏览器它也看不到也就是说即使在mac上编程它还是看不到图片
  因为mac对html的支持一直都不好,直到现在从javascript开始。
  我也想问这个问题,我们团队用php写界面。不让用mac开发的主要原因,是因为mac太热,而且静态文件管理麻烦,在静态文件管理上的开销比xml大得多,严重影响开发进度和开发者的心情。在mac上,php经常出现无法加载sqlite数据库的情况。
  (看你mac装的啥版本了)其实php的加载逻辑基本就在于内置的http获取http请求头内容来解析网页源代码(cookie)其他的代码你写在js里面也能看到,网页效果也能加载完成,但是因为这个限制,php做出来的东西会干净很多
  谢谢邀请。并不是所有的mac都能使用curl,但是反之是可以的。因为curl对于浏览器来说就是脚本语言,他们的解析方式都是浏览器的一套表现,所以用mac的人就好多了,至少他能方便的使用http协议能抓取网页而不被浏览器限制,这样才有php随着更新不断添加进浏览器,获取网页上传数据, 查看全部

  phpcurl抓取网页数据-图片——填充这些图片信息构建查询表
  phpcurl抓取网页数据-图片——切分图片数据在mysql中存储——填充这些图片信息构建查询表——数据整合到查询语句中——写进正则表达式中——并返回给浏览器word导入数据的方法——借助数据库资源
  在浏览器上看不到图片也就是它没有mac的硬盘所以即使在mac电脑上写完html发给浏览器它也看不到也就是说即使在mac上编程它还是看不到图片
  因为mac对html的支持一直都不好,直到现在从javascript开始。
  我也想问这个问题,我们团队用php写界面。不让用mac开发的主要原因,是因为mac太热,而且静态文件管理麻烦,在静态文件管理上的开销比xml大得多,严重影响开发进度和开发者的心情。在mac上,php经常出现无法加载sqlite数据库的情况。
  (看你mac装的啥版本了)其实php的加载逻辑基本就在于内置的http获取http请求头内容来解析网页源代码(cookie)其他的代码你写在js里面也能看到,网页效果也能加载完成,但是因为这个限制,php做出来的东西会干净很多
  谢谢邀请。并不是所有的mac都能使用curl,但是反之是可以的。因为curl对于浏览器来说就是脚本语言,他们的解析方式都是浏览器的一套表现,所以用mac的人就好多了,至少他能方便的使用http协议能抓取网页而不被浏览器限制,这样才有php随着更新不断添加进浏览器,获取网页上传数据,

phpcurl抓取网页数据只能抓取基于url协议的数据采集策略

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

  phpcurl抓取网页数据只能抓取基于url协议的数据采集策略
  phpcurl抓取网页数据只能抓取基于url协议的数据,如何抓取wordpress或facebook类似网站的数据则需要针对不同网站的特点采用不同的爬虫策略及数据采集策略。这些不同的爬虫策略也可以有很多种,但是基本上分为两类:1.静态图片网站爬虫2.动态网站爬虫1.静态图片网站爬虫静态网站爬虫做抓取的前提是要有一定的cookie池,以redis或者memcached等数据库来存储静态页面上的图片信息。
  如果没有配置cookie池的话,可以采用phpcrawl实现,apache下也可以采用rewrite来实现。2.动态页面爬虫动态页面爬虫一般是由http的header中提供host参数来识别目标站点,然后切换目标站点来抓取,动态页面一般是以json或xml格式存储页面的数据,爬虫一般需要采用get方式来抓取页面数据,而不是post方式。
  下面用一张图来说明:inputlist=text.getline();print(inputlist);从上面的效果图可以看出来,直接post就是在请求图片名称,而http的host参数在一般情况下是不可以指定的,此时需要通过上面的rewrite函数来调用后台服务器发送一个get请求给后台程序。inputlist=text.getline();print(inputlist);rewrite()函数会把页面数据的返回值重定向到相应的响应对象(request对象或者response对象)。
  inputlist=text.getline();print(inputlist);所以从上面的效果图可以看出来,get请求和post请求区别在于返回值的不同,get请求返回的是源代码,而post请求返回的是json格式的页面数据。 查看全部

  phpcurl抓取网页数据只能抓取基于url协议的数据采集策略
  phpcurl抓取网页数据只能抓取基于url协议的数据,如何抓取wordpress或facebook类似网站的数据则需要针对不同网站的特点采用不同的爬虫策略及数据采集策略。这些不同的爬虫策略也可以有很多种,但是基本上分为两类:1.静态图片网站爬虫2.动态网站爬虫1.静态图片网站爬虫静态网站爬虫做抓取的前提是要有一定的cookie池,以redis或者memcached等数据库来存储静态页面上的图片信息。
  如果没有配置cookie池的话,可以采用phpcrawl实现,apache下也可以采用rewrite来实现。2.动态页面爬虫动态页面爬虫一般是由http的header中提供host参数来识别目标站点,然后切换目标站点来抓取,动态页面一般是以json或xml格式存储页面的数据,爬虫一般需要采用get方式来抓取页面数据,而不是post方式。
  下面用一张图来说明:inputlist=text.getline();print(inputlist);从上面的效果图可以看出来,直接post就是在请求图片名称,而http的host参数在一般情况下是不可以指定的,此时需要通过上面的rewrite函数来调用后台服务器发送一个get请求给后台程序。inputlist=text.getline();print(inputlist);rewrite()函数会把页面数据的返回值重定向到相应的响应对象(request对象或者response对象)。
  inputlist=text.getline();print(inputlist);所以从上面的效果图可以看出来,get请求和post请求区别在于返回值的不同,get请求返回的是源代码,而post请求返回的是json格式的页面数据。

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

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

  [精选] 模拟登陆并抓取数据,用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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

官方客服QQ群

微信人工客服

QQ人工客服


线