PHP爬取企业详情(百度信用)
1、爬取思想
百度信用網站 https://xin.baidu.com/
1.1、嘗試獲取數據和查看url鏈接
1、我們可以隨便搜索法人代表,例如輸入:馬云
- 對應的鏈接就會出現 https://xin.baidu.com/s?q=%E9%A9%AC%E4%BA%91&t=0
2、我們嘗試搜索公司名稱,例如輸入:阿里巴巴
- 對應的鏈接就會出現 https://xin.baidu.com/s?q=%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4&t=0
3、我們嘗試搜索社會統一信用碼,例如輸入:91330100716105852F
- 對應的鏈接就會出現 https://xin.baidu.com/s?q=%E9%A9%AC%E4%BA%91&t=0
4、我們嘗試搜索企業地址,例如輸入:浙江省杭州市濱江區網商路699號
- 對應的鏈接就會出現 https://xin.baidu.com/s?q=%E6%B5%99%E6%B1%9F%E7%9C%81%E6%9D%AD%E5%B7%9E%E5%B8%82%E6%BB%A8%E6%B1%9F%E5%8C%BA%E7%BD%91%E5%95%86%E8%B7%AF699%E5%8F%B7&t=0
綜述:其中對應的q=后面的值就是 搜索關鍵詞,因為編碼問題顯示的不是中文而是%E9%A9%AC%E4%BA%91,而**t=**后面的值對應的是 搜索類型 如下,有8種:0=全部,1=企業名/注冊號,2=法人代表,3=地址,4=經營范圍,5=股東,6=高管,7=商標
1.2、查看網頁源代碼的內容
- 可以通過右鍵查看源代碼
- 使用Postman等測試工具查看,如下圖
從上圖可以看出返回的數據中有json數據,大部分獲取數據都是從這里取出來的。
所以我們只需要截取這里面的內容,轉換下就可以了。
##2、PHP代碼實現
#####2.1、爬取企業信息
- strpos 方法是用于計算字符串出現該字符的第一個位置
- substr 方法是用于截取字符串的
其中 define(‘global/tplData’, 后面的數據才是我們要的,所以開始的位置是 取到的位置 + 25個字符,從源代碼也可以知道結束的位置是 }]}) ,所以結束的位置是 取到的位置 + 3個字符,所以截取的字符串就是 開始位置 截取,長度為 結束位置 - 開始位置,從獲取的內容是 resultList 里面。
2、分析與實現
2.2、爬取內容分析
- 舉例:輸入的關鍵詞為 阿里巴巴,輸出的話我這里只顯示一部分給大家分析
從上面數據可以看出我們要的內容:
- logoWord —LOGO關鍵詞, titleName —企業名稱,titleLegal —企業法人
- regCap —企業注冊資產, scope —企業經營范圍,entType —企業類型
- openStatus —企業開業狀態, validityFrom —企業注冊時間,titleDomicile —企業地址
- 大體上需要的信息就在上面了,其中有些字段,例如:entName、domicile、legalPerson 這些有可能是搜索的關鍵詞,會出現 高亮的標簽,這樣會影響我們取數據。
2.3、詳細的處理數據并輸出
//獲取公司統一社會信用代碼 $keyword = input('keyword') ?? 0; if (!$keyword) $this->error('請填寫關鍵詞!'); $url = 'https://xin.baidu.com/s?q=' . $keyword . '&t=0'; $res = file_get_contents($url);//獲取爬取到數據的對象 $start = strpos($res, 'define(\'global/tplData\',', 0) + 25; $end = strpos($res, '}]})', $start) + 3; $info = json_decode(substr($res, $start, $end - $start), 1)['resultList']; if (empty($info)) $this->error('未找到該企業!');$data = []; foreach ($info as $key => $val) {$inData = ['titleName' => $val['titleName'], //公司名稱'entType' => $val['entType'], //公司類型'titleDomicile' => $val['titleDomicile'], //公司地址'titleLegal' => $val['titleLegal'], //公司法人'openStatus' => $val['openStatus'], //開業狀態'regCap' => $val['regCap'], //公司注冊資產'scope' => isset($val['scope']) ? $val['scope'] : '', //公司信息'validityFrom' => $val['validityFrom'], //注冊時間];$data[] = $inData; }$this->success('獲取公司詳情成功!', $data);- 通過搜索關鍵詞 阿里巴巴 ,我們得到的結果如下:
這樣就可以得到我們要的數據了
- 作者我建議還是讓用戶輸入社會統一信用碼來精準搜索會好點,代碼如下:
- 如果只查詢信用碼的話需要判斷是否正確的信用碼,我這里直接去判斷信用碼是否在企業名字符串中,因為我們傳的類型 t=1 是包括信用碼和企業名的查詢參數。
結果輸出如下:
{"code": 1,"msg": "獲取公司詳情成功!","time": "1587556071","data": {"titleName": "貴州龍恒農業生態發展有限公司","entType": "有限責任公司(自然人投資或控股)","titleDomicile": "貴州省貴陽市南明區花果園后街彭家灣花果園項目E區第E8(國際金融街2號)棟(E8)1單元19層12號[花果園社區]","titleLegal": "黃恩祥","openStatus": "開業","regCap": "100.0萬","scope": "法律、法規、國務院決定規定禁止的不得經營;法律、法規、國務院決定規定應當許可(審批)的,經審批機關批準后憑許可(審批)文件經營;法律、法規、國務院決定規定無需許可(審批)的,市場主體自主選擇經營。(農業生態項目開發;銷售:農產品、辦公設備、五金交電、玩具、辦公用品、日用百貨、服裝、家用電器、電腦耗材、電子產品、通訊器材、消防器材、安防器材、環保器材、橡膠制品、礦產品、礦渣、鋁合金制品、建筑材料、電線電纜、潤滑油、金屬材料、工藝品、珠寶首飾、鐘表眼鏡、二三類機電產品;工程勞務分包;房地產經紀。)","validityFrom": "2012-03-23"} }謝謝大家的觀賞,如果有什么錯誤的地方請多指教。
PS:僅供學習和參考,禁止商用。如果觸犯法律請并承擔法律責任與賠償!
總結
以上是生活随笔為你收集整理的PHP爬取企业详情(百度信用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维码 | 如何实现一码多用
- 下一篇: PHP操作文件常用函数