我试图抓一个登录页面后面的网页
我知道如何使用Python requests.session()
登录
但是,当我检索网页时,它似乎没有完全加载
我收到的html与通过浏览器登录时显示的html不同。
我的代码是:
session = requests.session()
login_data = {'email': 'myemailaddress', 'password': 'mypassword'}
session.post(url_login, login_data)
r = session.get(url_homepage)
soup = bs(r.content, 'lxml')
print(soup.prettify())
我得到的印象是,在url_homepage
我已经尝试在time.sleep(10)
和post
之间加入get
,但这并不能解决问题。
我猜测我需要让session.get()
在实际获取之前等待几秒钟,但session.get()
不允许这样做。
有人知道怎么做,或者可以给我一些关于如何进行的建议吗? 我使用的是Python 3.6,但其他版本的解决方案也可以。
答案 0 :(得分:0)
例如(Linkedin)。 您必须下载ChromeDriver(或其他驱动程序),查看selenium documentation
import time
from selenium import webdriver
from bs4 import BeautifulSoup
def main():
username = 'my_login'
password = 'my_pass'
linkedin = 'https://www.linkedin.com/uas/login'
#sign in
browser = webdriver.Chrome()
browser.get(linkedin)
browser.find_element_by_name("session_key").send_keys(username)
browser.find_element_by_name("session_password").send_keys(password)
browser.find_element_by_name("signin").click()
time.sleep(3)
#scrape
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
print(soup)
#log out
browser.find_element_by_id("nav-settings__dropdown-trigger").click()
browser.find_element_by_link_text("Sign out").click()
browser.quit()
if __name__ == '__main__':
main()