selenium 问题

2016-06-10 16:45:30 +08:00
 guolingbing
受导师要求,小的最近在爬百度知道上的问题= =遇到一点小问题,所以来求教大 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()
2819 次点击
所在节点    Python
9 条回复
skydiver
2016-06-10 16:49:00 +08:00
为什么不能都访问两次
guolingbing
2016-06-10 16:50:00 +08:00
@skydiver 因为我有强迫症啊=,=
skydiver
2016-06-10 16:51:20 +08:00
@guolingbing 有病得治啊(^_^*)
gxustudent
2016-06-10 20:31:28 +08:00
如果有强迫症的话建议,进入百度的服务器,看看他的判断逻辑是什么,再先办法绕过。
mofeiwo
2016-06-11 13:36:29 +08:00
怎么简单怎么来啊。
hantsy
2016-06-11 14:17:44 +08:00
但是在这 100 次中第一次总是乱码,跟没解析一样,之后都正常。。。

应该可以设置默认页面编码的。
gonjay
2016-06-11 23:38:11 +08:00
有 docker 版本的可以用,能直接通过 api 来调
rale
2016-06-12 11:20:39 +08:00
我是这样理解的,百度的 js 对系统的默认解码算法进行了一下修改,导致在没有 js 的时候默认的解码算法出来的是乱七八糟的文字,所以我觉得你的是 selenium 第一次请求时, js 还未请求下来执行,而第二次有了第一次的缓存,所以未乱码。
你可以设置 implicitly_wait 多等待一下看下情况,或者你将 webdriver 换成 firefox , 这样你可以通过调试工具看是否有资源未被加载完。
alexapollo
2016-06-12 16:17:13 +08:00
代码还是格式化一下, markdown 规则

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

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

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

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

© 2021 V2EX