'''
中国
蒙古
朝鲜
韩国
日本
菲律宾
越南
老挝
柬埔寨
缅甸
泰国
马来西亚
文莱
新加坡
印度尼西亚
东帝汶
尼泊尔
不丹
孟加拉国
印度
巴基斯坦
斯里兰卡
马尔代夫
哈萨克斯坦
吉尔吉斯斯坦
塔吉克斯坦
乌兹别克斯坦
土库曼斯坦
阿富汗
伊拉克
伊朗
叙利亚
约旦
黎巴嫩
以色列
巴勒斯坦
沙特阿拉伯
巴林
卡塔尔
科威特
阿拉伯联合酋长国(阿联酋)
阿曼
也门
格鲁吉亚
亚美尼亚
阿塞拜疆
土耳其
塞浦路斯
芬兰
瑞典
挪威
冰岛
丹麦
法罗群岛(丹)
爱沙尼亚
拉脱维亚
立陶宛
白俄罗斯
俄罗斯
乌克兰
摩尔多瓦
波兰
捷克
斯洛伐克
匈牙利
德国
奥地利
瑞士
列支敦士登
英国
爱尔兰
荷兰
比利时
卢森堡
法国
摩纳哥
罗马尼亚
保加利亚
塞尔维亚
马其顿
阿尔巴尼亚
希腊
斯洛文尼亚
克罗地亚
波斯尼亚和墨塞哥维那
乍得
中非
喀麦隆
赤道几内亚
加蓬
刚果共和国(即:刚果(布))
刚果民主共和国(即:刚果(金))
圣多美及普林西比
毛里塔尼亚
西撒哈拉
塞内加尔
冈比亚
马里
布基纳法索
几内亚
几内亚比绍
佛得角
塞拉利昂
利比里亚
科特迪瓦
加纳
多
贝宁
尼日尔
加那利群岛(西)
赞比亚
安哥拉
津巴布韦
马拉维
莫桑比克
博茨瓦纳
纳米比亚
南非
斯威士兰
莱索托
马达加斯加
科摩罗
毛里求斯
留尼旺(法)
圣赫勒拿(英)
澳大利亚
新西兰
巴布亚新几内亚
所罗门群岛
瓦努阿图
密克罗尼西亚
马绍尔群岛
帕劳
瑙鲁
基里巴斯
图瓦卢
萨摩亚
斐济群岛
汤加
库克群岛(新)
关岛(美)
新喀里多尼亚(法)
法属波利尼西亚
皮特凯恩岛(英)
瓦利斯与富图纳(法)
纽埃(新)
托克劳(新)
美属萨摩亚
北马里亚纳(美)
加拿大
美国
墨西哥
格陵兰(丹)
危地马拉
伯利兹
萨尔瓦多
洪都拉斯
尼加拉瓜
哥斯达黎加
巴拿马
巴哈马
古巴
牙买加
海地
多米尼加共和国
安提瓜和巴布达
圣基茨和尼维斯
多米尼克
圣卢西亚
圣文森特和格林纳丁斯
格林纳达
巴巴多斯
特立尼达和多巴哥
波多黎各(美)
英属维尔京群岛
美属维尔京群岛
安圭拉(英)
蒙特塞拉特(英)
瓜德罗普(法)
马提尼克(法)
荷属安的列斯
阿鲁巴(荷)
特克斯和凯科斯群岛(英)
开曼群岛(英)
百慕大(英)
哥伦比亚
委内瑞拉
圭亚那
法属圭亚那
苏里南
厄瓜多尔
秘鲁
玻利维亚
巴西
智利
阿根廷
乌拉圭
巴拉圭
意大利
梵蒂冈
圣马力诺
马耳他
西班牙
葡萄牙
安道尔
埃及
利比亚
苏丹
突尼斯
阿尔及利亚
摩洛哥
亚速尔群岛(葡)
马德拉群岛(葡)
埃塞俄比亚
厄立特里亚
索马里
吉布提
肯尼亚
坦桑尼亚
乌干达
卢旺达
布隆迪
塞舌尔
'''
"""
"""
author:张鑫
date:2021/6/24 15:33
"""
# 导入模块
import time
import random
from math import ceil
from urllib.parse import quote
import re
import requests
from lxml import etree
import pymongo
from proxy_prac import proxy_id
# 连接数据库
database = pymongo.MongoClient('localhost', port=27017)
db = database['tianyancha']
world_company = db['world_company']
def Tianyan():
for country in open('国家.txt', 'r', encoding='utf8'):
country = country.strip()
# country = input('请输入国家:')
print(f'********************{country}**************************')
headers = {
"Accept": "textml,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Cookie": "aliyungf_tc=6bb400dc090607e78542121cdeaf7e3ef28a754bc4f5ec12f53fe07c201bee10; csrfToken=ICn-cJBUfcasinv5YrQ6llKj; TYCID=a651e070d40911eb94b2a3e3ef5175ad; ssuid=765369576; bannerFlag=true; Hm_lvt_e92c8d65d92d534b0fc290df538b4758=1624442349; _ga=GA1.2.457024325.1624442349; _gid=GA1.2.998639365.1624442349; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2213661977548%22%2C%22first_id%22%3A%2217a384f24566bd-05cdfaae1cd385-3f356b-1296000-17a384f24571c8%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2217a384f24566bd-05cdfaae1cd385-3f356b-1296000-17a384f24571c8%22%7D; tyc-user-phone=%255B%252213661977548%2522%255D; bannerHide=13661977548; tyc-user-info={%22isExpired%22:%220%22%2C%22mobile%22:%2213661977548%22%2C%22state%22:%225%22%2C%22vipManager%22:%220%22}; tyc-user-info-save-time=1624504141678; auth_token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzY2MTk3NzU0OCIsImlhdCI6MTYyNDUwNDE0MCwiZXhwIjoxNjU2MDQwMTQwfQ.CvhoiC4L2JmwdC4QvJfi9PY9yuXyLb4Q7kas3eAtQ2gSFYMT59ozWKxe3z4jT17JFH6jVAwmBAkgLzv7dTI-Wg; acw_tc=2f6fc12816245059410016885efc0060c1970b09441cff75ed087fb172a0da; Hm_lpvt_e92c8d65d92d534b0fc290df538b4758=1624506007",
"Host": "www.tianyancha.com",
"Referer": "https://www.tianyancha.com/entire/result?key=%E6%AC%A7%E6%B4%B2&pn=2",
# "timeout": (30.1, 30.1)
}
time.sleep(random.randint(3, 8))
basic_url = f"https://www.tianyancha.com/entire/result?key={quote(country)}"
html = requests.get(basic_url, headers=headers, proxies=proxy_id()).content.decode()
max_page = re.findall('<span class="tips-num">(.*)</span>家相关公司', html)[0]
max_page = int(max_page)
print(max_page, type(max_page))
max_page = ceil(max_page / 20)
print(max_page)
for page in range(1, max_page + 1):
url = f"https://www.tianyancha.com/entire/result?key={quote(country)}&pn={page}"
print(url)
time.sleep(random.randint(1, 5))
req = requests.get(url=url, headers=headers).content.decode()
html = etree.HTML(req)
html_data = html.xpath("//div[@class='result-list sv-search-container']/a")
for li in html_data:
company = li.xpath(".//span[@class='name']/text()")[0]
English_name = li.xpath("//div[@class='title text-ellipsis']/span/text()")[0]
year = li.xpath(".//div[@class='info row text-ellipsis'][2]/div[@class='title text-ellipsis']//text()")[
1]
person = li.xpath(".//div[@class='title -person text-ellipsis']/span/text()")[0]
# sale = li.xpath(".//div[@class='info row text-ellipsis'][2]/div[@class='title'][1]/text()")[0]
sale = li.xpath(".//div[@class='info row text-ellipsis'][2]/div[@class='title'][1]/span/text()")[0]
# staff = li.xpath(".//div[@class='info row text-ellipsis'][2]/div[@class='title'][2]/text()")[0]
staff = li.xpath(".//div[@class='info row text-ellipsis'][2]/div[@class='title'][2]/span/text()")[0]
industry = li.xpath(".//div[@class='info row text-ellipsis'][3]/div[@class='title'][1]/span/text()")[0]
company_number = \
li.xpath(".//div[@class='info row text-ellipsis'][3]/div[@class='title'][2]/span/text()")[
0]
address = li.xpath(".//div[@class='info row text-ellipsis'][4]/span/text()")[0]
# print(len(html_data))
company_list = {}
data = {
'公司名称': company,
'英文名称': English_name,
'成立年份': year,
'负责人': person,
'销售额': sale,
'员工人数': staff,
'行业': industry,
'公司编号': company_number,
'注册地址': address,
}
company_list['公司名称'] = data['公司名称']
company_list['英文名称'] = data['英文名称']
company_list['成立年份'] = data['成立年份']
company_list['负责人'] = data['负责人']
company_list['销售额'] = data['销售额']
company_list['员工人数'] = data['员工人数']
company_list['行业'] = data['行业']
company_list['公司编号'] = data['公司编号']
company_list['公司编号'] = data['公司编号']
count = world_company.count_documents({"公司名称": company_list['公司名称']})
if count == 0:
print('**********************************')
print(company_list)
world_company.insert_one(company_list)
print('**********************************')
if __name__ == '__main__':
a = Tianyan()