更多>>关于我们

西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。

您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。

数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。

更多>>官方微博

西安鲲之鹏
陕西 西安

加关注

  • 【经验分享】playwright/selenium绕过反自动化/爬虫检测最新方案
    原理:是通过在页面加载之前注入js脚本,抹去navigator.webdriver等浏览器自动化特征。
    使用的这个js脚本(stealth.min.js)来源于Github上的puppeteer-extra-plugin-stealth项目(A plugin for puppeteer-extra and playwright-extra to prevent detection.)。

    playwright的示例:
    context.add_init_script(path='stealth.min.js')
    page = context.new_page()
    page.goto("https://bot.sannysoft.com/")

    selenium的示例:
    driver = webdriver.Chrome()
    with open('stealth.min.js', 'r') as f:
    js = f.read()
    driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js})

    效果检验:
    1. 第一个检验标准,是看是否还会爆出navigator.webdriver等特征,可以直接在控制台查看,也可以通过访问https://bot.sannysoft.com/来查看。例如附图1是未做绕过处理时的截图。
    2. 第二个检验标准,是尝试登录淘宝,看能否成功。如果未做绕过处理,会出现滑块验证码,而且是无法正常处理的那种,无法登录成功。如附图2所示。

    经过测试,上述两项检验标准均通过:即没有爆出navigator.webdriver等特征,也可以成功登录淘宝,不出现滑块验证码。

    另附stealth.min.js的下载地址:
    http://www.site-digger.com/uploads/stealth.min.js
    发布时间:2022-08-10 11:05:15
  • 【经验分享】miller以XTAB格式查看字段内容较多或者字段较多的CSV文件
    示例:mlr --icsv --oxtab --from mouser_products_202208.csv head -n 3
    官方文档:https://miller.readthedocs.io/en/latest/file-formats/#xtab-vertical-tabular

    效果如附图所示。 ​​​
    发布时间:2022-08-10 10:26:30
  • 【分享】"CZ88纯真IP库20220420版" - MySQL版(52万条)免费下载

    数据说明:
    基于”QQ纯真IP库20220420版”转换的MySQL版本,共计529,985条。添加的数字格式的IP段起始和终止字段,可以通过该数据快速查询出某IP的归属国家、位置信息。

    字段说明:
    `ip_start_num` – 起始IP,数字类型(根据ip_start转换)
    `ip_end_num` – 终止IP,数字类型(根据ip_end转换)
    `ip_start` – 起始IP,字符串类型
    `ip_end` – 终止IP,字符串类型
    `country` – 所属国家
    `location` – 所在位置

    用法举例:
    (1)先将待查询IP转为数字类型。例如:
    ip_num = struct.unpack(‘!I’, socket.inet_aton(ip))[0]
    (2)查询”ip_start_num <= ip_num and ip_end_num >= ip_num”的记录,例如SQL语句:
    sql = ‘SELECT country FROM ips WHERE ip_start_num <= %s AND ip_end_num >= %s;’.format(ip_num, ip_num)

    示例数据:
    http://db.site-digger.com/csv/637a38385f6970735f32303232303432305f73616d706c65/

    下载链接:
    http://www.data-shop.net/2014/08/cz88-free-ips-database-20220420-mysql-version-52w/

    应用举例:
    如附图2所示,是使用该数据实现的IP地址归属地查询API。
    发布时间:2022-08-02 12:34:26
  • 【经验分享】一例Squid http认证异常问题的排查
    背景:
    (1)Squid配置的HTTP代理。使用external_acl_type自定义acl脚本进行ip和用户名密码认证,acl通过的放行,否则deny。
    (2)Playwright设置带用户名密码认证的http代理(上述Squid)代理。

    问题:
    curl命令或者requests库测试均工作正常,但是Playwright始终报 NS_ERROR_PROXY_FORBIDDEN错误。

    排查:
    用curl -v命令测试用户名密码不对或者为空情况下squid的返回,如下图所示,返回的是403状态码。意识到问题的所在了,对于浏览器来说,只有当服务端返回407状态码时,才会启用HTTP Proxy Basic Auth认证。此时返回403直接中断了后续认证流程。

    解决:
    自定义的external_acl_type之后,在http_access deny all之前,加入acl auth_user,让其在external_acl_type的ACL匹配失败的情况下能够返回407状态码。

    延伸:
    如何让“浏览器一开始就带上Proxy-Authorization头,这样就能直接通过认证,减少一次407的返回,提高效率。就像request库一样”? 经过测试发现使用一些代理插件,例如SwitchyOmega,可以实现。
    发布时间:2022-06-23 10:58:25
  • 【经验分享】利用HAProxy Runtime API的"set server"命令可以动态修改Haproxy的Backend server。
    例如 将Backend "backendout"的 Server "server1"的地址修改为115.209.110.181,端口修改为32603,执行如下命令即可。
    echo "set server backendout/server1 addr 115.209.110.181 port 32603" | socat stdio tcp4-connect:127.0.0.1:9999

    有两个前提:
    (1)HAproxy 2.0以后的版本才支持 Runtime API。
    (2)在配置文件里要开始 Runtime API的端口。如下配置示例,在9999端口开启Runtime API。
    global
    stats socket ipv4@127.0.0.1:9999 level admin

    详细用法可以参见官方博客里的示例,链接为https://www.haproxy.com/blog/dynamic-configuration-haproxy-runtime-api/
    发布时间:2022-05-22 16:22:21
  • 【经验分享】linux下如何检测某个网口下有ADSL拨号设备信号?
    用途:检测拨号设备是否工作正常,或者网口与拨号设备的连接是否正常。
    方法:可以使用"pppoe-discovery -I eth1"命令,eth1修改为具体要检测的网口。如果对应网口和拨号设备连接正常,将会返回BAS的名称和IP。
    文档连接:https://www.systutorials.com/docs/linux/man/8-pppoe-discovery/

    如附图所示,为分别在连云港联通、南京电信、南昌电信拨号环境下做的测试。
    发布时间:2022-05-10 19:10:47
  • 【经验分享】如何查看客户通过web隧道访问了什么网站?
    Web隧道内传输的数据通常是经过ssl加密的,如何通过抓包查看客户访问了什么网站呢?我们知道Web隧道的建立离不开HTTP的CONNECT方法,因为只要我们过滤CONNECT关键词就能拿到客户连接的目标网址。
    例如,我们通过ngrep进行包过滤,锁定Web隧道服务的端口(本例为65002)
    sudo ngrep -d ens3 -W byline -N -t -q CONNECT port 65002
    PS:ens3 是网口。结果如附图所示。
    发布时间:2022-05-10 16:58:59
  • 【经验分享】如何计算阿里系Ajax请求中的sign签名?
    有过阿里系采集经验的开发者都应该知道,某宝(天猫)H5版、1688、某宝司法拍卖H5版等阿里系网站,在Ajax请求中都会有一个sign签名参数(如下图1、2、3所示),要是值不正确将无法获取到有效的数据(例如返回“非法请求”提示)。如果我们无法构造出有效的sign,就只能通过“模拟浏览器操作”的方式来绕过签名验证,再结合"mitmproxy动态抓包脚本"来提取返回数据,这种方案效率太低,而且很不灵活。本文将介绍如何计算这个sign值以及给出对应的Python实现,这样就能实现通过直接HTTP交互抓取数据。点击链接查看详情>>> http://www.site-digger.com/html/articles/20211018/851.html

    •  
    发布时间:2021-10-18 14:59:23
  • 【经验分享】接上一篇:Android APP内置WebView如何获取当前加载的URL(方法二)?
    这次是直接HOOK android.webkit.WebView类的loadUrl()方法,可以直接得到加载的URL。同时也可以再loadUrl()内调用setWebContentsDebuggingEnabled(true)开启远程调试。效果如附图所示,这是某宝APP内嵌的H5页面,成功获取到了URL并且在inspect中能看到对应的WebView窗口(开启该WebView的远程调试成功)。

    // 查看WebView加载的URLs并启动远程调试
    Java.use("android.webkit.WebView").loadUrl.overload("java.lang.String").implementation = function (s) {
    console.log('WebView.loadUrl():' + s);
    console.log('Set webview DebuggingEnabled!');
    this.setWebContentsDebuggingEnabled(true);
    this.loadUrl.overload("java.lang.String").call(this, s);
    };
    发布时间:2022-05-06 13:31:47
  • 【经验分享】Android APP内置WebView如何获取当前加载的URL?
    (1)使用Firida强制其开启WebView的远程调试,以某司法拍卖APP为例,执行如下代码后。
    Java.perform(function() {
    var WebView = Java.use("com.uc.webview.export.WebView");
    WebView.setWebContentsDebuggingEnabled(true);
    }
    );
    (2)通过adb forward命令把WebView的Unix域套接字映射为本地端口,详细步骤可参见我们的这篇文章http://www.site-digger.com/html/articles/20220414/860.html
    (3)通过WebView的远程调试接口即可看到当前Tab的JSON数据,如附图所示,其中就有URL信息。
    发布时间:2022-05-06 13:04:25
