我已经搜索了一整天都没有找到答案,所以如果已经找到答案,请提前道歉。
我正在尝试从大量不同的网站获取所有可见的文本。原因是我想处理文本,以便最终对网站进行分类。
经过几天的研究,我决定硒是我最好的机会。我找到了一种方法来抓取所有的文本,使用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而不是机械化和美观的Soup,是因为我想要JavaScript文本
使用lxml,您可以尝试以下方法:
这似乎得到了www.yahoo.com上几乎所有的文本,除了图像中的文本和一些随时间变化的文本(可能使用javascript和refresh完成)。
以下是@unutbu's answer的变体:
我把你的任务分成两部分:
代码只通过缓存连接。您可以在一个进程中获取页面并在另一个进程中提取文本,或者使用不同的算法延迟以后执行。
相关问题 更多 >
编程相关推荐