还是今年暑假实习,老板让爬公开的企业联系方式数据,还对天眼查这个网站青眼有加。大家都知道,从不知什么时候开始,政府的企业信用公开平台采取了反爬措施,每次搜索都需通过机器人验证,而很多其他的企业信息公开平台(如天眼查等)都是在这之前从政府网站爬取数据的。
于是乎,博主开始勤勤恳恳撸代码马上百度一下,看看哪位大牛已经成功爬取天眼查并大公无私地分享了自己的代码。一般出名网站如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 requestsdef 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) #在请求中设定头,cookietime.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解析也好,都可以获得页面中所有搜索结果公司的超链接。