我是爬行的初学者,在学习时遇到了一个难题。
无论如何,我试图在网络新闻中抓取评论,但我失败了。
这是我在python中使用selenium编写的代码。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome('./chromedriver')
url = 'https://www.etnews.com/20200228000119?mc=em_101_00001'
driver.get(url)
try:
element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')))
comment_list = driver.find_element_by_css_selector('#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')
except:
print('Timeout')
print(comment_list.text)
driver.quit()
我认为chromedriver似乎没有检测到css_selector,因为输出消息总是"超时"。
我不知道为什么网站上的评论是一个普通的网站(https://www.etnews.com/)不能被硒破坏。
我想知道原因。Plz,给我一个很大的帮助。
(附言:我对HTML、CSS有点了解,但对Javascript不太了解(
您正在查看的页面有一个iframe。评论在里面。
为了收集评论,您需要先切换到iframe,然后才能访问iframe中的元素,在您的情况下,是一条评论。我修改了你的脚本,试试这个:
driver = webdriver.Chrome('./chromedriver')
url = 'https://www.etnews.com/20200228000119?mc=em_101_00001'
driver.get(url)
driver.implicitly_wait(5)
# Switch to iframe
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@title='livere']"))
# Search for comment
comment = driver.find_element_by_css_selector('#list > div:nth-child(3) > div.reply-bottom > div.reply-content-wrapper > div.reply-content > p')
print(comment.text)
driver.quit()
我希望它能有所帮助,祝你好运!