python实现天眼查高级搜索功能按关键字进行数据采集

2023年4月17日 14:42 ry 925

最近遇到一个客户,需要在天眼查的高级搜索功能上对关键内容和不同城市搜索的功能进行数据采集,最后结果进行excel导出,由于高级功能需要vip账号,跟客户要到账号密码后进行登录,来到高级搜索页面,如下所示

点击查看结果,如图所示我们抓包下这个请求,按f12,随便复制该页面的内容进行搜索,如图所示结果该请求是一个post请求,经过测试,主要变动的参数是customAreaCodeSet,这个参数是根据你不同的城市代码来确定的,客户需求刚好是根据不同城市来进行数据采集,因此我们只需要改变customAreaCodeSet这个参数就行,我们用代码来模拟这个请求测试,如下所示

import requests
from lxml import etree
import re,time,random
import pandas as pd
title_lis,name_lis,money_lis,date_lis,phone_lis,place_lis = [],[],[],[],[],[]
url  = 'https://www.tianyancha.com/advance/search/result?eventPrefix=pc_homeicon'

headers = {
    'Cookie': 'HWWAFSESID=3597e7934963bc22147; HWWAFSESTIME=1681647618820; csrfToken=Q3JVIQun7wGL_nXrB8Gpp8Wc; jsid=SEO-BAIDU-ALL-SY-000001; TYCID=0fdc2220dc5111edb9fbe9d5d5385b48; sajssdk_2015_cross_new_user=1; bdHomeCount=0; Hm_lvt_e92c8d65d92d534b0fc290df538b4758=1681647623; bannerFlag=true; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%226589903%22%2C%22first_id%22%3A%221878a025bbe0-02c8062e36a-31614c0c-1821369-1878a025bbf10c9%22%7D; tyc-user-info=%7B%22state%22%3A%225%22%2C%22vipManager%22%3A%220%22%2C%22mobile%22%3A%2213917562998%22%2C%22isExpired%22%3A%220%22%7D; tyc-user-info-save-time=1681647671851; auth_token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzkxNzU2Mjk5OCIsImlhdCI6MTY4MTY0NzY3MiwiZXhwIjoxNjg0MjM5NjcyfQ.9uv3kgSftWsmwxZVuFfpAOtBtDXzhAVuw8VjVHqW197iA3usv7Eu0HtHWwdm9pmap08bfLlUEpkP2dSdeMntBw; ssuid=8413352730; Hm_lpvt_e92c8d65d92d534b0fc290df538b4758=1681647690; _ga=GA1.2.1330283759.1681647690; _gid=GA1.2.1805192784.1681647690',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',

}
# if code:
for pg in range(1,251):
    try:
        data = {
            'xyz': 'Q3JVIQun7wGL_nXrB8Gpp8Wc',
            'keywords': '美容',
            'regStatusSetNew': '存续、在业',
            'companyTypeSet': '个体工商户',
            'contactType': '3',
            'emptyPhoneFilter': '1',
            'customAreaCodeSet': '00{}V2020'.format(110000),
            'pageNum': '{}'.format(pg),
            'pageSize': '20',
      
        }
        r  = requests.post(url,headers=headers,data=data)

        html = etree.HTML(r.text)
        title = html.xpath('//div[@class="info"]/text()')
        name = html.xpath('//a[@class="legalPersonName link-click"]/text()')
        money = html.xpath('//div[@class="title -narrow text-ellipsis"]/span/text()')
        date = html.xpath('//div[@class="title  text-ellipsis"]/span/text()')
        phone = html.xpath('//div[@class="contact row "]/div/span[2]/text()')
        place = re.findall('<div class="contact row">地址:(.*?)</div>',r.text)

        print(title)
        print(name)
        print(money)
        print(date)
        print(phone)
        print(place)


        print('*'*100)
        title_lis.append(title)
        name_lis.append(name)
        money_lis.append(money)
        date_lis.append(date)
        phone_lis.append(phone)
        place_lis.append(place)
        time.sleep(random.randint(1,4))
    except:
        break
df = pd.DataFrame({
    '店名':title_lis,
    '经营者':name_lis,
    '资金数额':money_lis,
    '成立日期':date_lis,
    '电话':phone_lis,
    '地址':place_lis,
})
df.to_csv('200_tyc,csv',index=False,encoding='utf_8_sig')

