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

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

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

@bobobo80 谢谢。
princelai
2018-08-24 10:30:53 +08:00
@bmos 你不同页面的元素获取在一个函数内?每个页面分别用一个函数或方法才是合理的结构吧,然后每个函数分别判断某个元素是否加载。
nature91
2018-08-24 10:35:01 +08:00
用等待啊 超过时长响应就跳出去 至于后续怎么操作可以自己定义
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
2018-08-24 10:45:16 +08:00
@princelai 我是把解析页面做了单独的线程,这里有单独函数判断页面元素是否存在。selenium 只负责打开页面,然后把页面源码保存到队列中。但是 IP 代理失效时,chrome 报错页面也是网页,这时候就把报错页面的源码保存下来了。我需要做的是检测 IP 代理失效的情况,这时候就更换代理。
bmos
2018-08-24 10:54:13 +08:00
@princelai 谢谢,字典是很好的思路。
ClutchBear
2018-08-24 11:17:59 +08:00
我的方法是
用 selenium 的 chrome 获取 cookies,然后 requests 用这个 cookies 来爬取页面.
一个 cookies 可以用多次, 如果 ip 超时或者获取不到 html,
就换一个 ip, 重新获取 cookies.
bmos
2018-08-24 11:47:53 +08:00
@ClutchBear 主要是有些页面元素动态加载的。才用 selenium 方便一点。
sess222
2018-08-30 16:14:57 +08:00
@ClutchBear 哎,用 SELENIUM 登登天猫国际感受下恶意吧哈哈,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/482741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX