gpt4 book ai didi

python - 使用 Selenium 从网页中获取所有可见文本

转载 作者:技术小花猫 更新时间:2023-10-29 12:51:07 26 4
gpt4 key购买 nike

我一整天都在谷歌上搜索这个问题,但没有找到答案,所以如果这个问题已经得到解答,请提前致歉。

我正在尝试从大量不同的网站获取所有可见文本。原因是我想处理文本以最终对网站进行分类。

经过几天的研究,我认为 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 和 Beautiful Soup 的原因是因为我想要 JavaScript 渲染文本

最佳答案

使用 lxml ,你可以尝试这样的事情:

import contextlib
import selenium.webdriver as webdriver
import lxml.html as LH
import lxml.html.clean as clean

url="http://www.yahoo.com"
ignore_tags=('script','noscript','style')
with contextlib.closing(webdriver.Firefox()) as browser:
browser.get(url) # Load page
content=browser.page_source
cleaner=clean.Cleaner()
content=cleaner.clean_html(content)
with open('/tmp/source.html','w') as f:
f.write(content.encode('utf-8'))
doc=LH.fromstring(content)
with open('/tmp/result.txt','w') as f:
for elt in doc.iterdescendants():
if elt.tag in ignore_tags: continue
text=elt.text or ''
tail=elt.tail or ''
words=' '.join((text,tail)).strip()
if words:
words=words.encode('utf-8')
f.write(words+'\n')

这似乎获得了 www.yahoo.com 上的几乎所有文本,除了图像中的文本和一些随时间变化的文本(可能使用 javascript 完成并刷新)。

关于python - 使用 Selenium 从网页中获取所有可见文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947579/

26 4 0
文章推荐: python - 用 Python 编写的 HTML 缩进器
文章推荐: c# - Html 敏捷包/C# : how to create/replace tags?
文章推荐: android -