运行代码结果如下所示

注意cookies是自己账号登录的信息,客户要求更具他输入的城市进行采集,经过多次测试发现城市参数前2个00固定的,后面V2020也是固定的,我们只需要弄到中间的就行,经过了解发现,中间的正是中国地级市城市划分代码,根据网上博主的公布的划分代码https://blog.csdn.net/CrazyApes/article/details/128957238,我们就可以来弄成一个字典形式了,完整代码如下所示

import requests
from lxml import etree
import re,time,random
import pandas as pd
txt = """
    110000 北京市
    120000 天津市
    130000 河北省
    130100 石家庄市
    130200 唐山市
    130300 秦皇岛市
    130400 邯郸市
    130500 邢台市
    130600 保定市
    130700 张家口市
    130800 承德市
    130900 沧州市
    131000 廊坊市
    131100 衡水市
    140100 太原市
    140200 大同市
    140300 阳泉市
    140400 长治市
    140500 晋城市
    140600 朔州市
    140700 晋中市
    140800 运城市
    140900 忻州市
    141000 临汾市
    141100 吕梁市
    150100 呼和浩特市
    150200 包头市
    150300 乌海市
    150400 赤峰市
    150500 通辽市
    150600 鄂尔多斯市
    150700 呼伦贝尔市
    150800 巴彦淖尔市
    150900 乌兰察布市
    152200 兴安盟
    152500 锡林郭勒盟
    152900 阿拉善盟
    210100 沈阳市
    210200 大连市
    210300 鞍山市
    210400 抚顺市
    210500 本溪市
    210600 丹东市
    210700 锦州市
    210800 营口市
    210900 阜新市
    211000 辽阳市
    211100 盘锦市
    211200 铁岭市
    211300 朝阳市
    211400 葫芦岛市
    220100 长春市
    220200 吉林市
    220300 四平市
    220400 辽源市
    220500 通化市
    220600 白山市
    220700 松原市
    220800 白城市
    222400 延边朝鲜族自治州
    230100 哈尔滨市
    230200 齐齐哈尔市
    230300 鸡西市
    230400 鹤岗市
    230500 双鸭山市
    230600 大庆市
    230700 伊春市
    230800 佳木斯市
    230900 七台河市
    231000 牡丹江市
    231100 黑河市
    231200 绥化市
    232700 大兴安岭地区
    310000 上海市
    320100 南京市
    320200 无锡市
    320300 徐州市
    320400 常州市
    320500 苏州市
    320600 南通市
    320700 连云港市
    320800 淮安市
    320900 盐城市
    321000 扬州市
    321100 镇江市
    321200 泰州市
    321300 宿迁市
    330100 杭州市
    330200 宁波市
    330300 温州市
    330400 嘉兴市
    330500 湖州市
    330600 绍兴市
    330700 金华市
    330800 衢州市
    330900 舟山市
    331000 台州市
    331100 丽水市
    340100 合肥市
    340200 芜湖市
    340300 蚌埠市
    340400 淮南市
    340500 马鞍山市
    340600 淮北市
    340700 铜陵市
    340800 安庆市
    341000 黄山市
    341100 滁州市
    341200 阜阳市
    341300 宿州市
    341500 六安市
    341600 亳州市
    341700 池州市
    341800 宣城市
    350100 福州市
    350200 厦门市
    350300 莆田市
    350400 三明市
    350500 泉州市
    350600 漳州市
    350700 南平市
    350800 龙岩市
    350900 宁德市
    360100 南昌市
    360200 景德镇市
    360300 萍乡市
    360400 九江市
    360500 新余市
    360600 鹰潭市
    360700 赣州市
    360800 吉安市
    360900 宜春市
    361000 抚州市
    361100 上饶市
    370100 济南市
    370200 青岛市
    370300 淄博市
    370400 枣庄市
    370500 东营市
    370600 烟台市
    370700 潍坊市
    370800 济宁市
    370900 泰安市
    371000 威海市
    371100 日照市
    371300 临沂市
    371400 德州市
    371500 聊城市
    371600 滨州市
    371700 菏泽市
    410100 郑州市
    410200 开封市
    410300 洛阳市
    410400 平顶山市
    410500 安阳市
    410600 鹤壁市
    410700 新乡市
    410800 焦作市
    410900 濮阳市
    411000 许昌市
    411100 漯河市
    411200 三门峡市
    411300 南阳市
    411400 商丘市
    411500 信阳市
    411600 周口市
    411700 驻马店市
    420100 武汉市
    420200 黄石市
    420300 十堰市
    420500 宜昌市
    420600 襄阳市
    420700 鄂州市
    420800 荆门市
    420900 孝感市
    421000 荆州市
    421100 黄冈市
    421200 咸宁市
    421300 随州市
    422800 恩施土家族苗族自治州
    430100 长沙市
    430200 株洲市
    430300 湘潭市
    430400 衡阳市
    430500 邵阳市
    430600 岳阳市
    430700 常德市
    430800 张家界市
    430900 益阳市
    431000 郴州市
    431100 永州市
    431200 怀化市
    431300 娄底市
    433100 湘西土家族苗族自治州
    440100 广州市
    440200 韶关市
    440300 深圳市
    440400 珠海市
    440500 汕头市
    440600 佛山市
    440700 江门市
    440800 湛江市
    440900 茂名市
    441200 肇庆市
    441300 惠州市
    441400 梅州市
    441500 汕尾市
    441600 河源市
    441700 阳江市
    441800 清远市
    441900 东莞市
    442000 中山市
    445100 潮州市
    445200 揭阳市
    445300 云浮市
    450100 南宁市
    450200 柳州市
    450300 桂林市
    450400 梧州市
    450500 北海市
    450600 防城港市
    450700 钦州市
    450800 贵港市
    450900 玉林市
    451000 百色市
    451100 贺州市
    451200 河池市
    451300 来宾市
    451400 崇左市
    460100 海口市
    460200 三亚市
    460300 三沙市
    460400 儋州市
    500000 重庆市
    510100 成都市
    510300 自贡市
    510400 攀枝花市
    510500 泸州市
    510600 德阳市
    510700 绵阳市
    510800 广元市
    510900 遂宁市
    511000 内江市
    511100 乐山市
    511300 南充市
    511400 眉山市
    511500 宜宾市
    511600 广安市
    511700 达州市
    511800 雅安市
    511900 巴中市
    512000 资阳市
    513200 阿坝藏族羌族自治州
    513300 甘孜藏族自治州
    513400 凉山彝族自治州
    520100 贵阳市
    520200 六盘水市
    520300 遵义市
    520400 安顺市
    520500 毕节市
    520600 铜仁市
    522300 黔西南布依族苗族自治州
    522600 黔东南苗族侗族自治州
    522700 黔南布依族苗族自治州
    530100 昆明市
    530300 曲靖市
    530400 玉溪市
    530500 保山市
    530600 昭通市
    530700 丽江市
    530800 普洱市
    530900 临沧市
    532300 楚雄彝族自治州
    532500 红河哈尼族彝族自治州
    532600 文山壮族苗族自治州
    532800 西双版纳傣族自治州
    532900 大理白族自治州
    533100 德宏傣族景颇族自治州
    533300 怒江傈僳族自治州
    533400 迪庆藏族自治州
    540100 拉萨市
    540200 日喀则市
    540300 昌都市
    540400 林芝市
    540500 山南市
    540600 那曲市
    542500 阿里地区
    610100 西安市
    610200 铜川市
    610300 宝鸡市
    610400 咸阳市
    610500 渭南市
    610600 延安市
    610700 汉中市
    610800 榆林市
    610900 安康市
    611000 商洛市
    620100 兰州市
    620200 嘉峪关市
    620300 金昌市
    620400 白银市
    620500 天水市
    620600 武威市
    620700 张掖市
    620800 平凉市
    620900 酒泉市
    621000 庆阳市
    621100 定西市
    621200 陇南市
    622900 临夏回族自治州
    623000 甘南藏族自治州
    630100 西宁市
    630200 海东市
    632200 海北藏族自治州
    632300 黄南藏族自治州
    632500 海南藏族自治州
    632600 果洛藏族自治州
    632700 玉树藏族自治州
    632800 海西蒙古族藏族自治州
    640100 银川市
    640200 石嘴山市
    640300 吴忠市
    640400 固原市
    640500 中卫市
    650100 乌鲁木齐市
    650200 克拉玛依市
    650400 吐鲁番市
    650500 哈密市
    652300 昌吉回族自治州
    652700 博尔塔拉蒙古自治州
    652800 巴音郭楞蒙古自治州
    652900 阿克苏地区
    653000 克孜勒苏柯尔克孜自治州
    653100 喀什地区
    653200 和田地区
    654000 伊犁哈萨克自治州
    654200 塔城地区
    654300 阿勒泰地区
"""
zd = {}
results = [ii.lstrip().rstrip() for ii in txt.split('\n') if ii.lstrip().rstrip()]
for jj in results:
    temp = jj.split(' ')
    code,city = temp[0],temp[1]
    zd[city] = code
