淘宝天猫评论爬取,简单的办法完成滑动验证

淘宝评论爬取 教你如果自动滑动验证

  • 一. 背景:
  • 二.解决selenium登录问题
  • 三.解决验证码问题

一. 背景:

最近在准备一个关于文本情感分析的分享,首先想到使用淘宝的评论,由于淘宝以分类好好评差评,同时也打上了印象的标签,比较适合与做情感分析的训练样本。
爬虫的工具使用:selenium ,主要是由于其方便模拟点击。当然如果有其他模拟工具都可以用,原理上是差不多的。

二.解决selenium登录问题

由于selenium若新开窗口会出现cookie未保存的情况,导致每次进入再次登录,这会造成一些不必要的麻烦.解决的办法是让selenium使用以开启的浏览器爬去,此浏览器事先已经登录了淘宝.具体的步骤如下:
1.命令行下开启google-chrome,之后登录淘宝以让下一步的窗口继承cookie

google-chrome  --remote-debugging-port=9222 --user-data-dir="."

2.设置selenium使用此google-chrome浏览器

    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress","127.0.0.1:9222")
    #免爬图片
    #chrome_options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) 
    chrome_driver = "/usr/bin/chromedriver"
    driver = webdriver.Chrome(chrome_driver,chrome_options=chrome_options)

三.解决验证码问题

查询的若较为频繁,就会收到如下图这样的验证消息,我在解决这个验证上花了一点时间,主要是对selenium对切换iframe上不了解,找寻滑块上总是出现报错

driver.find_element_by_xpath("//*[@id='nc_1_n1t']/span")

element not found nc_1_n1t

此验证窗口为一个新的iframe,
淘宝天猫评论爬取,简单的办法完成滑动验证_第1张图片
需要先进入iframe找到滑块,完成点击,另外需要注意部分有的时候淘宝检测到为爬虫即使划过去了也会报错如下.所以可能需要多次验证.
淘宝天猫评论爬取,简单的办法完成滑动验证_第2张图片

具体代码如下:

#处理验证码
def handle_vertify(driver):
    iframe = driver.find_elements_by_xpath('//div[@class="sufei-dialog-content"]//iframe')
    #iframe = driver.find_elements_by_xpath('//div[@class="sufei-tb-dialog-content sufei-tb-overlay-content"]//iframe') 
    print(iframe)
    if len(iframe) == 0:
        return
    driver.switch_to_frame(iframe[0])
    trys = 0
    #需要多次尝试
    while trys < 5:
        trys += 1
        slider=driver.find_element_by_xpath("//*[@id='nc_1_n1t']/span")#需要滑动的元素
        ActionChains(driver).click_and_hold(slider).perform()
        #大概滑动300就可以通过验证
        trace = [10,20,30,40,40,40,30,30,30,30]
        for i in range(len(trace)):
            ActionChains(driver).move_by_offset(xoffset=trace[i],yoffset=0).perform()
        ActionChains(driver).release().perform()
        #move_to_gap2(driver,slider,get_track(270))
        refresh = driver.find_elements_by_xpath("//span[@class='nc-lang-cnt']/a")
        if len(refresh) > 0:
            refresh[0].click()
            continue
        time.sleep(random.randint(2,5))
        if driver.page_source.find("nc_1_n1t") == -1:
            driver.switch_to.parent_frame()
            break
    if trys >= 5:
        print("[Error]:vertify code error")
    else:
        print("[Success]:vertify code error")

你可能感兴趣的:(爬虫)