python - 如何抓取特定网站的一些评论?(我遇到了一个挑战。)
问题描述
我是爬行的初学者,在学习的过程中遇到了一个难题。
无论如何,我尝试在 web-NEWS 中抓取评论,但失败了。
这是我在 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/)中的评论不能被 selenium 删除。
我想知道原因。LZ,给我一个很大的帮助。
(ps。我知道 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()
我希望它有帮助,祝你好运!
推荐阅读
- python - 如何消除 PIL 和 pygame 图像之间的差异
- python - 使用 Python 批量下载 FTP Urls
- firebase - 没有使用 uvicorn main:app --reload 名为“firebase_admin”的模块
- while-loop - ksh 无法从 while 循环中导出变量
- java - 如何修复此 JDA discord bot 错误?
- java - 如果需要转换内部列表,如何将 EntityA 列表转换为 EntityB 列表?
- google-sheets - 谷歌表格电报
- pandas - 有没有办法强制多索引不将值转换为 DateTimeIndex 并将它们保留为日期?
- python - 在 Keras 中使用自动编码器减少数据集的维度
- javascript - Post Request 中的二进制正文数据已损坏 - API 尝试处理时字节更改