admin 管理员组

文章数量: 887021

建筑

一:网站结构

网站url:


1.公司种子url获取

公司的主页url

进到这个网站然后看到第一个公司内蒙古华诚商务有限责任公司我从关注这哥网站开始首页好像从来没变过;不知道列表是根据什么来排序的。然后我们点进去这个公司看到它的url是
它由一个固定的前缀
(/)和公司ID(001607230057395100)构成。
所以我们只要拿到公司的ID号就等于拿到公司的主页url了。

怎么得到公司ID

-通过列表url来翻页

种子url打开得到的是一个建筑公司的列表,我们能得到列表里的公司ID;但是翻页的次数有限制最多有30页,然后发现列表上面还可以筛选条件。我试了通过 资质类别,包含资质名称, 企业注册属地 这3个条件跑了一遍跑出了40w多家公司id,我一排序去重只有10w。。。。我估计有很多公司都没给上这些标签!导致用这些标签筛选根本找不到!

-通过ID规律

通过上面那个方法排序得到的10w家公司的ID,我发现了规律。拿前面(001607230057395100)这个ID做例子 001607230057 这前面12位代表时间16年7月23日更新的,后面395100这六位表示从零开始的索引号。
规律是找到规律了但是要通过这个规律来获取所有公司ID还是有些困难。

我通过上面两种方法得到了33w家公司得名字以及公司ID。但是还是不全

-直接通过公司名发post请求

上面两个方法都有缺陷,最直接的方法是通过公司直接发送一个post请求得到公司ID;这个网站的搜索方式是模糊搜索。前提是你要知道这个公司的名字或简称!


2.拿到公司种子ID之后

ID与一级结点的关系

  • 建筑企业基本信息buildingBasicInfo:(字典)
    ‘/’ + id
  • 企业资质资格信息buildingAptitude:(资质列表,较少)
    “/” + id
  • 注册人员信息registeredPerson:(人员列表)
    “/” + id
    得到人员列表的首页,跟据index翻页拿到所有页人员的种子ID1。
  • 工程项目信息buildingProject:(项目列表)
    ‘/’ + id
    得到项目列表的首页,跟据index翻页拿到所有页项目的ID2。
  • 不良行为信息buildingBadBehavior:(列表,较少)
    “/” + id + ‘/0’
    没有找到有多条不良信息的公司,不知道由多条不良信息的构成是怎么样的,所有目前不管有多少条不良信息暂时只能拿一条;想办法找到了再来改解析函数。
  • 良好行为信息buildingGoodBehavior:
    “/” + id + ‘/1’
    没找到有此项的公司,此函数还没写。
  • 变更记录信buildingChanges:
    “/” + id
    没找到有此项的公司,此函数还没写。
  • 黑名单记录信息buildingBlackListRecord:(列表)
    “/” + id
    没有找到有多条黑名单记录的公司,不知道由多条黑名单记录的构成是怎么样的,所有目前不管有多少条不良信息暂时只能拿一条;想办法找到了再来改解析函数。

ID1与注册人员的结构####

  • 注册人员基本信息rpBaseInfo与执业注册信息rpPraReg:(字典)
    ‘/’ + id1
  • 个人工程业绩信息rpPerEngAch:(业绩列表,较少)
    “/” + id1
  • 个人不良行为信息rpBadBehavior:
    ‘/’ + id1 + ‘/0’
    没有找到有多条不良信息的人,不知道由多条不良信息的构成是怎么样的,所有目前不管有多少条不良信息暂时只能拿一条;想办法找到了再来改解析函数。
  • 个人良好行为信息rpGoodBehavior:
    ‘/’ + id1
    没找到有此项的人员,此函数还没写。
  • 个人黑名单记录信息rpBlackListRecord:
    “/” + id1
    没找到有此项的人员,此函数还没写。
  • 个人变更记录信息rpChanges:(列表)
    “/” + id1

ID2与工程项目的结构####

 无关。。有点不一样,看下代码与网页结构就知道了。

二:算法策略

1.多线程控制:

线程池只能定义在主线程里面这样才能控制好线程的数量。
更好的办法:代理允许一秒钟访问30次,要是能控制每秒发30次请求就好了。

2.http请求写法:


跟据代理返回的情况,要保证请求函数不反悔None,又要保证快速
其他的可以看代码,不懂的问我。
项目地址:http://h126:11000/plugins/spider_construction_by_py.git

本文标签: 建筑