更多>>关于我们

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

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

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

更多>>官方微博

西安鲲之鹏
陕西 西安

加关注

  • 【经验分享】未解锁BL的手机进9008模式(Mi6X为例)

    对于未解锁BL的手机,需要拆机,通过短接特定触点的方式进入9008模式。
    以小米Mi6X为例:
    第一步,拧掉充电口旁边的两颗螺丝。
    第二步,扣开后盖,可能不太好扣,可以借助美工刀在边缘撬一下。拧掉保护条上的3个螺丝。
    第三步,拔掉电池排线。看图,记着两个短接触点的位置。
    第四步,用镊子短接两个触点,同时插入TypeC线,2秒左右设备管理器"端口COM"里会出现9008接口,此时松开镊子。
    发布时间:2024-11-27 10:13:20
  • 【经验分享】已解锁BL的手机进9008模式

    高通9008模式全称"Qualcomm HS-USB QDLoader 9008",它相对于recovery、fastboot和Android系统是独立的。即深刷模式,也叫EDL,号称"救砖神奇"。

    对于已解锁BL的手机,进入9008相对比较简单,以小米Mi6X为例:
    1. 先确定手机是否解锁BL了。已解锁BL的手机,刚开机的时候会有"Unlocked"字样,如附图1所示。
    2. 长按“音量减键 + 开机键”进入fastboot。
    3. 执行fastboot oem edl,即可进入9008模式,进入成功后设备管理器COM端口里可以看到"Qualcomm HS-USB QDLoader 9008"。如附图2、3所示。
    发布时间:2024-11-26 12:53:03
  • 【经验分享】com.android.org.conscrypt.TrustManagerImpl证书固定检测绕过示例

    某APP使用通用的sslunpinning脚本后仍然抓不到包:
    (1)分析logcat日志,发现com.android.org.conscrypt.TrustManagerImpl类相关代码抛出java.security.cert.CertificateException异常,如图1所示。
    (2)hook 类com.android.org.conscrypt.TrustManagerImpl的checkTrusted和checkServerTrusted方法,返回空列表,成功抓到包。

    日志线索寻找关键词:CertificateException、CertificateExpiredExceptio、SSLHandshakeException
    发布时间:2024-10-24 15:36:45
  • 【经验分享】如何获取安卓手机上已安装APP的安装包(.apk)文件?

    1. 先查看已安装APP列表,确定对应APP的包名。
    adb shell pm list packages
    2. 假设包名为org.gushiwen.gushiwen。再根据包名查看APP的详细信息:
    adb shell dumpsys package org.gushiwen.gushiwen
    返回信息中的path属性,以base.apk结尾的,即就是这个APP的安装文件,如附图1所示。另外返回的信息中还有当前APP的版本(versionName属性),如附图2所示。
    3. pull下来这个文件,就可以在其它设备上安装了。
    发布时间:2024-10-22 11:27:51
  • 【经验分享】Dell R720意外断电重启之后丢失硬盘(硬盘状态变为Foreign)问题解决?

    本来有10块盘,启动的时候显示只有9块Virtual Disk。“Ctrl + R”进入RAID设置,在“VD Mgmt”标签页下也只看到了9块Virtual Disk。在“PD Mgmt”标签页下看到是有10块物理盘,不过第5块状态变成“Foreign”了(如附图1所示)。

    解决方法:在“VD Mgmt”标签页下,焦点切换到"PERC H710 Mini"上按F2,然后"Foreign Config",再然后"Import",操作完成(要等待几秒)之后就能看到全部盘了,如图2所示。

    PS:用Ctrl + N快捷键切换菜单标签。
    发布时间:2024-10-18 16:35:44
  • 【经验分享】一个游戏闯关模式学习CSS Selector的网站"CSS Diner":https://flukeout.github.io/
    Python使用BeautifulSoup实现CSS Selector解析HTML文档的示例:

    import requests
    from bs4 import BeautifulSoup

    r = requests.get('http://www.site-digger.com/html/articles/')
    r.encoding = 'UTF-8'
    html = r.text
    soup = BeautifulSoup(html)
    for a in soup.select('ul[class="arclist"] li a'):
    print(a['href'], a.text)
    发布时间:2024-09-02 19:43:03
  • 【经验分享】qemu-system-x86运行tiny11
    (1) 安装qemu-system-x86,安装完成后无需重启。
    sudo apt-get update
    sudo apt-get install qemu qemu-utils qemu-system-x86
    (2) 创建硬盘。
    qemu-img create -f qcow2 tiny11.img 50G
    (3) 创建虚拟机。
    sudo qemu-system-x86_64 --enable-kvm -m 2G -smp 4 -boot order=dc -hda /home/qi/kvm/tiny11-1/tiny11.img -cdrom /home/qi/kvm/tiny11_23H2_x64.iso -vnc :1
    (4) vnc连接 "服务器ip:5901",完成系统安装过程。设置vnc密码的方法:https://qemu-project.gitlab.io/qemu/system/vnc-security.html#with-passwords
    (5) 映射主机端口给虚拟机,使用-redir参数。如下示例,将主机的TCP/UDP4001端口映射到虚拟机的4000端口。
    -redir tcp:4001::4000 -redir udp:4001::4000
    发布时间:2024-08-10 12:13:46
  • 【经验分享】Playwright过geo.captcha-delivery.com检测

    page.add_init_script('''Object.defineProperties(navigator, {webdriver:{get:()=>undefined}}); delete navigator.__proto__.webdriver;''') ​​​
    发布时间:2024-07-31 10:41:18
  • 【经验分享】scrcpy在网络质量欠佳环境下可以通过降低码率来提高流畅度
    e.g.
    scrcpy --bit-rate 1M --max-fps 5
    注意:在新版本中--bit-rate参数更名为--video-bit-rate ​​​
    发布时间:2024-07-03 10:11:54
  • 【经验分享】scrcpy在小米手机上鼠标不起作用问题的解决

    在“开发者选项”中需要打开"USB调试(安全设置) - 允许通过USB调试修改权限或模拟点击"。要打开这个选项,手机需要先登录小米账号,另外手机必须要插有SIM卡。 ​​​
    发布时间:2024-07-03 10:09:29
