无限加载从新闻网站上抓取头条新闻

Posted

技术标签:

【中文标题】无限加载从新闻网站上抓取头条新闻【英文标题】:scraping headlines from news website with infinite loading 【发布时间】:2021-03-14 04:21:40 【问题描述】:

我想从这个网站上抓取头条新闻:https://www.marketwatch.com/latest-news?mod=top_nav

我需要加载较早的新闻,所以点击蓝色按钮“查看更多”是必要的。

我创建了这段代码,但没有用:

from bs4 import BeautifulSoup
import time
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
u = 'https://www.marketwatch.com/latest-news?mod=top_nav' #US Business


driver = webdriver.Chrome(executable_path=r"C:/chromedriver.exe")
driver.maximize_window()
driver.get(u)
time.sleep(10)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME,'close-btn'))).click()
time.sleep(10)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
for i in range(3):
        element =WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'component.component--module.more-headlines div.group.group--buttons.cover > a.btn.btn--secondary.js--more-headlines)))
        driver.execute_script("arguments[0].scrollIntoView();", element)
        element.click()
        time.sleep(5)
        driver.execute_script("arguments[0].scrollIntoView();", element)

        print(f'click i done')
soup = BeautifulSoup(driver.page_source, 'html.parser')

driver.quit()

它返回此错误:

raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

【问题讨论】:

【参考方案1】:

这样的东西会更可靠:

for i in range(3):
  driver.execute_script('''
    document.querySelector('a.js--more-headlines').click()
  ''')
  time.sleep(1)

请注意,当您从 javascript 中点击时,您不必滚动到视图中

【讨论】:

以上是关于无限加载从新闻网站上抓取头条新闻的主要内容,如果未能解决你的问题,请参考以下文章

GNE: 4行代码实现新闻类网站通用爬虫

GNE v0.1正式发布:4行代码开发新闻网站通用爬虫

Python 教你 4 行代码开发新闻网站通用爬虫

如何以编程方式搜索 CNN 头条新闻的存档?

原创 | 一点资讯分类新闻爬虫及其文本挖掘

新闻网站电脑版带手机版源码,仿东方头条,今日头条,搜狐自媒体网站帝国cms定制