【发布时间】:2011-12-18 08:31:01
【问题描述】:
我整天都在谷歌上搜索这个问题,但没有找到答案,所以如果这个问题已经得到解答,请提前道歉。
我正在尝试从大量不同的网站获取所有可见文本。原因是我想处理文本以最终对网站进行分类。
经过几天的研究,我认为 Selenium 是我最好的机会。我找到了一种使用 Selenium 抓取所有文本的方法,不幸的是,同一文本被多次抓取:
from selenium import webdriver
import codecs
filen = codecs.open('outoput.txt', encoding='utf-8', mode='w+')
driver = webdriver.Firefox()
driver.get("http://www.examplepage.com")
allelements = driver.find_elements_by_xpath("//*")
ferdigtxt = []
for i in allelements:
if i.text in ferdigtxt:
pass
else:
ferdigtxt.append(i.text)
filen.writelines(i.text)
filen.close()
driver.quit()
for 循环内的if 条件试图消除多次获取相同文本的问题 - 但是,它不能按计划在某些网页上工作。 (这也让脚本慢了很多)
我猜我的问题的原因是 - 在询问元素的内部文本时 - 我还得到了嵌套在相关元素内的元素的内部文本。
有没有办法解决这个问题?是否有某种主元素我抓住了内部文本?或者完全不同的方式可以让我达到我的目标?任何帮助将不胜感激,因为我对此一无所知。
编辑:我使用 Selenium 而不是 Mechanize and Beautiful Soup 的原因是因为我想要 JavaScript 提供的文本
【问题讨论】:
-
lynx和w3c都可以通过 CLI 执行此操作。 -
你的 xpath 不应该是
//body/text()之类的吗? -
您的代码似乎有明显的错误:
for i in allelements: if i.allelements in ferdigtxt: pass如果i在allelements中,那么i.allelements可能是一个错误。 -
另一个观察结果是,您似乎在比较它们之间的整个文本节点,并且在几乎 100% 的情况下,这种比较可能是错误的。如果您真的想比较使用的单词,那么@unutbu 的解决方案提供了这一点。请编辑您的问题并明确定义问题。
-
@Blender:
lynx和w3c支持 JavaScript 吗? (我对此表示怀疑)。
标签: python xpath webpage selenium-webdriver