V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
guolingbing
V2EX  ›  Python

selenium 问题

  •  
  •   guolingbing · 2016-06-10 16:45:30 +08:00 · 2819 次点击
    这是一个创建于 3087 天前的主题,其中的信息可能已经有所发展或是发生改变。
    受导师要求,小的最近在爬百度知道上的问题= =遇到一点小问题,所以来求教大 V 们
    大家都了解百度的尿性,他的防蔽屏手段就是用 js 把搞乱的文字解析回来,具体原理我也没弄明白,于是就想直接解析他的 js ,然后就出现了一点小问题
    当我对于一个问题反复请求时就会触发屏蔽机制,得到如下的字符串

    A. 风化作用——冰川 U 形谷 B 沪弧高旧薨搅胳些供氓. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷

    可见他把字符搞乱了,此外我还发现过语句顺序方面的错误,或者 404 ,而这些在加载 js 的时候页面显示是正常的。

    然后我用 selenium 解析,我尝试 100 次,但是在这 100 次中第一次总是乱码,跟没解析一样,之后都正常

    0 A. 风化作用——冰川 U 形谷 B 沪弧高旧薨搅胳些供氓. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷
    1 A. 风化作用——冰川 U 形谷 B. 侵蚀作用——喀斯特地貌 C. 搬运作用——沙丘、戈壁 D. 沉积作用——河流、峡谷

    但是我总不能在爬的时候对一个链接都访问两次啊,,求各位大神指教啊!!!
    我的代码
    driver = webdriver.PhantomJS(desired_capabilities=dcap)
    for i in range(100):
    driver.get("http://zhidao.baidu.com/question/1819540104107061868.html")
    with open(str(i)+'.html', 'w') as f:
    f.write(driver.page_source)
    try:
    print i, driver.find_element_by_xpath('//*[@id="question-content"]/div/div').text
    except Exception, e:
    print driver.current_url
    time.sleep(1)
    driver.quit()
    9 条回复    2016-06-12 16:17:13 +08:00
    skydiver
        1
    skydiver  
       2016-06-10 16:49:00 +08:00 via iPad
    为什么不能都访问两次
    guolingbing
        2
    guolingbing  
    OP
       2016-06-10 16:50:00 +08:00
    @skydiver 因为我有强迫症啊=,=
    skydiver
        3
    skydiver  
       2016-06-10 16:51:20 +08:00 via iPad
    @guolingbing 有病得治啊(^_^*)
    gxustudent
        4
    gxustudent  
       2016-06-10 20:31:28 +08:00
    如果有强迫症的话建议,进入百度的服务器,看看他的判断逻辑是什么,再先办法绕过。
    mofeiwo
        5
    mofeiwo  
       2016-06-11 13:36:29 +08:00
    怎么简单怎么来啊。
    hantsy
        6
    hantsy  
       2016-06-11 14:17:44 +08:00
    但是在这 100 次中第一次总是乱码,跟没解析一样,之后都正常。。。

    应该可以设置默认页面编码的。
    gonjay
        7
    gonjay  
       2016-06-11 23:38:11 +08:00
    有 docker 版本的可以用,能直接通过 api 来调
    rale
        8
    rale  
       2016-06-12 11:20:39 +08:00
    我是这样理解的,百度的 js 对系统的默认解码算法进行了一下修改,导致在没有 js 的时候默认的解码算法出来的是乱七八糟的文字,所以我觉得你的是 selenium 第一次请求时, js 还未请求下来执行,而第二次有了第一次的缓存,所以未乱码。
    你可以设置 implicitly_wait 多等待一下看下情况,或者你将 webdriver 换成 firefox , 这样你可以通过调试工具看是否有资源未被加载完。
    alexapollo
        9
    alexapollo  
       2016-06-12 16:17:13 +08:00
    代码还是格式化一下, markdown 规则
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2662 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:59 · PVG 22:59 · LAX 06:59 · JFK 09:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.