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