Python3 + Selenium + Headless Ch

作者: 老胡聊聊天 | 来源:发表于2018-04-09 01:23 被阅读1648次

    1.requests受挫

    之前用requests中间搞了一个简书的爬虫,启动两个py进程,一个爬url,一个读内容,用了一阵子,挺嗨的。

    今天有个同事想让我帮他爬一下58同城某频道的电话号码,用于营销,看了一下58,感觉用跟简书那个很像,就打算基于现有的微调一下。

    然后发现问题了,频繁请求之后会有js的滑动验证码,尝试模拟各种header,也没成功。


    image.png

    但奇怪的是如果用浏览器手动刷新,出现验证码的几率就小很多(也会出现,不过比直接requests好不少),暴力无脑F5,很小几率出现一次。

    2.考虑使用selenium+headless chrome

    所以考虑用selenium+phantomjs模拟一下:
    1、模拟真实的浏览器环境,可以很少出现验证码
    2、如果出现验证码,应该可以模拟滑动关掉它

    网上找了demo源码搞起来一看,居然提示phantomjs已经deprecated了,查了一下果然,现在大家都开始抛弃phantomjs用headless了,有chrome和firefox两个版本,chrome的js引擎还是很给力的,所以用chrome。

    3.安装

    下载安装chromedriver,支持windows/linux/mac:
    https://sites.google.com/a/chromium.org/chromedriver/downloads

    安装python、selenium这些就不说了。

    4.coding

    然后就开始coding了——以下只是部分简单代码

    from selenium import  webdriver
    
    chromedriverpath = 'C:/Users/hx/AppData/Local/Google/Chrome/Application/chromedriver.exe'
    driver = webdriver.Chrome(chromedriverpath)
    
    #打开目标网页
    driver.get("http://bj.58.com/jiajiao/pn1")
    
    #获取网页标题
    title = driver.title
    
    #获取html
    html = driver.page_source
    
    #其他api请自行百度
    #...
    
    driver.close()
    

    跟beatifulsoap类似,driver也有各种可以操作dom的方法,而且比beatifulsoap还要强大,不过我并不想把之前的代码用driver重新写一遍,所以直接通过driver.page_source获取了html源代码,然后交给beatifulsoap去处理了。

    #用beatifulsoap格式化
    soap = BeautifulSoup(html)
    
    #用class获取链接dom
    links = soap.find_all(class_="t ac_linkurl")
    
    #循环获取链接地址和标题
    for i,link in enumerate(links):
        target_url = link.get("href")
        title = link.text
    
        #mysql部分略
    

    5.效果

    写完之后测试了一下,启动的时候会稍微卡顿一下,因为要启动浏览器,然后就快了。
    不间歇的访问,差不多访问50次左右会出现一下验证码,加个2秒延迟,跑了几轮,都没有再看到验证码出现了,相当于偷懒绕过了验证码。

    6.后续

    以后如果有必要的话,再研究怎么处理验证码。有兴趣的可以一起探讨。

    相关文章

      网友评论

      • 道法自然FOAF:😂滑动验证码,与网易云的相似,58做了改进,页面上不是直接的图片格式,爬的量大就用scrapy+redis,或者用scrapy+phantomjs异步
      • 右哼哼丨左哼哼:如果能加入图片演示,效果会更好一些,譬如js验证码的样子,或者代码截图等
        老胡聊聊天:@右哼哼丨左哼哼 哈哈,有道理,加了个验证码的样例图,就是那种滑动拼成一个图的,网上也有很多方法可以破,不过我还没研究过。。加油,恩!

      本文标题:Python3 + Selenium + Headless Ch

      本文链接:https://www.haomeiwen.com/subject/wkyvhftx.html