为什么要使用" selenium"而且页面没有下降?

时间:2017-07-20 15:50:43

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

你为什么使用" 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()

1 个答案:

答案 0 :(得分: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)

另外,只是第二个循环的提示。您可以使用枚举:

,而不是在循环外跟踪i
for i, tweet in enumerate(tweets):
    data['text'] = tweet.text
    print(i, ":", data)
    wfile.write(str(data) +'\n')