使用Selenium VS SELE-detection-site python刮取多个页面

时间:2017-06-24 16:26:09

标签: python selenium web-scraping user-agent detect

我已经有一个月的编码和Selenium的几天了。

这个网站非常顽固,我设法让它工作一次,而且没有更多,尽管代码没有改变。它在第一页后继续检测到我。

我尝试了几种绕过的方法: [开始代码]

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

这些是选项 -

option=webdriver.ChromeOptions()
option.add_argument('--incognito')
option.add_argument('--disable-extensions')
option.add_argument('--profile-directory=Default')
option.add_argument('--disable-plugins-discovery')

browser=webdriver.Chrome(chrome_options=option)

我发现可能有效的方法:

for page in range(1,int(last_page),1):
    print(base_url+str(page)+base_search)
    browser.get(base_url+str(page)+base_search)
    grabber()
    browser.quit()

(“grabber()”函数是抓取我需要的数据的工作函数

虽然 - 显然一旦你退出浏览器,并试图在同一个会话中重新打开另一个浏览器 - 会话崩溃([WinError 10061])。因为我在浏览器打开时获得了一个新的UA,所以它可能非常棒,而且我仍然可以抓取一个页面,因为我还没被发现。

因此,每个UserAgent都会给我一页刮,然后检测并烧掉它。

在这里探索一下让我改变了“call_function.js”:

function getPageCache(opt_doc, opt_w3c) {
  var doc = opt_doc || document;
  var w3c = opt_w3c || false;
  //var key = '$cdc_asdjflasutopfhvcZLmcfl_';
  var key = '$newplacetostorecache_';
  if (w3c) {
    if (!(key in doc))
      doc[key] = new CacheWithUUID();
    return doc[key];
  } else {
    if (!(key in doc))
      doc[key] = new Cache();
    return doc[key];
  }
}

没用。

所以最后我尝试了这个万不得已的世界末日法:

import time
import string
import random

KEY_LEN = 20

def base_str():
    return (string.ascii_letters+string.digits)
def key_gen():
    keylist = [random.choice(base_str()) for i in range(KEY_LEN)]
    return ("".join(keylist))

for page in range(1,int(last_page),1):
    print(base_url+str(page)+base_search)
    browser.get(base_url+str(page)+base_search)
    grabber()
    option.add_argument('--user-agent=' + key_gen())
    print('user agent updated successfully')

它有效!!今天早上我能够从大约20页开始向前移动大约12页(在加载页面和会话结束之前花了太长时间)

但是几个小时之后它又不起作用了,我抓住了第一页后再次被发现,只是碰到了第二页的CAPTCHA

我还有什么方法可以尝试最终抓住这个网站的数据吗?

0 个答案:

没有答案