python如何获取网页的所有内容动态
问题描述:
使用selenium.webdriver
登录Facebook并获取公众人物的HTML页面(如https://www.facebook.com/DonaldTrump/?fref=ts)可能需要从该页面抓取发布的内容。python如何获取网页的所有内容动态
我发现,使用selemium.webdriver
,只得到网页的内容在当前屏幕中,例如,当登录Facebook和想要得到的https://www.facebook.com/DonaldTrump/?fref=ts的所有网页内容,我得到的仅仅是几个后在当前屏幕中,但实际上,页面https://www.facebook.com/DonaldTrump/?fref=ts中的帖子(内容)非常多。
我会滚动鼠标滚轮这么多次,网页可以达到它的底部,但现在我得到的是只有在当前屏幕 有限的内容,你可以告诉我解决的方法,或者告诉我其他方法或除了硒库,可以登录facebbook并获得目标页面的所有内容(不仅在当前屏幕上的内容)
,我写的程序是:
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
FACEBOOK_URL_PREFIX = "https://www.facebook.com/"
def web_public_figure(self,p_figure_name):
#delete " " in p_figue_name
p_figure_name_arr = p_figure_name.split(" ")
p_figure_name_str = "".join(p_figure_name_arr)
params = r"/?fref=ts"
p_f_web_url = FACEBOOK_URL_PREFIX + p_figure_name_str + params
# log in the website
login_url = "https://www.facebook.com/login.php?login_attempt=1&lwv=110"
glovar.webdriver_browser = webdriver.Chrome()
glovar.webdriver_browser.get(login_url)
# user credentials
user = glovar.webdriver_browser.find_element_by_css_selector("#email")
user.send_keys('[email protected]')
password = glovar.webdriver_browser.find_element_by_css_selector("#pass")
password.send_keys('expectopatronum')
login = glovar.webdriver_browser.find_element_by_css_selector("#loginbutton")
login.click()
# the login maybe fail, return to the login page
if "login" in glovar.webdriver_browser.current_url:
glovar.webdriver_browser.close()
time.sleep(10)
glovar.webdriver_browser.get(p_f_web_url)
html_p_f_page = glovar.webdriver_browser.page_source
return html_p_f_page
p_figure_name
为"Donald trump"
,但"html_p_page"
只是整个页面的一部分: https://www.facebook.com/DonaldTrump/?fref=ts,(only当前屏幕中的部分)。
似乎在页面上有按钮"see all"
,你能告诉我怎么去这样一个网页上的所有内容,也许使用图书馆以外硒
答
您可以直接硒做到这一点。这只是以编程方式向下滚动页面的问题。这个问题被称为无限滚动,广泛描述在this answer。
基本上,你只需要让一个页面向下滚动一个高度值几次。像这样的东西应该这样做,但我建议你阅读整个链接的帖子。
for i in range(1,100):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
给Jahooo,请你直接修改我的程序,因此,我可以清楚地看到它 – bin