city = input("输入城市:(例如北京市)")
code = zd.get(city)

title_lis,name_lis,money_lis,date_lis,phone_lis,place_lis = [],[],[],[],[],[]
url  = 'https://www.tianyancha.com/advance/search/result?eventPrefix=pc_homeicon'

headers = {
    'Cookie': 'HWWAFSESItinct_id%22%3A%226589903%22%2C%22first_id%22%3A%221878a025bbe0-02f660c8062e36a-31614c0c-1821369-1878an_id%22%2C%22value%22%3A%226589903%22%7D%2C%22%24device_id%22%3A%221878a025bbe0-02f660c8062e36a-31614c0c-1821369-1878a025bbf10c9%22%7D; tyc-user-info=%7B%22state%22%3A%225%22%2C%22vipManager%22%3A%220%22%2C%22mobile%22%3A%2213917562998%22%2C%22isExpired%22%3A%220%22%7D; tyc-user-info-save-time=1681647671851; auth_token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzkxNzU2Mjk5OCIsImlhdCI6MTY4MTY0NzY3MiwiZXhwIjoxNjg0MjM5NjcyfQ.9uv3kgSftWsmwxZVuFfpAOtBtDXzhAVuw8VjVHqW197iA3usv7Eu0HtHWwdm9pmap08bfLlUEpkP2dSdeMntBw; ssuid=8413352730; Hm_lpvt_e92c8d65d92d534b0fc290df538b4758=1681647690; _ga=GA1.2.1330283759.1681647690; _gid=GA1.2.1805192784.1681647690',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',

}
if code:
    for pg in range(1,251):
        try:
            data = {
                'xyz': 'Q3JVIQun7wGL_nXrB8Gpp8Wc',
                'keywords': '美容',
                'regStatusSetNew': '存续、在业',
                'companyTypeSet': '个体工商户',
                'contactType': '3',
                'emptyPhoneFilter': '1',
                'customAreaCodeSet': '00{}V2020'.format(110000),
                'pageNum': '{}'.format(pg),
                'pageSize': '20',
                
            }
            r  = requests.post(url,headers=headers,data=data)

            html = etree.HTML(r.text)
            title = html.xpath('//div[@class="info"]/text()')
            name = html.xpath('//a[@class="legalPersonName link-click"]/text()')
            money = html.xpath('//div[@class="title -narrow text-ellipsis"]/span/text()')
            date = html.xpath('//div[@class="title  text-ellipsis"]/span/text()')
            phone = html.xpath('//div[@class="contact row "]/div/span[2]/text()')
            place = re.findall('<div class="contact row">地址:(.*?)</div>',r.text)

            print(title)
            print(name)
            print(money)
            print(date)
            print(phone)
            print(place)


            print('*'*100)
            for ii,jj,kk,ll,mm,nn in zip(title,name,money,date,phone,place):
                title_lis.append(ii)
                name_lis.append(jj)
                money_lis.append(kk)
                date_lis.append(ll)
                phone_lis.append(mm)
                place_lis.append(nn)
            time.sleep(random.randint(1,4))
        except:
            break
    
else:
    print('城市输入有误')
df = pd.DataFrame({
        '店名':title_lis,
        '经营者':name_lis,
        '资金数额':money_lis,
        '成立日期':date_lis,
        '电话':phone_lis,
        '地址':place_lis,
    })
df.to_csv('200_tyc,csv',index=False,encoding='utf_8_sig')

完美实现功能,在此特别感谢CrazyApes博主 !

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
2023年10月16日 22:46 ry: 回复
以上代码失效,源码已更新,需要源码的可以联系我qq:1449917271微信:liuyoudyping

2023年4月17日 14:44 ry: 回复
需要爬虫数据采集的或者web开发需要的私我:qq:1449917271 微信liuyoudyping


赣ICP备2021001574号-1

赣公网安备 36092402000079号