Amazon卖家后台爬虫开发,使用浏览器Cookie实现自动登录

相比于Wish、AliExpress爬虫Amazon算是比较复杂的了。首先第一步登录,就是比较难处理的,因为需要手机短信验证码。而我们有没用专门接收短信验证码的设备,就只有使用已经登录好的浏览器Cookie来授权了。

当好不容易解决了登录之后,会发现amazon还需要切换站点、切换语言等等操作。这些后面在介绍,这里就先介绍Cookie方式实现登录。

为了处理这些,我先开发了一个浏览器插件。用户登录Amazon后,记录下当前的Cookie信息,然后存到数据库中,当爬虫需要的时候再从数据库里面取出来。

插件获取Cookie的核心代码:

var az_data = {
	cookie_jar: '',
	user_agent: '',
	site_domain: '',
	shop_id: 0
};

function getCookiesByAmazonCoUk() {
    chrome.cookies.getAll({}, function(cookies) {
        var cookie_array = new Array();
		for (var i in cookies) {
			var cookie = cookies[i];
			if (cookie.domain === ".amazon.co.uk") {
				cookie_array.push(cookie)
			}
		}
		az_data.cookie_jar = JSON.stringify(cookie_array);
    });
}

获取amazon.co.uk站点的Cookie信息,并转成JSON字符串。


有了Cookie信息,那么就好办了,下面代码实现登录。有Python和Java两种版本。

Python版本

def add_cookie(driver, domain, cookies):
    for cookie in cookies:
        if cookie['domain'].find('services.') != -1:
            continue
        if cookie['domain'][0] != '.':
            cookie['domain'] = '.' + cookie['domain']
        try:
            driver.add_cookie(cookie)
        except InvalidCookieDomainException as e:
            print('can\'t set cookie: ', e)

需要去掉services否则可能报错,另外如该domain不是以.开头的,需要加上.,否则也会报错。另外在添加Cookie之前需要先请求一次Amazon网页,然后在调用delete_all_cookies()函数清除所有的Cookie在add_cookie之前。

cookies 是之前浏览器获取到的Cookies转换后的List

cookies = json.loads('从数据库取出的az_data.cookie_jar')

Java版本

List<String> pairs = new ArrayList<>(cookies.size());
for (Map cMap : cookies) {
    String name = cMap.get("name").toString();
    String value = cMap.get("value").toString();
    String path = cMap.get("path").toString();
    String domain = cMap.get("domain").toString();
    if (domain.indexOf("services") != -1) {
        continue;
    }
    if (domain.charAt(0) != '.') {
        domain = "." + domain;
    }
    driver.manage().addCookie(new Cookie(name, value, domain, path, null));
}

注意事项与Python一样。但Python可以将整个dict添加到PhantomJS中,而Java必须按Cookie类的构造器参数来指定。

cookies 是之前浏览器获取到的Cookies转换后的List

List<Map> cookies = JSON.parseArray('从数据库取出的az_data.cookie_jar', Map.class);

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:Amazon卖家后台爬虫开发,使用浏览器Cookie实现自动登录

本文地址:https://jizhong.plus/post/2018/01/amazon-cookie.html