本篇內(nèi)容主要講解“Python怎么爬取企查查網(wǎng)站中的公司信息”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python怎么爬取企查查網(wǎng)站中的公司信息”吧!
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供公安網(wǎng)站建設(shè)、公安做網(wǎng)站、公安網(wǎng)站設(shè)計(jì)、公安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、公安企業(yè)網(wǎng)站模板建站服務(wù),十載公安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1、獲取headers
2、登錄成功后,可根據(jù)輸入的公司名稱進(jìn)行查詢操作,得到所需要的內(nèi)容。
3、將獲取到的文本進(jìn)行文本特殊化處理,并將其匯總成一個dataframe,方便后面保存為csv
4、輸入公司名稱
5、最后執(zhí)行此代碼,查詢companys列表中所有公司名稱的詳細(xì)信息并保存為csv。
1、進(jìn)入企查查官網(wǎng)進(jìn)行注冊并登錄。
2、然后按F12彈出開發(fā)者工具,點(diǎn)擊Network,然后你會看到企查查這個網(wǎng)址,點(diǎn)擊一下
然后可以找到我們需要復(fù)制的header,這是非常關(guān)鍵的步驟,切記這個header是自己注冊之后登錄成功所獲取的header,這樣方便后面保存一次之后就可以在一定時間內(nèi)無限訪問網(wǎng)址進(jìn)行查詢的操作。
from bs4 import BeautifulSoup import requests import time # 保持會話 # 新建一個session對象 sess = requests.session() # 添加headers(header為自己登錄的企查查網(wǎng)址,輸入賬號密碼登錄之后所顯示的header,此代碼的上方介紹了獲取方法) afterLogin_headers = {'User-Agent': '此代碼上方介紹了獲取的方法'} # post請求(代表著登錄行為,登錄一次即可保存,方便后面執(zhí)行查詢指令) login = {'user':'自己注冊的賬號','password':'密碼'} sess.post('https://www.qcc.com',data=login,headers=afterLogin_headers)
整段代碼的含義為:偽裝成用戶進(jìn)行登錄行為(返回200狀態(tài)碼代表著登錄成功)。
def get_company_message(company): # 獲取查詢到的網(wǎng)頁內(nèi)容(全部) search = sess.get('https://www.qcc.com/search?key={}'.format(company),headers=afterLogin_headers,timeout=10) search.raise_for_status() search.encoding = 'utf-8' #linux utf-8 soup = BeautifulSoup(search.text,features="html.parser") href = soup.find_all('a',{'class': 'title'})[0].get('href') time.sleep(4) # 獲取查詢到的網(wǎng)頁內(nèi)容(全部) details = sess.get(href,headers=afterLogin_headers,timeout=10) details.raise_for_status() details.encoding = 'utf-8' #linux utf-8 details_soup = BeautifulSoup(details.text,features="html.parser") message = details_soup.text time.sleep(2) return message
上面的代碼代表著執(zhí)行了兩個步驟。
①查詢某公司
②點(diǎn)擊進(jìn)入第一位搜索結(jié)果的新網(wǎng)站,并返回該網(wǎng)址的文本內(nèi)容。
import pandas as pd def message_to_df(message,company): list_companys = [] Registration_status = [] Date_of_Establishment = [] registered_capital = [] contributed_capital = [] Approved_date = [] Unified_social_credit_code = [] Organization_Code = [] companyNo = [] Taxpayer_Identification_Number = [] sub_Industry = [] enterprise_type = [] Business_Term = [] Registration_Authority = [] staff_size = [] Number_of_participants = [] sub_area = [] company_adress = [] Business_Scope = [] list_companys.append(company) Registration_status.append(message.split('登記狀態(tài)')[1].split('\n')[1].split('成立日期')[0].replace(' ','')) Date_of_Establishment.append(message.split('成立日期')[1].split('\n')[1].replace(' ','')) registered_capital.append(message.split('注冊資本')[1].split('人民幣')[0].replace(' ','')) contributed_capital.append(message.split('實(shí)繳資本')[1].split('人民幣')[0].replace(' ','')) Approved_date.append(message.split('核準(zhǔn)日期')[1].split('\n')[1].replace(' ','')) try: credit = message.split('統(tǒng)一社會信用代碼')[1].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) except: credit = message.split('統(tǒng)一社會信用代碼')[3].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) Organization_Code.append(message.split('組織機(jī)構(gòu)代碼')[1].split('\n')[1].replace(' ','')) companyNo.append(message.split('工商注冊號')[1].split('\n')[1].replace(' ','')) Taxpayer_Identification_Number.append(message.split('納稅人識別號')[1].split('\n')[1].replace(' ','')) try: sub = message.split('所屬行業(yè)')[1].split('\n')[1].replace(' ','') sub_Industry.append(sub) except: sub = message.split('所屬行業(yè)')[1].split('為')[1].split(',')[0] sub_Industry.append(sub) enterprise_type.append(message.split('企業(yè)類型')[1].split('\n')[1].replace(' ','')) Business_Term.append(message.split('營業(yè)期限')[1].split('登記機(jī)關(guān)')[0].split('\n')[-1].replace(' ','')) Registration_Authority.append(message.split('登記機(jī)關(guān)')[1].split('\n')[1].replace(' ','')) staff_size.append(message.split('人員規(guī)模')[1].split('人')[0].split('\n')[-1].replace(' ','')) Number_of_participants.append(message.split('參保人數(shù)')[1].split('所屬地區(qū)')[0].replace(' ','').split('\n')[2]) sub_area.append(message.split('所屬地區(qū)')[1].split('\n')[1].replace(' ','')) try: adress = message.split('經(jīng)營范圍')[0].split('企業(yè)地址')[1].split('查看地圖')[0].split('\n')[2].replace(' ','') company_adress.append(adress) except: adress = message.split('經(jīng)營范圍')[1].split('企業(yè)地址')[1].split()[0] company_adress.append(adress) Business_Scope.append(message.split('經(jīng)營范圍')[1].split('\n')[1].replace(' ','')) df = pd.DataFrame({'公司':company,\ '登記狀態(tài)':Registration_status,\ '成立日期':Date_of_Establishment,\ '注冊資本':registered_capital,\ '實(shí)繳資本':contributed_capital,\ '核準(zhǔn)日期':Approved_date,\ '統(tǒng)一社會信用代碼':Unified_social_credit_code,\ '組織機(jī)構(gòu)代碼':Organization_Code,\ '工商注冊號':companyNo,\ '納稅人識別號':Taxpayer_Identification_Number,\ '所屬行業(yè)':sub_Industry,\ '企業(yè)類型':enterprise_type,\ '營業(yè)期限':Business_Term,\ '登記機(jī)關(guān)':Registration_Authority,\ '人員規(guī)模':staff_size,\ '參保人數(shù)':Number_of_participants,\ '所屬地區(qū)':sub_area,\ '企業(yè)地址':company_adress,\ '經(jīng)營范圍':Business_Scope}) return df
這段代碼是對獲取到的文本內(nèi)容進(jìn)行文本識別處理,只能處理大部分的內(nèi)容,可能會有極個別的是空值,大家有興趣可以自己重寫。
這里只是寫個案例,所以隨便寫了個列表,一般跑自己代碼的是讀取自己的csv文件關(guān)于公司名稱的那一列,然后轉(zhuǎn)為列表)
# 測試所用 companys = ['深圳市騰訊計(jì)算機(jī)系統(tǒng)有限公司','阿里巴巴(中國)有限公司'] # 實(shí)際所用 # df_companys = pd.read_csv('自己目錄的絕對路徑/某某.csv') # companys = df_companys['公司名稱'].tolist()
for company in companys: try: messages = get_company_message(company) except: pass else: df = message_to_df(messages,company) if(company==companys[0]): df.to_csv('自己目錄的絕對路徑/某某.csv',index=False,header=True) else: df.to_csv('自己目錄的絕對路徑/某某.csv',mode='a+',index=False,header=False) time.sleep(1)
至此,就可以得到這兩家公司的一些詳細(xì)信息。
ps:如果大家在 soup.find_all(‘a(chǎn)’,{‘class’: ‘title’})[0].get(‘href’)這里遇到點(diǎn)錯誤,可能是天眼查那邊更新了網(wǎng)頁代碼,大家可以根據(jù)這個操作來更新代碼。
①按F12進(jìn)入開發(fā)者調(diào)試頁面
③我們可以看到,這是一個a標(biāo)簽,class為title的html代碼,所以,如果報錯,可根據(jù)這個操作更換。比如,class改為了company_title,那代碼也可對應(yīng)的改為:soup.find_all(‘a(chǎn)’,{‘class’: ‘company_title’})[0].get(‘href’)
最后,大家需要注意的是,爬取的時候需要適當(dāng)?shù)脑O(shè)置一下睡眠時間,不然會被檢測到是爬蟲機(jī)器人在操作,可能會彈出彈窗讓你驗(yàn)證,這樣會導(dǎo)致循環(huán)被中斷。第二個就是某個時間段爬取量盡量不要太大,不然也是會被檢測到的。
此處貼上完整代碼,大家可參考著學(xué)習(xí)BeautifuSoup的妙用哦。
from bs4 import BeautifulSoup import requests import time # 保持會話 # 新建一個session對象 sess = requests.session() # 添加headers(header為自己登錄的企查查網(wǎng)址,輸入賬號密碼登錄之后所顯示的header,此代碼的上方介紹了獲取方法) afterLogin_headers = {'User-Agent': '此代碼上方介紹了獲取的方法'} # post請求(代表著登錄行為,登錄一次即可保存,方便后面執(zhí)行查詢指令) login = {'user':'自己注冊的賬號','password':'密碼'} sess.post('https://www.qcc.com',data=login,headers=afterLogin_headers) def get_company_message(company): # 獲取查詢到的網(wǎng)頁內(nèi)容(全部) search = sess.get('https://www.qcc.com/search?key={}'.format(company),headers=afterLogin_headers,timeout=10) search.raise_for_status() search.encoding = 'utf-8' #linux utf-8 soup = BeautifulSoup(search.text,features="html.parser") href = soup.find_all('a',{'class': 'title'})[0].get('href') time.sleep(4) # 獲取查詢到的網(wǎng)頁內(nèi)容(全部) details = sess.get(href,headers=afterLogin_headers,timeout=10) details.raise_for_status() details.encoding = 'utf-8' #linux utf-8 details_soup = BeautifulSoup(details.text,features="html.parser") message = details_soup.text time.sleep(2) return message import pandas as pd def message_to_df(message,company): list_companys = [] Registration_status = [] Date_of_Establishment = [] registered_capital = [] contributed_capital = [] Approved_date = [] Unified_social_credit_code = [] Organization_Code = [] companyNo = [] Taxpayer_Identification_Number = [] sub_Industry = [] enterprise_type = [] Business_Term = [] Registration_Authority = [] staff_size = [] Number_of_participants = [] sub_area = [] company_adress = [] Business_Scope = [] list_companys.append(company) Registration_status.append(message.split('登記狀態(tài)')[1].split('\n')[1].split('成立日期')[0].replace(' ','')) Date_of_Establishment.append(message.split('成立日期')[1].split('\n')[1].replace(' ','')) registered_capital.append(message.split('注冊資本')[1].split('人民幣')[0].replace(' ','')) contributed_capital.append(message.split('實(shí)繳資本')[1].split('人民幣')[0].replace(' ','')) Approved_date.append(message.split('核準(zhǔn)日期')[1].split('\n')[1].replace(' ','')) try: credit = message.split('統(tǒng)一社會信用代碼')[1].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) except: credit = message.split('統(tǒng)一社會信用代碼')[3].split('\n')[1].replace(' ','') Unified_social_credit_code.append(credit) Organization_Code.append(message.split('組織機(jī)構(gòu)代碼')[1].split('\n')[1].replace(' ','')) companyNo.append(message.split('工商注冊號')[1].split('\n')[1].replace(' ','')) Taxpayer_Identification_Number.append(message.split('納稅人識別號')[1].split('\n')[1].replace(' ','')) try: sub = message.split('所屬行業(yè)')[1].split('\n')[1].replace(' ','') sub_Industry.append(sub) except: sub = message.split('所屬行業(yè)')[1].split('為')[1].split(',')[0] sub_Industry.append(sub) enterprise_type.append(message.split('企業(yè)類型')[1].split('\n')[1].replace(' ','')) Business_Term.append(message.split('營業(yè)期限')[1].split('登記機(jī)關(guān)')[0].split('\n')[-1].replace(' ','')) Registration_Authority.append(message.split('登記機(jī)關(guān)')[1].split('\n')[1].replace(' ','')) staff_size.append(message.split('人員規(guī)模')[1].split('人')[0].split('\n')[-1].replace(' ','')) Number_of_participants.append(message.split('參保人數(shù)')[1].split('所屬地區(qū)')[0].replace(' ','').split('\n')[2]) sub_area.append(message.split('所屬地區(qū)')[1].split('\n')[1].replace(' ','')) try: adress = message.split('經(jīng)營范圍')[0].split('企業(yè)地址')[1].split('查看地圖')[0].split('\n')[2].replace(' ','') company_adress.append(adress) except: adress = message.split('經(jīng)營范圍')[1].split('企業(yè)地址')[1].split()[0] company_adress.append(adress) Business_Scope.append(message.split('經(jīng)營范圍')[1].split('\n')[1].replace(' ','')) df = pd.DataFrame({'公司':company,\ '登記狀態(tài)':Registration_status,\ '成立日期':Date_of_Establishment,\ '注冊資本':registered_capital,\ '實(shí)繳資本':contributed_capital,\ '核準(zhǔn)日期':Approved_date,\ '統(tǒng)一社會信用代碼':Unified_social_credit_code,\ '組織機(jī)構(gòu)代碼':Organization_Code,\ '工商注冊號':companyNo,\ '納稅人識別號':Taxpayer_Identification_Number,\ '所屬行業(yè)':sub_Industry,\ '企業(yè)類型':enterprise_type,\ '營業(yè)期限':Business_Term,\ '登記機(jī)關(guān)':Registration_Authority,\ '人員規(guī)模':staff_size,\ '參保人數(shù)':Number_of_participants,\ '所屬地區(qū)':sub_area,\ '企業(yè)地址':company_adress,\ '經(jīng)營范圍':Business_Scope}) return df # 測試所用 companys = ['深圳市騰訊計(jì)算機(jī)系統(tǒng)有限公司','阿里巴巴(中國)有限公司'] # 實(shí)際所用 # df_companys = pd.read_csv('自己目錄的絕對路徑/某某.csv') # companys = df_companys['公司名稱'].tolist() for company in companys: try: messages = get_company_message(company) except: pass else: df = message_to_df(messages,company) if(company==companys[0]): df.to_csv('自己目錄的絕對路徑/某某.csv',index=False,header=True) else: df.to_csv('自己目錄的絕對路徑/某某.csv',mode='a+',index=False,header=False) time.sleep(1)
到此,相信大家對“Python怎么爬取企查查網(wǎng)站中的公司信息”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享標(biāo)題:Python怎么爬取企查查網(wǎng)站中的公司信息
URL分享:http://bm7419.com/article12/jdeogc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、、靜態(tài)網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)