【问题标题】:Web scraping with Selenium not capturing full text [closed]使用 Selenium 进行 Web 抓取未捕获全文 [关闭]
【发布时间】:2021-02-02 12:52:37
【问题描述】:

我正在尝试使用 Selenium/Python 从链接列表中挖掘大量文本。

在这个例子中,我只抓取了其中一个页面并成功抓取了全文:

    page = 'https://xxxxxx.net/xxxxx/September%202020/2020-09-24'

driver = webdriver.Firefox()

driver.get(page)

elements = driver.find_element_by_class_name('text').text

elements

然后,当我尝试遍历整个链接列表(此页面上的所有日常链接:https://overrustlelogs.net/Destinygg%20chatlog/September%202020)(使用与从单个页面抓取文本相同的方法)时,它不是抓取全文:

for i in tqdm(chat_links):
driver.get(i)
#driver.implicitly_wait(200)
elements = driver.find_element_by_class_name('text').text
#elements = driver.find_element_by_xpath('/html/body/main/div[1]/div[1]').text
#elements = elements.text
temp={'elements':elements}
chat_text.append(temp)

driver.close()

聊天文本

我的想法是它可能没有机会加载整个内容,但它可以在单个页面上运行。此外,driver.get 方法似乎意味着加载整个给定页面。

有什么想法吗?谢谢,非常感谢。

【问题讨论】:

  • 我建议使用 requests 或 driver.page_source 离线工作(我的意思是 html 解析)
  • @CeliusStingher 你能告诉我那会是什么样子吗?谢谢
  • driver.get(url) 之后可以使用source = driver.page_source。之后,您可以使用 BeautifulSoup 解析它并使用 `.find_all('text') ,这将返回一个列表,其中包含 html 中所有出现的文本
  • @CaseyCushing : 请发布相关的 HTML 和您的预期输出以获得更好的响应?
  • @ggorlen 我已经在此页面上获得了每天的日志链接。我正在尝试遍历它们并获取文本。这有帮助吗?谢谢! overrustlelogs.net/Destinygg%20chatlog/September%202020

标签: python selenium web-scraping css-selectors webdriverwait


【解决方案1】:

页面延迟加载,您需要滚动页面并在列表中添加数据。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome()
driver.get("https://overrustlelogs.net/Destinygg%20chatlog/September%202020/2020-09-30")
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".text>span")))
height=driver.execute_script("return document.body.scrollHeight")
data=[]
while True:
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    time.sleep(1)
    for item in driver.find_elements_by_css_selector(".text>span"):
        if item.text in data:
            continue
        else:
            data.append(item.text)

    lastheight=driver.execute_script("return document.body.scrollHeight")
    if height==lastheight:
        break
    height=lastheight

print(data)

【讨论】:

  • 谢谢!但我已经列出了链接(每天都有一个链接:overrustlelogs.net/Destinygg%20chatlog/September%202020/…)。我遇到的问题是遍历这些并获取全文,它只是获取部分内容。
  • 该页面是延迟加载的,您必须移动每个页面然后捕获数据。
  • 是的,但这很令人困惑,因为当我只从一页中获取文本时,它会很好地获取所有文本。只有当我遍历所有链接时,它才会获得全文。我应该使用 WebDriverWait 吗?为什么它会加载一页而不是循环时加载?
  • 您需要使用无限循环来滚动页面。并抓取包含的每个跨度标签,直到到达页面底部。
  • 如果您能帮我解决这个问题,我将不胜感激。请帮忙?非常感谢!
猜你喜欢
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2017-01-24
  • 2018-12-10
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多