【问题标题】:Why did use "selenium" and the page did not go down?为什么使用“selenium”并且页面没有下降?
【发布时间】:2026-02-09 23:35:01
【问题描述】:

为什么你使用“webdriver.PhantomJS”页面没有向下滚动?

我正在抓取 Twitter 网站。

(我们不使用api的原因是为了获取过去的数据。)

但是页面没有向下滚动,所以我无法获得更多推文。

怎么了?如何修复此代码?

另外,我不知道有多少页结束。

我认为您不应该指定一个数字来获取所有内容。 (因为我无法获取所有数据)。

for _ in range(50):
    body.send_keys(Keys.PAGE_DOWN)

有什么好办法吗?

下面的代码是我正在运行的完整代码。

#py3
import requests 
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.PhantomJS('C:\phantomjs-2.1.1-windows/bin/phantomjs')
base_url = u'https://twitter.com/search?l=&q=money%20since%3A2017-07-18%20until%3A2017-07-20&src=typd&lang=ko'
url = base_url

browser.get(url)
time.sleep(1)

body = browser.find_element_by_tag_name('body')

for _ in range(50):
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.2)

tweets=browser.find_elements_by_class_name('tweet-text')

wfile = open("money.txt", mode='w', encoding='utf8')
data={}
i = 1
for tweet in tweets:
    data['text'] = tweet.text
    print(i, ":", data)
    wfile.write(str(data) +'\n')
    i += 1
wfile.close()

【问题讨论】:

  • “我们不使用 api 的原因是为了获取过去的数据”——不确定 Twitter 会不会对此感到高兴。祝你好运。
  • 这个问题已经在这个网站上被问过并回答了很多次。在提出问题之前,您确实需要进行一些更好的搜索……答案也是如此。这些问题应标记为重复。
  • 我也想知道这个网站。提问者不知道如何将其应用于他的代码。看来要等到复制过程了。

标签: python selenium selenium-webdriver web-scraping phantomjs


【解决方案1】:

您可以使用browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") 滚动到网页末尾。这是你想要完成的吗?

要使用它,您需要在抓取推文之前滚动。例如,将您的第一个 for 循环替换为:

for _ in range(50):
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(0.2)

另外,这只是您的第二个循环的提示。您可以使用 enumerate,而不是在循环之外跟踪 i:

for i, tweet in enumerate(tweets):
    data['text'] = tweet.text
    print(i, ":", data)
    wfile.write(str(data) +'\n')

【讨论】:

  • 是的,没错!我想完成网页。但我不明白这个答案。响应代码在代码(句子)和代码之间运行在哪里?我看到了答案,并试图自己解决。但我不能弄错,不是全。 (我只带了 20 条推文,但是通过这句话我可以得到 40 条。但是还剩下很多材料。)
  • 我添加了代码。 for 循环将滚动浏览 50 页推文,如果您需要其他一些结束条件(例如滚动浏览所有推文),您需要在其中编写代码。
  • 谢谢!你的回答对我帮助很大。非常感谢你。如果你不介意,你能得到建议吗?获取 URL 中的所有推文。 (滚动浏览所有这些)关于此代码。粗略的预测了(n)到n的范围,反正我觉得是有极限的。
  • 我确信有一个限制,尽管让这个运行一段时间没有找到一个。不过,有几种方法可以获取所有内容。您可以跟踪文档的高度,并在每次滚动检查高度是否增加时进行比较。如果它是一样的,你就知道你已经到了谷底。在搜索结果的底部可能还会有一些 twitter 加载的元素,在这种情况下,您可以检查该元素是否已加载。
  • 这只是一种猜测方法。我认为这段代码是“全部”、“无限”。哈哈哈。非常感谢您的回复。
最近更新 更多