当前位置: 首页 > 公司微博 >
  • 西安鲲之鹏

    发布时间:2020-01-13 10:59:56
    【经验分享】“KVM(QEMU) + Bliss OS X86 + MockLocation APP"打造支持虚拟定位的Android模拟器,用于APP数据采集小试牛刀: 采集某外卖平台数据。
    MockLocation APP是什么?  详见我这篇文章 >>> http://www.site-digger.com/html/articles/20200110/777.html ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2020-01-12 10:50:54
    【经验分享】推荐一款开源Android x86系统Bliss OS (x86),项目主页是https://blissroms-x86.github.io/

    经过实测我觉得Bliss有如下优点:
    (1) 比原生的Android x86(https://www.android-x86.org/)稳定,特别是应用兼容性较好,好多在原生Android x86下闪退的App,在Bliss下都能稳定运行。如图3和4所示,美团APP可以稳定运行,而在原生Android x86下会不停崩溃,无法正常工作。因此Bliss更适合作为安卓模拟器。
    (2) 支持平板模式和桌面UI两种模式,可以在设置里自由切换。这点比Phoenix OS要好,Phoenix OS貌似只有桌面模式,不适合作为安卓模拟器。
    (3) 无内置广告。吐槽一下Phoenix OS,刚开始没有广告,用一段时间就会提示让你购买会员,否则就会出现关不掉的广告。

    Bliss的缺点:
    (1) 启动比较慢,实测约50秒。
    (2) 不要升级内置的SuperSU,我试了多次,一升级重启后就卡在系统Logo界面,无法正常进入系统。

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2020-01-12 10:05:12
    【经验分享】qemu-system-x86_64使用网桥出现
    failed to parse default acl file `/etc/qemu/bridge.conf`
    qemu-system-x86_64: -net bridge,br=br0: bridge helper failed
    问题(如附图1所示)的解决方法:

    原因是缺少/etc/qemu/bridge.conf文件。

    (1) mkdir /etc/qemu
    (2) echo 'allow br0' > /etc/qemu/bridge.conf

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2020-01-10 15:15:48
    【开源分享】发布一款Android X86虚拟定位的App,支持命令行设置经纬度参数,无需UI操作,专为安卓App自动化模拟操作设计。

    用法举例:

    # 切换定位到"秦始皇陵"(34.384225, 109.254423)  
    adb shell am start -n cn.webscraping.qi.mocklocation/cn.webscraping.qi.mocklocation.MainActivity --es lat 34.384225 --es lng 109.254423  

    详细介绍见 >>> http://t.cn/AisHGPoY

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2020-01-02 15:20:22
    【经验分享】Chrome + Remote Debugging模式(注意:不是Selenium + Chromedriver模式)登录淘宝出现“验证码爆错”(如附图所示)。原因Chrome V79版本在Remote Debugging模式时会爆出navigator.webdriver属性,从而被风控。换用V72或V73版本可以顺利登录!(前一条微博也说得是这个事儿) ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-31 18:03:03
    【经验分享】不经意见发现Chrome v73版本在Remote Debugging模式下(注意:不是Selenium + Chromedriver模式)不会暴露出navigator.webdriver!如附图1所示。

    作为对比,我又测试了其它的版本:
    (1)如图2所示,是Chrome V63版本,在Remote Debugging模式下会暴露出navigator.webdriver;
    (2)如图3所示,是Chrome V79版本,在Remote Debugging模式下也会暴露出navigator.webdriver;

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-31 11:11:58
    【Mark收藏】MurmurHash3.js - A javascript implementation of MurmurHash3's hashing algorithms.    >>>  http://t.cn/z8Yont3

    Usage
    // Return a 32bit hash as a unsigned int:
    > murmurHash3.x86.hash32("I will not buy this record, it is scratched.")
      2832214938

    // Return a 128bit hash as a unsigned hex:
    > murmurHash3.x86.hash128("I will not buy this tobacconist's, it is scratched.")
      "9b5b7ba2ef3f7866889adeaf00f3f98e"
    > murmurHash3.x64.hash128("I will not buy this tobacconist's, it is scratched.")
      "d30654abbd8227e367d73523f0079673"

    // Specify a seed (defaults to 0):
    > murmurHash3.x86.hash32("My hovercraft is full of eels.", 25)
      2520298415

    // Rebind murmurHash3:
    > somethingCompletelyDifferent = murmurHash3.noConflict()
    > murmurHash3
      undefined
    > somethingCompletelyDifferent.version
      "2.1.2"

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-31 09:55:51
    "浏览器指纹"之 "HTML5 Canvas指纹"

    【原理】
    在HTML5中可以使用JS + Canvas标签生成图片,利用"canvas.toDataURL()"可以获取到图片的Base64码。
    同样的JS Canvas绘图代码,在同一个浏览器下生成的图片是相同的(字节码相同)。
    但是由于系统的差别、渲染引擎的不同,同样的JS Canvas绘图代码,在不同的浏览器下得到的图片也是不同的(字节码不同。注意:也有相同的可能,但是概率较小)。
    利用上述原理,同一段JS Canvas绘图代码,返回生成图片的HASH值作为“HTML5 Canvas指纹”。

    【在线测试工具】
    http://t.cn/R3259jj
    如附图1所示,我的谷歌浏览器的“HTML5 Canvas指纹”在49w个相同UA的浏览器中,仅有1456个相同的,唯一性高达99.71%。

    【"HTML5 Canvas指纹算法"示例代码】
    // 计算字符串的hash值
    // 摘自http://t.cn/AiFHoZGI
    function hashstr(s){
    var hash = 0;
    if (s.length == 0) return hash;
    for (i = 0; i < s.length; i++) {
      char = s.charCodeAt(i);
      hash = ((hash<<5)-hash)+char;
      hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
    }

    // 使用canvas绘图,并返回图片的Base64码对应的hash值
    // 摘自http://t.cn/AiFHoZGV
    function getCanvasFp() {
        var result = "";
        // Very simple now, need to make it more complex (geo shapes etc)
        var canvas = document.createElement('canvas');
        canvas.width = 2000;
        canvas.height = 200;
        canvas.style.display = 'inline';
        var ctx = canvas.getContext('2d');
        // detect browser support of canvas winding
        // http://t.cn/R7wzrRy
        // http://t.cn/AiFHoZG5
        ctx.rect(0, 0, 10, 10);
        ctx.rect(2, 2, 6, 6);
        result += 'canvas winding:' + ((ctx.isPointInPath(5, 5, 'evenodd') === false) ? 'yes' : 'no');

        ctx.textBaseline = 'alphabetic';
        ctx.fillStyle = '#f60';
        ctx.fillRect(125, 1, 62, 20);
        ctx.fillStyle = '#
    069';
        // http://t.cn/AiFHoZGx
        ctx.font = '11pt no-real-font-123';

        ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 2, 15);
        ctx.fillStyle = 'rgba(102, 204, 0, 0.2)';
        ctx.font = '18pt Arial';
        ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 4, 45);

        // canvas blending
        // http://t.cn/AiFHoZGt
        // http://t.cn/AiFHoZGM
        ctx.globalCompositeOperation = 'multiply';
        ctx.fillStyle = 'rgb(255,0,255)';
        ctx.beginPath();
        ctx.arc(50, 50, 50, 0, Math.PI * 2, true);
        ctx.closePath();
        ctx.fill();
        ctx.fillStyle = 'rgb(0,255,255)';
        ctx.beginPath();
        ctx.arc(100, 50, 50, 0, Math.PI * 2, true);
        ctx.closePath();
        ctx.fill();
        ctx.fillStyle = 'rgb(255,255,0)';
        ctx.beginPath();
        ctx.arc(75, 100, 50, 0, Math.PI * 2, true);
        ctx.closePath();
        ctx.fill();
        ctx.fillStyle = 'rgb(255,0,255)';
        // canvas winding
        // http://t.cn/R7wzrRy
        // http://t.cn/AiFHoZGf
        ctx.arc(75, 75, 75, 0, Math.PI * 2, true);
        ctx.arc(75, 75, 25, 0, Math.PI * 2, true);
        ctx.fill('evenodd');

        if (canvas.toDataURL) {
            result += ';canvas fp:' + canvas.toDataURL();
        }
        return hashstr(result);
      }

    在同一个机器上不同的Chrome和Firefox窗口测试上述代码,结果如附图2所示:
    (1)Chrome窗口1、Chrome窗口2内getCanvasFp()返回的值相同;
    (2)Firefox窗口getCanvasFp()返回的值不同;

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-17 11:13:52
    Tmall APP searching result data scraping screenshots. ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-12 12:46:58
    【经验分享】Android-x86 4.4和5.1版本安装的时候卡在GRUB安装,问题解决方法:
    The  fix is that you should manually create partitions: create a small (100m) first primary partition for grub, and a 2nd extended partition for the rest, and install android on the 2nd, the grub will go automatically to the 1st...
    >>> http://t.cn/AiDw9VwW  http://t.cn/AiDw9VwC

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间:2019-12-06 12:35:57
    【经验分享】昨天发的Android x86模拟器设置静态IP的方法,今天在另外一个环境下测试发现有问题。原来是静态IP被DHCP给覆盖掉了,DHCP执行得比/etc/init.sh要晚。查了半天也没找到禁用默认HDCP的方法,最后试着将/system/bin/dhcpcd和/system/bin/dhcptool两个文件重命名,重启,问题竟然解决了 ​​​​

    阅读全文 + 去微博评论 +

  • 西安鲲之鹏

    发布时间: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工作正常。

    阅读全文 + 去微博评论 +