import re
import os
import time
import pandas as pd
import requests
from bs4 import BeautifulSoup
import random
# 这是没有登录的状态下爬取的数据,如果需要更多,则需要添加账号登录后 的cookie参数信息。当然也会增加封号的风险
url = 'https://m.tianyancha.com/search/oc35-s2'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.42 Safari/537.36'}
# proxy = [{'http': 'http://58.212.42.116:36708'}, {'http':'http://117.57.91.53:9999'}, {'http':'123.169.35.184:9999'}]
response = requests.get(url,headers = header) #proxies = random.choice(proxy)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text,'lxml') # 对html进行解析,完成初始化
html = soup.select('div .search-company-item') # select和find_all 不同点在于,一个是用空格间隔,一个是用,号分割 .表示是类名
datalist =[]
for index,one in enumerate(html):
print('正在爬取第%s个公司'%(index+1))
# 公司名字
name = one.find('div','search-name').text
# 公司状态
status = one.find('div', 'company-status atag-common -normal-bg').text
# 检查发现,所有的信息都是在各个title-name下面,所有这里直接一次取出所有的title_name,并且通过切片进行分类查找
# 如果每次单独取出,会导致信息去到别的信息
# 法人代表
person = one.find('div', 'search-company-content').select('div .title-name')[0].text.split('法定代表人')[1]
# 注册资本
money = one.find('div', 'search-company-content').select('div .title-name')[1].text.split('注册资本')[1]
# 注册时间
date = one.find('div', 'search-company-content').select('div .title-name')[2].text.split('成立日期')[1]
# 数据存储
datalist.append([name, status, person, money, date])
time.sleep(random.randint(6,10))
df = pd.DataFrame(datalist,columns = ['公司名称','公司状态','法人代表','注册资本','注册时间'])
df.to_excel(r'./天眼查公司信息.xlsx',index=False) # 注意事项,文件后缀必须要有,这是血的教育
print('爬取完成')