Python访问天眼查

还是今年暑假实习,老板让爬公开的企业联系方式数据,还对天眼查这个网站青眼有加。大家都知道,从不知什么时候开始,政府的企业信用公开平台采取了反爬措施,每次搜索都需通过机器人验证,而很多其他的企业信息公开平台(如天眼查等)都是在这之前从政府网站爬取数据的。

 

于是乎,博主开始勤勤恳恳撸代码马上百度一下,看看哪位大牛已经成功爬取天眼查并大公无私地分享了自己的代码。一般出名网站如58同城,百度地图都有大把成功先例,天眼查也不例外。博主搜索到如下资源(博主不生产代码,只是代码的搬运工,请叫我雷锋):

 

1/ Github上天眼查爬虫项目

https://github.com/guapier/tianyancha(关键词:phantomjs,xpath)

https://github.com/felixglow/Tianyancha(关键词:scrapy)

https://github.com/haijunt/tianyancha_example(关键词:scrapy, splash)

https://github.com/kestiny/PythonCrawler(关键词:phantomjs)

 

2/ 各类博客

https://ask.hellobi.com/blog/jasmine3happy/6200(关键词:selenium, phantomjs)

http://blog.csdn.net/chlk118/article/details/52937671(关键词:phantomjs)

https://sanwen.net/a/njbicqo.html(关键词:utm,token)

http://www.bubuko.com/infodetail-1917809.html(关键词:utm, token)

 

以上大概是博主写脚本之前所作的背景资料搜索工作了。

由于博主基础薄弱,没有Linux系统,不会VBA,天眼查系统升级老代码不可用等等千奇百怪的理由,以上最终都没能派上用场……

 

于是乎,博主自己琢磨了一下:

首先通过手机号登录,随便搜索一个关键词,譬如“百度”,返回界面中右键检查(Chrome)。

 

选择Network(网络),此时刷新界面,可以知道页面加载中发送的请求及返回的文件,如下图所示。


点击第一个Type是document的文件,可以查看具体的请求头。



非常直观的想法就是将请求头中各个参数通过Python Request函数与url一起发送。于是就有如下代码:

 

#-*- coding: utf-8 -*-
import time
import sys
import urllib
import requests


def main():
    headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
               'Accept-Encoding':'gzip, deflate',
               'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4,zh-TW;q=0.2',
               'Connection':'keep-alive',
               'DNT':'1',
               'Host':'www.tianyancha.com',
               'Referer':'http://www.tianyancha.com/search?key=%E7%99%BE%E5%BA%A6&checkFrom=searchBox',
               'Upgrade-Insecure-Requests':'1',
               'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
               }

    cookies = {'aliyungf_tc':'AQAAAInSEClDxQUAftHidO+PzCmdPZot',
               'ssuid':'3986673831',
               'bannerStorageV2':'%22false%22',
               '_pk_ref.1.e431':'%5B%22%22%2C%22%22%2C1498801845%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Do5N6sHrB-gmAwl5M4IyAj3G-5IwlRrODDLv9KztH10ivG8HhNHkgDVgRGREFnnDo%26wd%3D%26eqid%3D857f04a80002baa6000000045955e633%22%5D',
               'token':'0be5e638129c4f31b919a967874008b9',
               '_utm':'d6268574eb574651adf74cccc7544227',
               '_pk_id.1.e431':'c993f4ee7aa80f31.1498532324.2.1498803205.1498801845.' ,
               'paaptp':'ac2b22f83d9dd0dd86d47a0ed395ab25daf20e81e80534fe7315cf7a1f2fb',
               'csrfToken':'mVLfAuO0VxQSUCvQ1Iip_cGu', 
               'TYCID':'8b7b7d5061f411e7bd5589439b03dd9e',
               'uccid':'17cd6a2a4cf16ac20363e1b85bee6b90',
               'tyc-user-info':'eyJuZXciOiIxIiwidG9rZW4iOiJleUpoYkdjaU9pSklVelV4TWlKOS5leUp6ZFdJaU9pSXhNekU0TkRNNU1EazROeUlzSW1saGRDSTZNVFE1T1RNd09EazRNaXdpWlhod0lqb3hOVEUwT0RZd09UZ3lmUS5TSENlRksweGdnd09UcEtDUnlpNXVpTFg4UVBwbXZJNmFOUi1ITjhCbVltNEZaT0hTeDhENDJJQ3E0T295c1ZFSVppRHEya2ZEZElmSGpsaFF5dV9ydyIsInN0YXRlIjoiMCIsInZudW0iOiIwIiwib251bSI6IjAiLCJtb2JpbGUiOiIxMzE4NDM5MDk4NyJ9',
               'bannerFlag':'true',
               'Qs_lvt_117460':'1499308873%2C1499309809%2C1499390608',
               '_csrf':'N/4TCyFkbN17DmLl2qSx+Q==',
               'OA':'F6nGwYzI0K34U50NUXjCQ/RdisJkPVhyuvaz/ULhAdH9wGFBF+oY9SNo41xfg8ChEnKmkDW9KccidaKN4NUM7RY0fvt6ry12S005VjpHV9M=', 
               '_csrf_bk':'ababd67a90e3e88a85e813986cb58d6b', 
               'Hm_lvt_e92c8d65d92d534b0fc290df538b4758':'1498532730,1498801845,1499308866,1499309809', 
               'Hm_lpvt_e92c8d65d92d534b0fc290df538b4758':'1499400842',
               'Qs_pv_117460':'1553841720118954500%2C1189009320365233400%2C4541963271723247600%2C1868246178729382000%2C1343361850682038000'
               }
    keyword = '百度' #要搜索的公司

    startUrl = 'http://www.tianyancha.com/search?key=%s&checkFrom=searchBox' % urllib.quote(keyword)

    resultPage = requests.get(startUrl, headers= headers, cookies = cookies) #在请求中设定头,cookie
    
    time.sleep(10)
    
    with open('tyc_demo.txt','w') as of:
      of.write(resultPage.text)
    
if __name__ == '__main__':
    reload(sys)
    sys.setdefaultencoding('utf-8')
    main()

打印出的结果在文件中,查看发现就是我们所希望的搜索结果列表。这是实现爬虫脚本的第一步,获取所需要的html后,用BeautifulSoup函数作成汤也好,或者用xpath解析也好,都可以获得页面中所有搜索结果公司的超链接。

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页