更多>>关于我们

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

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

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

更多>>官方微博

西安鲲之鹏
陕西 西安

加关注

  • 【演示】某小红书APP笔记详情及评论数据采集最新(20210618)演示
    近日某小红书的网页版不再展示笔记的“点赞数、评论数、收藏数和分享数”了,为了能拿到这些信息只能从APP端入手。本采集方案可以拿到笔记的所有属性值以及前10条评论数据。

    (1)笔记详情包含的字段
    'note_id'(笔记ID), 'note_type'(笔记类型,是普通的还是视频), 'user_red_id'(用户ID), 'user_name'(用户名), 'liked_count'(点赞数), 'shared_count'(分享数), 'collected_count'(收藏数), 'comments_count'(评论数), 'pubtime'(笔记发布时间), 'hash_tags'(标签), 'images_list'(原图列表), 'video'(视频链接,如果是视频笔记), 'desc'(笔记内容)
    示例数据链接:点击查看"小红书笔记示例数据"

    (2)笔记评论包含的字段
    'comment_id'(评论), 'note_id'(关联的笔记ID), 'user_name'(用户名), 'pubtime'(评论发布时间), 'like_count'(评论点赞数), 'score'(评分), 'content'(评论内容), 'sub_comment_count'(评论回复数), 'sub_comments'(评论回复内容)
    示例数据链接:点击查看小红书评论示例数据

    某小红书APP笔记详情及评论数据采集最新(20210618)演示

    发布时间:2021-06-18 14:30:34
  • 【经验分享】某特来电APP采集方案
    我们分析的是V5.11.0版本,加了360的壳,用了ssl证书固定。
    (1)经过ssl unpinning之后,Fiddler成功抓到包,如图1-3所示,分别对应“充电站搜索返回的列表”,“充电站详情”和“充电站的终端列表”。可以看到请求头中有很多陌生的参数,例如AVER,它是怎么构造出来的?
    (2)脱壳,反编译找到了实现过程代码,如图4所示。可以看出AVER是通过对时间戳参数ATS,经过"DES/CBC/PKCS7Padding"加密而成。其它参数在代码中也都能找到实现过程。其中"X-Token"的产生过程比较复杂,后面再分享产生过程。
    发布时间:2021-06-08 12:10:34
  • 【经验分享】com.google.gson.Gson的toJson()方法在插桩分析的时候太有用了,赞赞赞。
    function toJson(javaObject) {
        return Java.use("com.google.gson.Gson").$new().toJson(javaObject);
    };
    通过toJson(javaObject)可以将Java对象(数据结构)转换成JSON格式,非常方便。想想之前都是通过字符串拼接各个字段(熟悉)值,太费劲儿了。

    关于com.google.gson.Gson的toJson()的更多示例可以看这篇文章:https://www.cnblogs.com/reboost/p/9521603.html
    发布时间:2021-06-04 10:57:34
  • 【经验分享】某美丽修行APP反采集策略分析
    采用的反采集策略:
    (1)加了360的壳。
    (2)ssl证书固定。
    (3)部分接口返回的数据有加密,例如附图1所示。
    (4)商品搜索部分需要登录(不登录实际可以拿到前10条数据)。

    解决方案:
    (1)通过frida脚本绕过证书固定,成功拦截到交互过程,如附图1所示,为某个请求的应答。
    (2)经过dump内存dex文件,jadx反编译,找到了“entityInfo”加密串的解密过程,如图2所示。顺藤摸瓜,找到AES解密的key和iv在so文件里,如图3所示。
    (3)用ida pro静态分析so文件,成功找到了key和iv,如图4所示。
    (4)用获取到的key和iv尝试解密“entityInfo”,成功,如图5所示。

    "商品详情"对应JSON数据如附图6所示,"全成分表"对应JSON数据如附图7-9所示。
    发布时间:2021-06-03 14:41:55
  • 【经验分享】一例网站反爬机制分析
    某网站,网址:http://t.cn/Rm6yxny(microchip官网)。浏览器访问正常,用Python urllib2和curl命令获取超时,修改成浏览器相同UA也同样结果。

    根据经验,网站是根据“是否使用了长连接”来识别爬虫的。现代浏览器默认都会使用长连接(Connection: keep-alive)来提高多个请求的效率,而urllib2默认不使用长连接,每次请求完毕都会关闭tcp连接,urllib2发出的HTTP请求Connection值都为close(urllib2源码里写死了,如附图所示)。

    解决方法:使用支持长连接的HTTP库即可,例如requests库或者urllib3库。

    另外,我在stackoverflow上看到了能让urllib2支持keep-alive的方法,连接在这里https://stackoverflow.com/questions/1037406/python-urllib2-with-keep-alive,没有测试过。
    发布时间:2021-05-28 11:25:15
  • 【经验分享】如何在命令行下执行单个SQL语句?
    例如 定期清理django_session表
    示例: mysql -u root -p 123456 somedb -e "delete from django_session" ​​​​
    发布时间:2021-05-27 17:05:36
  • 【经验分享】某http proxy server远程连接老被reset,如图所示,curl连接总是返回“ Connection reset by peer”,偶尔也能成功一下。nc连接,能连上,但连上后马上断开。
    在服务器上本地测试就没问题。刚开始怀疑是机房防火墙搞的怪,联系IDC无果。

    proxy server用的是delegate,看命令行参数,偶然发现有个"MAXIMA=conpch:30"参数,突然意识到了问题,应该是并发数设置太小了。改成200,重启delegate,问题解决。

    附“MAXIMA conpch”参数说明文档:
    http://t.cn/A6c5ngHp
    conpch  --- max. number of connections at a time per client host [unlimited]
    发布时间:2021-04-08 10:37:42
  • 【经验分享】使用httping来测试http/socks5 proxy的稳定性

    httping是一款http连通性测试工具,通过跟踪持续http请求的结果,来评估目标平台的稳定性。它支持http/https以及socks5代理,因此我们可以借以测试http/https/socks5代理的稳定性。

    示例1:
    测试http代理的稳定性,命令如下:
    httping --proxy 代理IP:代理端口 --proxy-user  代理用户名 --proxy-password  代理密码 -Y 目标网址
    效果如图1和图2所示。通过对比可以明细看出图2的代理要比图1的速度快很多,而且稳定性更好。

    示例2:
    测试socks5代理的稳定性,命令如下:
    httping -5 --proxy 代理IP:代理端口 --proxy-user  代理用户名 --proxy-password  代理密码  -Y 目标网址
    PS:与设置http代理相比,设置socks5代理只多了一个"-5"参数。
    效果如图3所示。

    httpping项目主页:http://t.cn/RqDnaQc,上面还有编译好的win64版本。
    发布时间:2021-03-26 12:23:58
  • 【经验分享】mysql修改数据存储目录datadir之后,无法正常启动。syslog显示错误信息如下:
    apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/data/sdi/mysql_data/mysql/ibdata1"
    有很多类似行,见图1,跟文件权限有关。

    apparmor 是一款Linux下的应用程序权限控制软件,这里是它禁止了mysqld进程对新的数据库目录的访问。

    解决方案:
    (1)编辑apparmor的mysql进程权限配置文件etc/apparmor.d/usr.sbin.mysqld,加入对新的数据库目录的访问授权。
    (2)重启apparmor服务,sudo service apparmor restart,这一步很重要,光修改上述配置文件不行,重启才能生效。
    (3)重启mysql服务。
    发布时间:2021-03-18 13:26:50
  • 【吐槽+分享】商超类店铺商品真够多啊,一个华润万家店铺商品数超过了7000件。

    分享:
    美团外卖华润万家(益田店),店铺APP ID:6043548,地址:深圳市福田区福民路北面皇达东方雅苑裙楼。全量商品数据(约7000条),采集时间:2021-03-16
    数据下载链接:http://t.cn/A6tuEDLa

    字段说明:
    'id' - 商品ID;
    'category' - 所属分类(商家自定义分类);
    'name' - 商品名称;
    'min_price' - 商品价格;
    'origin_price' - 商品原价;
    'member_price' - 会员价;
    'unit' - 单位;
    'min_order_count' - 最少起售量;
    'spec' - 规格;
    'real_stock' - 库存;
    'month_saled_content' - 月销量;
    'praise_content' - 点赞数;
    'activity_tag' - 所属活动;
    'promotion_info' - 促销信息;
    'picture' - 商品图片;
    发布时间:2021-03-16 12:53:34
