【发布时间】:2020-11-03 09:45:37
【问题描述】:
背景
我一直在使用 Python 3.8 和 Selenium 构建网络爬虫。在我的两个系统(2012 Macbook Pro 和新的相当强大的 PC 版本)上,它将在大约 2 小时内抓取三个结构相似的网站。对于每个站点,我使用 Firefox Webdriver 从单个产品列表中抓取数据。这些网站的每个列表平均需要大约 3-4 秒,从不超过 5 秒。
问题
我最近将它发送给了我的合作伙伴,以便他可以在他的系统上进行测试(不确定具体型号,但是一台新的中端笔记本电脑)。对于前两个网站,它运行流畅,与我的 PC 非常相似。但是,在第三个网站上,大约 5% 的列表会卡住 10 秒到无限期不等。以下两段代码似乎是我们被耽搁的地方:
try:
item = browser.find_element_by_xpath("//div[@class='outer class']/div[@class='inner class']").text
except NoSuchElementException:
item = ""
以及以下,在所有要访问的 URL 的循环中:
try:
browser.get(url)
except TimeoutException:
continue
我的考虑
我对所有这些都是新手,所以我不确定可能的错误是什么。这是我考虑过的:
他的笔记本电脑不合格:似乎不是问题。这绝对是对我的 Macbook Pro 的改进,它运行良好。此外,三分之二的网站非常适合他。
他的互联网连接不佳:可能是个问题,但比较 Ookla 结果是否足以确定这一点?为什么这只会对一个网站产生影响?
他的浏览器/python 已经过时了:我查过了。他们不是。
他的 PC 上运行的进程太多:我们进行了重置并关闭了所有不必要的程序。好像没什么区别。
我的代码低于标准:这完全有可能。
验证码问题:就我而言,我还没有看到验证码。但由于它在 1) 加载下一个 URL 或 2) 访问该 URL 的第一个数据位时被挂断,这似乎是可能的。
非常感谢任何和所有帮助!
【问题讨论】:
-
还有几件事需要检查/排除:当它卡住时,页面上是否有可用的 xpath? (即你可以在开发工具中看到它) - 你们都有相同的浏览器版本吗?您是否对任何加载时间等待设置了隐式等待,或者通常有任何大的同步时间?你们都使用相同的分辨率吗? (有些网站是响应式的,不同的窗口大小会影响 xpath)
标签: python selenium selenium-webdriver webdriverwait nosuchelementexception