Python网站登录和抓页(延迟?)

时间:2017-05-24 14:58:52

标签: python python-3.x login web-scraping python-requests

我试图抓一个登录页面后面的网页 我知道如何使用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,但其他版本的解决方案也可以。

1 个答案:

答案 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()