更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
如何在采集程序中共享火狐的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/