Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91手机在线观看,国产视频在线免费观看,国产91视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          php采集網頁數據(php采集類)

          php采集網頁數據(php采集類)

          、概述

          在進行網頁數據采集時,PHP是一種常用的語言,它提供了多種設置方式來實現采集功能。本文將對這些設置方式進行評測和比較,以幫助讀者選擇最適合自己需求的方式。

          二、使用cURL庫

          cURL是一個強大的開源庫,可以實現各種網絡通信功能。在PHP中,通過cURL庫可以方便地進行網頁數據的采集。使用cURL庫的優點是操作靈活,可以模擬用戶行為,支持多線程,并且對于反爬蟲機制有一定的應對能力。然而,使用cURL庫需要具備一定的網絡編程知識,并且代碼量相對較多。

          三、使用file_get_contents函數

          file_get_contents函數是PHP提供的一個簡單易用的文件讀取函數,在采集網頁數據時也可以使用該函數。它的優點是代碼簡潔、易于理解和維護,適合簡單的數據采集任務。然而,file_get_contents函數無法處理需要登錄或帶有反爬蟲機制的網站。

          四、使用第三方庫Guzzle

          Guzzle是一個流行的PHP HTTP客戶端庫,提供了豐富的功能和易用的接口。它支持并發請求、重試機制、cookie管理等特性,非常適合進行網頁數據采集。使用Guzzle的優點是可以快速實現功能,代碼清晰易讀。但是,由于Guzzle是一個第三方庫,需要額外安裝和配置。

          五、使用第三方工具Selenium

          Selenium是一個自動化測試工具,也可以用于網頁數據采集。它可以模擬瀏覽器行為,支持JavaScript渲染,適應復雜頁面的采集。使用Selenium的優點是功能強大,適用于各種場景,并且有大量的學習資源可供參考。但是,相比其他方式,使用Selenium需要額外安裝瀏覽器驅動程序,并且對系統資源消耗較大。

          六、使用PhantomJS

          PhantomJS是一個無界面的瀏覽器引擎,可以實現網頁截圖、頁面渲染等功能。在進行網頁數據采集時,也可以利用PhantomJS來獲取網頁內容。PhantomJS的優點是操作簡單,支持多種語言調用,并且對JavaScript渲染有很好的支持。然而,PhantomJS已經停止維護,并且在部分情況下可能存在性能問題。

          七、比較與選擇

          根據不同的需求和場景,選擇合適的PHP設置方式是很重要的。如果需要靈活的操作和對抗反爬蟲機制,可以選擇使用cURL庫;如果只是進行簡單的數據采集,可以考慮使用file_get_contents函數;如果需要更多功能和易用性,可以嘗試使用Guzzle或Selenium;如果對性能要求較高,可以考慮使用PhantomJS。綜合考慮各種因素,選擇最適合自己需求的設置方式。

          八、總結

          本文對PHP采集文章的設置方式進行了評測和比較,介紹了cURL庫、file_get_contents函數、Guzzle、Selenium和PhantomJS等幾種常用方式。根據不同的需求和場景,讀者可以選擇最適合自己的設置方式來實現網頁數據采集。希望本文對讀者在PHP采集文章方面有所幫助。

          為一名資深網絡編輯,我一直以來都非常關注著網絡內容的質量和采集規則。近日,我有幸采訪到了業界著名的 PHP 編程專家小李,并向他請教了關于 PHP 文章采集規則的實用技巧。在這篇文章中,我將與大家分享這些寶貴的經驗和建議。

          1.了解目標網站結構

          小李告訴我,要想成功采集目標網站的文章,首先需要對目標網站的結構進行詳細了解。通過分析網頁源碼、URL 參數等信息,可以更好地定位和提取目標文章。

          2.使用合適的采集工具

          針對不同的采集需求,小李推薦了幾款功能強大、易于使用的 PHP 采集工具。例如,可以使用 Simple HTML DOM Parser 來解析 HTML 文檔,并提取所需內容。

          3.處理 JavaScript 渲染

          現在很多網站都使用 JavaScript 進行頁面渲染,這給采集帶來了一定難度。小李建議可以利用無頭瀏覽器(Headless Browser)來模擬瀏覽器行為,從而解決 JavaScript 渲染的問題。

          4.設置合理的采集頻率

          在進行文章采集時,要注意設置合理的采集頻率,避免給目標網站帶來過大的訪問壓力。小李建議可以使用定時任務或者監控工具來控制采集頻率,以免被目標網站封禁。

          5.處理反爬蟲機制

          為了防止惡意爬蟲對網站造成損害,很多網站都設置了反爬蟲機制。小李提醒我們要注意處理這些機制,可以通過設置合適的 User-Agent、使用代理 IP 等方式來規避反爬蟲策略。

          6.數據清洗和去重

          采集到的文章可能存在一些噪音數據和重復內容。小李建議在采集后進行數據清洗和去重處理,以提高數據質量和減少存儲空間占用。

          7.合法合規使用采集結果

          在進行文章采集時,務必要遵守相關法律法規,并確保使用采集結果的合法性。小李強調了保護知識產權和個人隱私的重要性,呼吁大家要有責任心和法律意識。

          8.不斷學習和提升

          最后,小李鼓勵大家要不斷學習和提升自己的采集技術。網絡環境和網站結構都在不斷變化,只有保持學習的態度,才能跟上時代的步伐。

          通過與小李的交流,我深刻感受到了 PHP 文章采集規則的復雜性和挑戰性。但同時,我們也看到了解決問題的方法和技巧。相信在大家共同努力下,我們一定能夠更好地利用 PHP 技術進行文章采集,并為網絡內容質量的提升做出更大的貢獻!

          理見《PowerQuery爬取網頁終極攻略——Power Query網絡爬取詳解》。施陽大神的手筆。pqfans是個好去處,有興趣的可以多瞄瞄。

          1、翻頁URL會變化,直接get方式提交

          URL:http://quote.stockstar.com/stock/ranklist_a_3_1_1.html

          此為滬深A股數據,需要抓取1-20頁的所有數據。點擊下一頁后觀察URL發現,html前面最后一個數字即為頁數,那么只需要自定義函數,將其做成變量然后調用即可。另外發現每一頁的最后一行都是多余的,可以用Table.RemoveLastN刪掉。

          let
           get_data=(x)=>Table.RemoveLastN(Web.Page(Web.Contents("http://quote.stockstar.com/stock/ranklist_a_3_1_"&Text.From(x)&".html")){0}[Data],1),
           result=Table.Combine(List.Transform({1..20},get_data))
          in
           result
          

          2、翻頁URL不會變化,F12找出真實地址

          URL:http://221.215.38.136/grcx/kscx/list.action?kscxVo.jsp=ylypmlcx.jsp

          要抓取1-20頁數據,但發現翻頁URL不會變,無法根據URL控制頁數。瀏覽器按F12發現,網頁以get方式提交,圖中參數4即為頁數,表格的真實URL為http://221.215.38.136/grcx/pages/kscx/ylypmlcx.jsp?page_ylypmlcxQuery=4,于是方法同上。

          let
           source=Table.Combine(List.Transform({1..20},each Web.Page(Web.Contents("http://221.215.38.136/grcx/pages/kscx/ylypmlcx.jsp?page_ylypmlcxQuery="&Text.From(_))){2}[Data])),
           result=Table.SelectRows(source, each not Text.StartsWith([藥品編碼], "當前"))
          in
           result
          

          3、post方式提交

          URL:http://www.drugfuture.com/cndrug/national.aspx?ApprovalDateStart=2016-01-01&ApprovalDateEnd=2016-12-31

          和之前不同的是,該網頁是以post方式提交,如果只是在URL后加參數無法得到正確的頁數,于是要用到Web.Contents中的Content提交post參數,另外headers中的Content-Type是必須的,所以也要加進來。因為有個"-"為特殊符號,所以要加個#""。

          需要注意的是,提交的參數需要是encode后的,__VIEWSTATE參數太長了,我沒放進來,自己改一下。

          let
           get_data=(page)=>
           let
           url="http://www.drugfuture.com/cndrug/national.aspx",
           headers=[#"Content-Type"="application/x-www-form-urlencoded"],
           content="__EVENTTARGET=GridViewNational&__EVENTARGUMENT=Page%24"&Text.From(page)&"&__VIEWSTATE=太長了自己改吧",
           query=[ApprovalDateStart="2016-01-01",ApprovalDateEnd="2016-12-31"],
           web_data=Web.Contents(url,[Query=query,Headers=headers,Content=Text.ToBinary(content)]),
           data=Table.RemoveLastN(Web.Page(Text.FromBinary(web_data))[Data]{0},1)
           in
           data,
           result=Table.Combine(List.Transform({1..78},get_data))
          in
           result
          

          4、需要登錄,加cookies

          URL:http://www.51mis.com/biaozhun/index.php?module=Accounts&action=index&parenttab=Parent%20Accounts

          這是一個CRM的試用賬戶,現要抓出客戶分類中的vip客戶下的1-4頁的所有信息。這里面有三個問題要解決:①需要登陸 ②點擊客戶分類下的任何子分類URL都不會變,如何定位到我們想要的vip客戶 ③翻頁問題

          我們首先打開這個URL驗證下手機號登陸,然后打開一個新窗口,再次打開這個URL,發現看到的已經和剛才不一樣了,這是因為剛才登陸后服務器已經把所有的身份識別信息記錄在cookies中,當再次訪問的時候瀏覽器檢查到本地有cookies,于是向服務器提交了一個headers中帶有cookies的請求,驗證通過。所以我們只需要復制cookies添加到headers中即可,問題①解決。

          然后嘗試點擊客戶分類下的不同子分類,對比發現有一個叫viewname的參數在變化,而vip客戶對應的參數為179,問題②解決。

          頁碼對應的則是start參數,上面介紹過,問題③解決。

          let 
           get_data=(page)=>
           let
           url="http://www.51mis.com/biaozhun/index.php",
           headers=[#"Content-type"="application/x-www-form-urlencoded",Cookie="ck_login_id_lingdang=201; ck_login_theme_lingdang=softed; ck_login_language_lingdang=zh_cn; IESESSION=alive; _qddamta_4008885110=3-0; pgv_pvi=1109719040; pgv_si=s9133628416; tencentSig=2914921472; Hm_lvt_15823373277d5586cce1d8fa22740e98=1498477295,1498478011; Hm_lpvt_15823373277d5586cce1d8fa22740e98=1498478011; LXB_REFER=www.baidu.com; _qddaz=QD.evgckn.ew8amb.j4e2ox3t; PHPSESSID=j0m2ou15d8hcumonfcul46kj64; _qdda=3-1.3bt43b; _qddab=3-i0t2ae.j4e2ox3v"],
           content="viewname=179&start="&Text.From(page),
           query=[action="index",module="Accounts"],
           web_data=Web.Contents(url,[Query=query,Headers=headers,Content=Text.ToBinary(content)]),
           table=Web.Page(Text.FromBinary(web_data)){0}[Data]
           in
           table,
           result=Table.RemoveColumns(Table.Combine(List.Transform({1..4},get_data)),{""})
          in
           result
          

          5、返回json:

          URL:http://sports.sina.com.cn/g/ucl/table.html

          要抓取2011-2016所有歐冠積分榜數據。通過F12不難找到真實地址,去掉無關參數后為http://platform.sina.com.cn/sports_all/client_api?_sport_t_=football&_sport_s_=opta&_sport_a_=teamOrder&app_key=3571367214&type=10&season=2016。把這個地址復制到瀏覽器打開,發現出來的和上面的案例都不一樣,返回的是json,那么就需要使用Json.Document來解析,其中season參數控制賽季,自定義函數后構建{2011..2016}的list調用即可:

          let
           get_data=(x)=>Table.FromRecords(Json.Document(Web.Contents("http://platform.sina.com.cn/sports_all/client_api?_sport_t_=football&_sport_s_=opta&_sport_a_=teamOrder&app_key=3571367214&type=10&season="&Text.From(x)))[result][data]),
           result=Table.Combine(List.Transform({2011..2016},get_data))
          in
           result
          

          6、非結構化數據:

          以上案例都有一個共同點:都為結構化數據,可以直接通過解析表或json等方式從而獲取數據,但有些網頁中的數據是非結構化的。

          例如:爬取本站頁面https://pqfans.com/catalog中所有的錨鏈接。

          對于這種非結構化的網頁,只能通過Text.FromBinary解析出源碼,然后當文本處理。如果網頁的編碼為GBK或GB2312,Text.FromBinary的第二參數要加個0,否則會出現亂碼,如果是UTF-8則不用第二參數。

          let
           source=Text.FromBinary(Web.Contents("https://pqfans.com/catalog")),
           result=List.Transform({0..List.Count(Text.PositionOf(源,"<a href=""https://pqfans.com/",2))-1},each "https://pqfans.com/"&Text.BetweenDelimiters(源,"<a href=""https://pqfans.com/","""",_))
          in
           result
          

          處理動態參數

          對于動態參數,可以把變量寫在單元格中,然后將單元格導入PQ,效果如下圖:

          修改單元格中的值,刷新即可得到不同日期、不同類型等數據,體驗類似于網頁中的查詢。

          練習

          URL:http://datacenter.mep.gov.cn/index!MenuAction.action?name=402880fb24e695b60124e6973db30011

          請用以上介紹的方法,抓出2017/6/20-2017/6/23全部49頁的全國城市空氣質量日報

          來源于施陽大神。


          主站蜘蛛池模板: 伊人色综合网一区二区三区 | 国产精品久久久久一区二区三区| 国产精品一区二区久久国产| 最新中文字幕一区二区乱码| 国产精华液一区二区区别大吗| 精品乱人伦一区二区| 精品国产AV一区二区三区| 无码精品人妻一区二区三区中| 一区二区三区四区精品| 国产精品一区二区久久沈樵| 色综合视频一区中文字幕| 精品无码一区二区三区爱欲九九 | 好爽毛片一区二区三区四| 精品国产一区二区三区久久影院| 末成年女A∨片一区二区| 秋霞午夜一区二区| 波多野结衣一区二区三区aV高清| 后入内射国产一区二区| 国产一区二区三区小向美奈子| 午夜性色一区二区三区免费不卡视频| 亚洲一区中文字幕久久| 无码视频一区二区三区在线观看| 亚洲一区二区三区AV无码| www.亚洲一区| 亚洲综合国产一区二区三区| 另类一区二区三区| 亚洲一区中文字幕久久| 99久久无码一区人妻a黑| 国产精品高清一区二区人妖| 日本视频一区在线观看免费| 波多野结衣一区二区三区 | 日本不卡一区二区三区视频| 精品亚洲综合在线第一区| 风间由美性色一区二区三区| 亚洲av午夜福利精品一区| 精品亚洲AV无码一区二区三区| bt7086福利一区国产| 国产亚洲综合精品一区二区三区| 一级特黄性色生活片一区二区| 中文字幕无码免费久久9一区9| 亚洲日韩精品无码一区二区三区|