因为部分原因,需要用到天眼查的数据,虽然开了天眼查的会员账号,但是导出Excel数据字段内容太少,部分例如工商注册号,组织机构代码都没用,感觉有些不完整,所以利用数据库里已有的公司名称来进行采集,将信息页的内容采集完整
吐槽下,天眼查的反扒确实蛮多的,最早用软件采集,但是没有配置采集频率,结果两分钟左右就爬了100个页面就会跳出验证码界面,验证码的图片有点也很讨厌,看到眼睛很花
因为知道明确的公司名称,采集思路就快很多,做了个winform 窗口的,两个按钮,一个开始一个结束,两个文本框,一个用来显示当前的采集url,另一个是显示采集成功的结果累计页
采集的过程就是连接完数据库后,根据查询语句从数据库中捞出相应数据形成List,加一个webBrowser做可视化界面,因为验证码绕不开,需要点击.
总体的思路是:根据公司名称拼凑成url,然后解析html,找到详细页的url,再解析第二次的详细页的html,抓取相应数据,保存到数据库
因为不太懂得多线程的原理,所以就在主线程上设置了休眠1秒,勉强1小时跳一次验证码,采集的速度也蛮很多,相当于手工模拟点击,因为天眼查一定要登录,出现验证码的页面会出现手机号和ip地址,感觉对着两个应该是有限制的.
贴上部分代码作为参考
初始化一些需要的字段
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HtmlAgilityPack;
using Ivony.Html;
using Ivony.Html.Parser;
using System.Threading;
/// <summary>
/// 替换采集的公司曾用名
/// </summary>
public string company_used_name = string.Empty;
/// <summary>
/// 替换采集的信息更新时间
/// </summary>
public string information_update_time = string.Empty;
/// <summary>
/// 替换采集的公司组织机构代码
/// </summary>
public string organizing_code = string.Empty;
/// <summary>
/// 替换采集的公司类型
/// </summary>
public string company_type = string.Empty;
/// <summary>
/// 替换采集的公司所属行业
/// </summary>
public string industry = string.Empty;
/// <summary>
/// 替换采集的公司营业期限
/// </summary>
public string operating_period = string.Empty;
/// <summary>
/// 替换采集的纳税人资质
/// </summary>
public string taxpayer_qualification = string.Empty;
/// <summary>
/// 替换采集的人员规模
/// </summary>
public string staff_size = string.Empty;
/// <summary>
/// 替换采集的实缴资本
/// </summary>
public string contribute_capital = string.Empty;
/// <summary>
/// 替换采集的登记机关
/// </summary>
public string registration_authority = string.Empty;
/// <summary>
/// 替换采集的参保人数
/// </summary>
public string guarabtee_people = string.Empty;
/// <summary>
/// 替换采集的公司英文名称
/// </summary>
public string english_name = string.Empty;
/// <summary>
/// 用于替换采集到的公司id
/// </summary>
public string company_id = string.Empty;
/// <summary>
/// 用于替换采集到的公司状态
/// </summary>
public string company_state = string.Empty;
/// <summary>
/// 判断按钮状态
/// </summary>
private bool status = false;
/// <summary>
/// 用于替换数据采集页的url
/// </summary>
public string urls = string.Empty;
public int ID;
public int CID = 0;
/// <summary>
/// 是否第一次加载url
/// </summary>
public bool isfrist = true;
/// <summary>
/// 数据库上下文
/// </summary>
DB_UsersEntities db = new DB_UsersEntities();
//数据库里的对应的表
public List<_Enterprise_TianYanCha> list;
初始界面,第一次登陆的时候,记录账号信息的