当前位置: 首页 > 技术文章 >
如何在采集程序中共享火狐的Cookie
发布时间:2012-05-31

对于需要登录后才能进行的采集,采用共享火狐浏览器Cookie的方案好处是:不用自己在再写登录过程,直接在火狐中进行登录即可。

火狐的Cookie存储在哪儿?

  • 临时性Cookie,即关闭浏览器后就会过期的Cookie存储在sessionstore.js中,格式为JSON,结构如下:
  • 永久性Cookie存放在cookies.sqlite中,格式为SQLite数据库,结构如下:

 这两个文件的路径在不同的操作系统(不同用户)下是不一样的,比如Win7上的路径是:C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\d4371ep6.default。

如何使用这些Cookie数据?

读取cookies.sqlite和sessionstore.js将其转换为统一的、我们的采集程序可用的Cookie格式。

我们的采集程序采用Python编写,Python的cookielib.MozillaCookieJar()可识别的Cookie格式为:

# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
 
www.example.com  FALSE /  FALSE 1338534278  cookiename value

前面几行为注释行(以#开头),后面为Cookie数据,每行为一项,元素之间采用制表符\t分隔。
各部分的含义如下:

domain - 可被使用的域;
flag - 是否允许所有子域使用该项,可根据domain是否已点开头来判断;
path - 可被使用的路径;
secure - 是否需要安全连接(HTTPS);
expiration - 过期时间,Unix时间戳。
name - Cookie项名;
value - Cookie项对应的值;

我们的实现方案如下:

import os
import cookielib
import urllib2
from pysqlite2 import dbapi2 as sqlite

def firefox_cookie(ffc_path=r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\d4371ep6.default'):
       
        con = sqlite.connect(os.path.join(ffc_path, 'cookies.sqlite'))
        cur = con.cursor()
        cur.execute("select host, path, isSecure, expiry, name, value from moz_cookies")
        ftstr = ['FALSE', 'TRUE']
        s = StringIO()
        s.write('# Netscape HTTP Cookie File\n')
    	s.write('# http://www.netscape.com/newsref/std/cookie_spec.html\n')
    	s.write('# This is a generated file!  Do not edit\n')
        for item in cur.fetchall():
            s.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % (item[0], ftstr[item[0].startswith('.')], item[1], ftstr[item[2]], item[3], item[4], item[5]))
        js_path = os.path.join(ffc_path, 'sessionstore.js')
        if os.path.exists(js_path):
            try:
                js_data = json.loads(open(js_path, 'rb').read())
            except Exception, e:
                print str(e)
            else:
                if 'windows' in js_data:
                    for window in js_data['windows']:
                        for cookie in window['cookies']:
                            s.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % (cookie.get('host', ''), ftstr[cookie.get('host', '').startswith('.')], \
                                     cookie.get('path', ''), False, str(int(time.time()) + 3600*24*7), cookie.get('name', ''), cookie.get('value', '')))
	
		
        s.seek(0)
        cookie_jar = cookielib.MozillaCookieJar()
        cookie_jar._really_load(s, '', True, True)
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
        return self.opener
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。
☹ Disqus被Qiang了,之前所有的评论内容都看不到了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/
QQ在线客服
欢迎咨询,点击这里给我发送消息。
欢迎咨询,点击这里给我发送消息。

加微信咨询