当前位置: 首页 > 公司微博 >
  • 西安鲲之鹏

    发布时间:2019-12-05 16:07:33
    【经验分享】Android x86 默认是通过DHCP获取IP的,那如何设置为静态IP参数呢?
    为什么不用DHCP呢?我所在的网络环境中有三个网关,分别连接联通、电信、动态VPN三种出口,我需要让不同的模拟器使用不同的网络(根据业务情况调整)。而DHCP默认分配的网关是固定的。

    以Android x86 6为例,按Alt + F1切换到控制台模式:

    vi /etc/init.sh
    在最后一行return 0之前,加入如下代码:

    # 加下面两句的目的是放弃DHCP获取的IP
    ifconfig eth0 down
    ifconfig eth0 up
    #
    设置eth0口的静态IP为192.168.1.116
    ifconfig eth0 192.168.1.116 netmask 255.255.255.0
    # 设置默认网关为192.168.1.253
    busybox route add default gw 192.168.1.253
    #
    设置DNS为 114.114.114.114 223.5.5.5
    ndc resolver setnetdns 0 localdomain 114.114.114.114 223.5.5.5

    保存(如图1所示),reboot后生效(如图2所示)。

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-05 10:18:57
    【经验分享】添加Fiddler/Mitmproxy证书为安卓系统证书,附自动化脚本,点击链接查看>>>  http://t.cn/AieLat6a ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-05 08:53:05
    【经验分享】
    "adb devices"出现"unauthorized"的问题经常遇到,大多数情况,adb kill-server之后就能解决,但是今天遇到遇到一设备怎么折腾都不行。

    后来按照这篇文章(http://t.cn/Aie2dMPU)介绍的方法得以解决:

    QUESTION/PROBLEM
    How to fix adb devices shows unauthorized device?

    APPLIES TO
    Android 4, Android 6, Android 7, Android 8

    RESOLUTION
    Possible solutions if "adb devices" shows a device as "unauthorized":
    C:\Users\JohnDoo>adb devices
    List of devices attached
    17310D821D      unauthorized

    1. Disconnect USB between PC and device
    2. Stop adb server by entering "adb kill-server" in command window
    3. On device use "Revoke USB debugging authorizations" in "Developer Options"
    4. On PC delete "adbkey" file in user directory, for example "C:\Users\JohnDoo\.android"
    5. Reconnect the device to the PC
    6. Open a command window and enter "adb devices". Watch the device's screen for any Authorization message and allow the connection.

    The device should now show as "device":

    注意:第四步"删除adbkey文件"是解决本问题的关键!

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-11-19 16:23:49
    【经验分享】使用uiautomatorviewer一直有一个奇怪的问题,查看某些UI正常,但是某些UI却提示异常“Error obtaining UI hierarchy”(如图1所示),控制台信息“null rootnode after parsing.”(如图2所示)。

    之前曾多次遇到这个情况,今天花了些时间查了下,发现stackoverflow上有人遇到类似的问题,详见http://t.cn/AidyMg3t。 原来这是Android4的一个Bug(http://t.cn/AidyMg3c),在Android L中被修复了(http://t.cn/AidyMg3f),Android 5之后的版本应该可以正常工作。

    于是我试了下Android 8下的情况,同一个APP,同一个UI uiautomatorviewer工作正常。

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-11-06 09:32:19

    【视频演示】ANJUKE新房楼盘/二手房小区详细参数,基于APP采集,IP限制弱。

    二手房小区字段:
    u'community_id', u'城市', u'小区名', u'本月均价', u'价格变动', u'所在版块', u'地址', u'总户数', u'建造年代', u'物业公司', u'物业类型', u'物业费', u'开发商', u'总建面积',  u'容积率', u'停车位', u'绿化率', u'经度', u'纬度', u'简介'

    新房楼盘字段:
    u'loupan_id', u'城市', u'楼盘名称', u'别名', u'楼盘价格', u'特色', u'区域位置', u'楼盘地址', u'建筑类型', u'规划户数', u'工程进度', u'开盘时间', u'交房时间', u'容积率', u'绿化率',  u'开发商', u'物业类型', u'物业公司', u'物业管理费', u'车位比', u'车位数', u'楼层状况', u'楼盘户型', u'经度', u'纬度'  西安鲲之鹏的微博视频

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-10-30 12:05:49
    【经验分享】grep命令提示Binary file (standard input) matches(如附图所示)怎么解决?
    可以使用-a参数,e.g. grep -a 'pattern'。
    -a, --text
    Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

    >>> http://t.cn/Ai1RqEdR ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-10-21 10:44:18
    【经验分享】链家APP ssl pinning的分析和解决
    (1)直接Fiddler抓包,失败,APP报网络异常,如图1所示;logcat报javax.net.ssl.SSLPeerUnverifiedException异常,如图2所示。
    (2)反编译apk,查到证书验证部分核心代码,如图3和4所示。
    (4)通过Frida HOOK okhttp3.internal.tls.OkHostnameVerifier verify()方法,始终返回true,绕过证书固定验证,代码如下:
    Java.perform(function () {
        var OkHostnameVerifier = Java.use('okhttp3.internal.tls.OkHostnameVerifier');
        try {
             OkHostnameVerifier.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function(p0, p1){
                 console.log('ssl unpinning for "' + p0 + '"');
                 return true;
           };
         } catch (e) {
            console.log(e);
        }
    });
    (5)如图5所示,Fiddler成功抓取到链接APP的HTTP交互数据。

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-10-18 13:23:42
    【经验分享】本文介绍了一例APP使用了非常规ssl pinning导致Fidder抓包失败,最终通过Frida HOOK成功解决,附源码。 >>> http://t.cn/Ai3tEzbP ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-09-26 10:52:18
    【经验分享】今日拨号服务器上某PPPOE拨号持续失败,经查日志:“pppoe: send (sendPacket): Network is down”,ip link 查看对应的虚拟网卡状态是DOWN,无法设置为UP(sudo ip link set dev v051802057684 up失败)。但同一个账号在另外一个机器上测试正常,怀疑可能是MAC地址的问题(例如冲突了),果断删掉虚拟网卡( sudo sudo ip link del v051802057684),然后重建并指定一个不同的MAC,拨号成功!

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-09-26 08:45:09
    【经验分享】昨天下午办公室断了下电,服务器重启后,adb devices显示10台设备都是“?????? no permissions”,第一次遇到这种情况。重启服务器和移动设备问题依据。后来在askubuntu上看到有人提到试一下sudo adb devices,竟然立马识别了(http://t.cn/AinpW0dY)。很诡异,之前用普通权限都一直正常着,为什么突然就没有权限了?

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-09-19 12:20:13
    【经验分享】Termux自带的am命令版本太低,竟然不支持force-stop(如图1示),经查得知pm clear命令也可以停止一个APP,而且还会将APP的用户数据清除掉(回到刚安装的状态),试了一下果然有效,运行之后"/data/data/包名"目录下只剩下lib目录了。注意:需要root权限。 >>> http://t.cn/AiEFayJc ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-09-18 09:16:52
    【经验分享】"adb shell 命令",如何让“命令”以root权限执行?
    例如,某设备已root,但当执行adb shell rm /data/data/com.xxxx/cache时提示Permission denied。

    解决方法:
    adb shell "su -c '[your command goes here]'"
    例如:
    adb shell "su -c 'rm /data/data/com.xxxx/cache'"

    参考文章"Is there a way for me to run Adb shell as root without typing in 'su'?" >>> http://t.cn/AiEd4P8m

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-09-02 16:42:37
    【经验分享】关于小红书搜索结果数据抓取的限制:
    1. 小红书微信小程序版之前是前600条可见,最近已被限制为前60条可见。
    2. 小红书安卓APP版本限制为搜索结果前1000条可见。 ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-08-22 16:07:00
    【经验分享】通过ADB启动手机淘宝APP搜索,打开指定关键词的搜索结果列表,如下示例,打开搜索“HUAWEI”的结果:
    adb shell am start -n com.taobao.taobao/com.taobao.search.SearchListActivity -d "taobao://s.taobao.com/search?q=HUAWEI" ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-08-21 17:52:28

    【经验分享】手机淘宝APP商品搜索结果采集最新方案20190821(免登录)
    (1)模拟操作APP操作,无需登录,不存在封账号;
    (2)IP限制弱;
    详见下附演示视频。  西安鲲之鹏的微博视频 ​​​​

    阅读全文 + 去微博评论 +