Python selenium chrome 使用代理做爬虫的问题,如何判断获取的页面正常 - V2EX
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
bmos
V2EX    Python

Python selenium chrome 使用代理做爬虫的问题,如何判断获取的页面正常

  •  
  •   bmos 2018-08-24 09:33:10 +08:00 5311 次点击
    这是一个创建于 2611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,IP 代理不是 100%靠谱。经常会出现未连接到网络等错误。
    同一类型的网页可以通过判断某个元素是否加载完成判断。
    那么不同类型的网页如何判断呢?
    谢谢
    14 条回复    2018-08-30 16:14:57 +08:00
    princelai
        1
    princelai  
       2018-08-24 09:45:54 +08:00 via Android   1
    selenium 有个 EC,BY,用这两个关键词搜,有例子
    bobobo80
        2
    bobobo80  
       2018-08-24 09:49:36 +08:00   1
    selenium 应该是没有办法返回类似 requests 的 status_code 的,所以需要自己来判断一下返回页面中是否包含正常的元素,elem = driver.find_element_by_id("XXX")。需要试出一些验证码,429,404 等页面的状态,加入状态判断。
    bmos
        3
    bmos  
    OP
       2018-08-24 09:51:26 +08:00
    @princelai 这应该是显性等待某个元素出现,我希望抓不同来源的页面不一定有同样的元素。难道把 chrome 报错页面的元素全部枚举,判断下有没有出现,主要困惑是不知道报错页面总共有多少种类型。
    zeR0f1re
        4
    zeR0f1re  
       2018-08-24 09:54:48 +08:00   1
    @bmos 你说的报错页面难道不是返回的 http 状态码吗?我也在练习 selenium 相关的东西,希望能从你这贴了解一些问题,说错的地方多包涵
    zeR0f1re
        5
    zeR0f1re  
       2018-08-24 09:56:22 +08:00
    @bmos 刚想起来还有验证页面这样的,要是这种情况判断状态码也不行
    bmos
        6
    bmos  
    OP
       2018-08-24 10:05:08 +08:00
    @zeR0f1re :类似于这样:
    无法访问此网站
    www.google.com 的响应时间过长。
    请试试以下办法:

    检查网络连接
    检查代理服务器和防火墙
    运行 Windows 网络诊断
    ERR_CONNECTION_TIMED_OUT

    @bobobo80 谢谢。
    princelai
        7
    princelai  
       2018-08-24 10:30:53 +08:00
    @bmos 你不同页面的元素获取在一个函数内?每个页面分别用一个函数或方法才是合理的结构吧,然后每个函数分别判断某个元素是否加载。
    nature91
        8
    nature91  
       2018-08-24 10:35:01 +08:00   1
    用等待啊 超过时长响应就跳出去 至于后续怎么操作可以自己定义
    princelai
        9
    princelai  
       2018-08-24 10:35:12 +08:00
    ```
    browser = webdriver.Firefox(firefox_optiOns=generate_option())
    browser.get(self.baseurl)
    locator = (By.CLASS_NAME, 'kr_article_list')
    try:
    WebDriverWait(browser, 15, 1).until(EC.presence_of_element_located(locator))
    except:
    logging.info('error:element of news list do not presence.')
    exit(1)
    ```

    给你个我自己的例子,我是只获取一个页面,所以判断一个元素是否出现就可以了,你可以建一个字典,key 是网址前缀,value 是元素名,然后用正则表达式匹配就可以实现多匹配了么
    bmos
        10
    bmos  
    OP
       2018-08-24 10:45:16 +08:00
    @princelai 我是把解析页面做了单独的线程,这里有单独函数判断页面元素是否存在。selenium 只负责打开页面,然后把页面源码保存到队列中。但是 IP 代理失效时,chrome 报错页面也是网页,这时候就把报错页面的源码保存下来了。我需要做的是检测 IP 代理失效的情况,这时候就更换代理。
    bmos
        11
    bmos  
    OP
       2018-08-24 10:54:13 +08:00
    @princelai 谢谢,字典是很好的思路。
    ClutchBear
        12
    ClutchBear  
       2018-08-24 11:17:59 +08:00
    我的方法是
    用 selenium 的 chrome 获取 cookies,然后 requests 用这个 cookies 来爬取页面.
    一个 cookies 可以用多次, 如果 ip 超时或者获取不到 html,
    就换一个 ip, 重新获取 cookies.
    bmos
        13
    bmos  
    OP
       2018-08-24 11:47:53 +08:00
    @ClutchBear 主要是有些页面元素动态加载的。才用 selenium 方便一点。
    sess222
        14
    sess222  
       2018-08-30 16:14:57 +08:00
    @ClutchBear 哎,用 SELENIUM 登登天猫国际感受下恶意吧哈哈,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     996 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:12 PVG 03:12 LAX 12:12 JFK 15:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86