【问题标题】:How to scroll down a twitter page to load next pages and extract the data如何向下滚动 Twitter 页面以加载下一页并提取数据
【发布时间】:2018-07-06 08:32:30
【问题描述】:

我正在尝试在 Twitter 状态下向下滚动 cmets,尝试提取包含所有 cmets 的页面(或至少前 5 个页面)。使用 selenium 驱动程序,但滚动部分不成功,所以我必须手动进行并提取。我正在使用 python 3.6.5 请帮助...

例如对于这条推文 - https://twitter.com/TeamYouTube/status/1012415985184206848 谁能帮我写代码..

我的代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path="...../chromedriver")
driver.get('https://twitter.com/TeamYouTube/status/1012415985184206848')

for i in range(1,10):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

ip = input("Enter y to proceed: ")
if(ip == 'y'):
    page = driver.page_source
    filename = input('Enter file name : ')
    path = 'D:/page_'+filename+'.html'
    f = open(path,'w',encoding='utf-8')
    f.write(page)
f.close()
driver.close()

【问题讨论】:

  • time.sleep(3) 如果未加载所有 cmets 集,则会导致网络连接变慢
  • but not successful with the scrolling part 是什么意思?究竟是什么问题?堆栈跟踪?

标签: python selenium twitter scroll scrape


【解决方案1】:

试试这个:

driver.execute_script("arguments[0].scrollTo(0, document.body.scrollHeight);", driver.findElement(By.id("#permalink-overlay-dialog")));

解释:你必须滚动一个特定的div。为了能够做到这一点,你必须在页面上找到这个元素并且滚动到页面末尾只有这个元素。

第二个建议是使用:

from selenium.webdriver.common.keys import Keys
# locate element and simulate 'END' button press
driver.find_element_by_id("permalink-overlay-dialog").send_keys(Keys.END)

如果不起作用,请尝试使用 ActionChains 进行扩展:

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("permalink-overlay-dialog")
action = ActionChains(driver)
action.move_to_element(element).perform()
element.send_keys(Keys.END)

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多