前言
最近在学习爬虫,目标网站是天眼查。 爬虫页面.png就是这个列表,字段有 省,市,区,行业,子行业,公司名称,企业状态,负责人(或法定代表人),注册资本,注册时间,联系电话,邮箱,data_id(公司的id,以后需要公司其他信息有这个id将很方便能得到)。
分析
对于直接输入关键字搜索出来的列表,这里还有个更好的搜索功能:https://www.tianyancha.com/search
我们发现这里可以根据上面的条件查询出列表,非VIP只能查询100条数据,而VIP会员则可以查询5000条数据,如果需要爬虫大量数据,则必须要一个VIP账号。而且高级筛选功能也需要VIP才可以用,我想只要有手机号码的,所以必须要VIP了。
因为有5000条数据的限制,所以进行完省市区行业分类的筛选后,如果搜索出来的结果还是多于5000,那就要再进行其他条件的细化了,我对注册资本和注册时间也进行细化,已经基本差不多能满足5000以内了。
步骤
我用的是 selenium,mysql储存数据, 虽然说用这个效率会很低,但是我只是个小白啊,什么代理IP,token, _utm都没有研究过,只是很单纯,很直接,很暴力的撸了他们的页面。
- 登录https://www.tianyancha.com/login
登录页面.png
直接F12看页面结构,很容易找到输入手机号和密码的输入框标签和登录按钮标签
driver.find_element_by_xpath(".//*[@id='web-content']/div/div/div/div[2]/div/div[2]/div[2]/div[2]/div[2]/input").send_keys('账号')
driver.find_element_by_xpath(".//*[@id='web-content']/div/div/div/div[2]/div/div[2]/div[2]/div[2]/div[3]/input").send_keys('密码')
driver.find_element_by_xpath(".//*[@id='web-content']/div/div/div/div[2]/div/div[2]/div[2]/div[2]/div[5]").click()
- 进入搜索页面
搜索页面中首先就是筛选条件的选择 筛选.png
注意:左下角那个 风险监控 原本是一个横条展开状态的,它会影响到分页的点击事件,所以在登录的时候需要把它收起来到左下角去。这个坑了我两个小时。。。
还有个需要注意的是,选择筛选条件之后会被记住,所以注册资本,注册时间这两个条件循环查询完之后需要再选一下全部让它恢复默认选项
也是一层层分析页面的标签,找到目标标签就行,到这里我们已经知道了省市区和行业了,接下来就是看列表了
列表.png
class="search-item"就是列表的项了,里面data-id就是公司的id,下面是分页,前面说了需要把下面一个横条收起来,要不分页会报错,因为横条遮住了分页按钮,selenium能操作的标签都必须要显示的,被遮挡或下拉选择框都需要让标签显示出来再进行点击或其他操作。
补充一下前面筛选条件
#行业分类,其他条件类似操作
div3 = driver.find_element_by_class_name("-level")
content_list3 = div3.find_element_by_class_name("content").find_elements_by_class_name("item")
hy_div = div3.find_elements_by_tag_name('div')[0]
ActionChains(driver).move_to_element(hy_div).perform() #鼠标悬停在行业分类
ActionChains(driver).move_to_element(content_list3[x]).perform() #鼠标悬停在一级行业,使显示出二级的行业
分页的话,我是直接点击下一页,所以不用考虑当前在哪一页,只需要知道当前列表全部条数还有每页是20条数据,如果点击页面数的话,逻辑应该会复杂一点。
总结
目前爬虫天眼查公司列表数据,已基本实现账号被挤退重新登录,条件细分查询(查询行业数据超过5000条才会进行注册资本的细分,注册资本的细分后还有超过5000的再进行注册时间的细分,避免每次都细分太多条件导致效率更忙),分页
还有一些问题,比如解析页面的时候偶尔抽风解析报错导致程序停止。还找不错什么原因。还有个最大的问题是爬虫一段时间后会出现验证码,这个两张图片选文字的验证码我是没办法的,只能遇到验证码的时候进入一个死循环并播放一个声音让自己知道手动去验证通过之后跳出死循环继续执行。
网友评论