栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python实现自定义搜索内容的天眼查爬虫

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python实现自定义搜索内容的天眼查爬虫

声明 爬虫技术话题比较敏感 本文仅作技术交流 不得用作任何非法途径
用python实现一个简单的小爬虫 可以把你输入的文本作为关键字 向天眼查发起请求 得到返回的页面 然后清洗网页 得到数据 存储在本地。比如我最近有个需求 查询某市注册资本超过500w的教培公司名称、数量、地址。示例只做了简单的反爬 配置了一下headers参数 修改cookie参数即可使用。

这是代码运行效果

使用前需要配置requests库和BeautifulSoup库
代码注释的很详细 就不赘述了 直接上代码 拿来吧你

定义请求函数

def get(url,key):
 try:
 import requests
 # 配置代理ip池 可从西刺获取 我这里不用 先注释掉
 # proxies { http : 60.168.80.22:3256 }
 # 伪装用户
 header {
 User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1 ,
 Host : www.tianyancha.com ,
 cookie : TYCID 7ac4e1708d0811ebb5f3d5b7d6d9508a; ssuid 3646972475; csrfToken wcUXYBICSWQLy89r05-ElbYT; jsid https%3A%2F%2Fwww.tianyancha.com%2F%3Fjsid%3DSEM-BAIDU-PZ-SY-2021112-JRGW; bannerFlag true; CT_TYCID d7012892dbb348858dbf332a770e0ce9; cloud_token 04236538798743c48dfdb82587b08bd5; creditGuide RTYCID 6b0d1909d8df4572b1e552ba0dd4926e; bdHomeCount searchSessionId 1632625565.85894118; tyc-user-info {%22state%22:%220%22%2C%22vipManager%22:%220%22%2C%22mobile%22:%2215270878905%22}; tyc-user-info-save-time 1632625657685; auth_token eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTI3MDg3ODkwNSIsImlhdCI6MTYzMjYyNTY1OCwiZXhwIjoxNjY0MTYxNjU4fQ.AW4ebU1XOiSdifOLOoF7Sbfhxyvf3R9BklBgSpcd5UIMP9CYspJFI-Necqd7GnR06y1-3srVimg3nU_bB7vJBA; tyc-user-phone %255B%252215270878905%2522%255D; sensorsdata2015jssdkcross %7B%22distinct_id%22%3A%2215270878905%22%2C%22first_id%22%3A%2217866f93aa328e-05f9d9a8b4b42e-4c3f227c-1327104-17866f93aa4423%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E5%A4%A9%E7%9C%BC%E6%9F%A5%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Fother.php%22%7D%2C%22%24device_id%22%3A%2217866f93aa328e-05f9d9a8b4b42e-4c3f227c-1327104-17866f93aa4423%22%7D; Hm_lvt_e92c8d65d92d534b0fc290df538b4758 1632578130,1632625425; Hm_lpvt_e92c8d65d92d534b0fc290df538b4758 1632625976; _ga GA1.2.920708959.1616635314; _gid GA1.2.88667156.1632578131 ,
 # 配置请求数据
 parser {
 scheme : https ,
 host : www.tianyancha.com ,
 filename : /search ,
 key :str(key),}
 # 发起请求
 r requests.get(url, headers header, params parser)
 # 需要配置代理ip就用下面一行代码 把上面的注释掉
 # r requests.get(url,headers header,params parser,proxies proxies)
 if r.status_code 200:
 print( 请求成功 )
 else:
 print( 请求失败 str(r.status_code))
 return r.text
 except Exception as e:
 print(e)

定义清洗函数

def clean(html):
 # 导入包
 from bs4 import BeautifulSoup
 import time
 # 得到开始时间
 start time.time()
 print( 开始清洗数据 )
 soup BeautifulSoup(html, lxml )
 # print(soup)
 # 每一页的20条信息都在divs里了
 divs soup.select( div.result-list div.search-item )
 # print(len(divs))
 Href []
 for div in divs:
 # 清洗得到公司名称信息
 company_name div.select( div.info )[0].text
 # 清洗得到法人信息
 faren div.select( div.title )[0].text
 # 清洗得到注册资本信息
 zhuceziben div.select( div.title )[1].text
 # 清洗得到公司成立日期
 chenglidate div.select( div.title )[2].text
 # 得到公司详情页url
 href div.select( div.header a )[0][ href ]
 Href.append(href)
 # 清洗省份数据
 # shengfen div.select( span.site )[0].text
 # 清洗评分数据
 # pingfen div.select( span.score-num )[0].text
 # 写入数据到文本文档 采取追加写模式
 with open ( 公司简介.txt , a ,encoding utf-8 ) as f:
 f.write(company_name , faren , zhuceziben , chenglidate , href n )
 # 关闭文件句柄
 # f.close()
 # 获取结束时间
 end time.time()
 # 打印所用时间
 print( 信息写入完毕,用时{}秒 .format(end-start))
 return Href

定义主函数 调用各个函数

def main():
 import time
 key input( 请输入搜索关键词 )
 # key 苏州教育科技 
 # url https://www.tianyancha.com/search?key str(key)
 # 获取搜索结果前100页 如果反爬通过 是可以爬下来的 可以自行修改页数 我这里是爬前十页示范
 urls [ https://www.tianyancha.com/search/p{0}?key {1} .format(i,str(key)) for i in range(1,3)]
 for url in urls:
 # url https://www.tianyancha.com/search/p1?key %E8%8B%8F%E5%B7%9E%E6%95%99%E8%82%B2%E7%A7%91%E6%8A%80 
 clean(get(url,key))
 time.sleep(3)

全部代码

输入关键字发起请求 得到符合要求的结果页
修改header里面的User-Agent和cookie 即可使用 如果爬取数据量较大 需要配置代理IP 即proxies 西刺代理网提供部分免费代理ip
# 定义请求函数
def get(url,key):
 try:
 import requests
 # 配置代理ip池 可从西刺获取 我这里不用 先注释掉
 # proxies { http : 60.168.80.22:3256 }
 # 伪装用户
 header {
 User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1 ,
 Host : www.tianyancha.com ,
 cookie : TYCID 7ac4e1708d0811ebb5f3d5b7d6d9508a; ssuid 3646972475; csrfToken wcUXYBICSWQLy89r05-ElbYT; jsid https%3A%2F%2Fwww.tianyancha.com%2F%3Fjsid%3DSEM-BAIDU-PZ-SY-2021112-JRGW; bannerFlag true; CT_TYCID d7012892dbb348858dbf332a770e0ce9; cloud_token 04236538798743c48dfdb82587b08bd5; creditGuide RTYCID 6b0d1909d8df4572b1e552ba0dd4926e; bdHomeCount searchSessionId 1632625565.85894118; tyc-user-info {%22state%22:%220%22%2C%22vipManager%22:%220%22%2C%22mobile%22:%2215270878905%22}; tyc-user-info-save-time 1632625657685; auth_token eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTI3MDg3ODkwNSIsImlhdCI6MTYzMjYyNTY1OCwiZXhwIjoxNjY0MTYxNjU4fQ.AW4ebU1XOiSdifOLOoF7Sbfhxyvf3R9BklBgSpcd5UIMP9CYspJFI-Necqd7GnR06y1-3srVimg3nU_bB7vJBA; tyc-user-phone %255B%252215270878905%2522%255D; sensorsdata2015jssdkcross %7B%22distinct_id%22%3A%2215270878905%22%2C%22first_id%22%3A%2217866f93aa328e-05f9d9a8b4b42e-4c3f227c-1327104-17866f93aa4423%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E5%A4%A9%E7%9C%BC%E6%9F%A5%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Fother.php%22%7D%2C%22%24device_id%22%3A%2217866f93aa328e-05f9d9a8b4b42e-4c3f227c-1327104-17866f93aa4423%22%7D; Hm_lvt_e92c8d65d92d534b0fc290df538b4758 1632578130,1632625425; Hm_lpvt_e92c8d65d92d534b0fc290df538b4758 1632625976; _ga GA1.2.920708959.1616635314; _gid GA1.2.88667156.1632578131 ,
 # 配置请求数据
 parser {
 scheme : https ,
 host : www.tianyancha.com ,
 filename : /search ,
 key :str(key),}
 # 发起请求
 r requests.get(url, headers header, params parser)
 # 需要配置代理ip就用下面一行代码 把上面的注释掉
 # r requests.get(url,headers header,params parser,proxies proxies)
 if r.status_code 200:
 print( 请求成功 )
 else:
 print( 请求失败 str(r.status_code))
 return r.text
 except Exception as e:
 print(e)
def clean(html):
 # 导入包
 from bs4 import BeautifulSoup
 import time
 # 得到开始时间
 start time.time()
 print( 开始清洗数据 )
 soup BeautifulSoup(html, lxml )
 # print(soup)
 # 每一页的20条信息都在divs里了
 divs soup.select( div.result-list div.search-item )
 # print(len(divs))
 Href []
 for div in divs:
 # 清洗得到公司名称信息
 company_name div.select( div.info )[0].text
 # 清洗得到法人信息
 faren div.select( div.title )[0].text
 # 清洗得到注册资本信息
 zhuceziben div.select( div.title )[1].text
 # 清洗得到公司成立日期
 chenglidate div.select( div.title )[2].text
 # 得到公司详情页url
 href div.select( div.header a )[0][ href ]
 Href.append(href)
 # 清洗省份数据
 # shengfen div.select( span.site )[0].text
 # 清洗评分数据
 # pingfen div.select( span.score-num )[0].text
 # 写入数据到文本文档 采取追加写模式
 with open ( 公司简介.txt , a ,encoding utf-8 ) as f:
 f.write(company_name , faren , zhuceziben , chenglidate , href n )
 # 关闭文件句柄
 # f.close()
 # 获取结束时间
 end time.time()
 # 打印所用时间
 print( 信息写入完毕,用时{}秒 .format(end-start))
 return Href
# 定义主函数 调用各个函数
def main():
 import time
 key input( 请输入搜索关键词 )
 # key 苏州教育科技 
 # url https://www.tianyancha.com/search?key str(key)
 # 获取搜索结果前100页 如果反爬通过 是可以爬下来的 可以自行修改页数 我这里是爬前十页示范
 urls [ https://www.tianyancha.com/search/p{0}?key {1} .format(i,str(key)) for i in range(1,3)]
 for url in urls:
 # url https://www.tianyancha.com/search/p1?key %E8%8B%8F%E5%B7%9E%E6%95%99%E8%82%B2%E7%A7%91%E6%8A%80 
 clean(get(url,key))
 time.sleep(3)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号