2017-05-24 127 views
0

我试图抓取登录页面后面的网页。
我知道如何使用Python的requests.session()登录。
但是,当我检索网页时,它似乎没有完全加载。
我收到的html与通过浏览器登录时显示的html不同。Python网站登录和刮页(延迟?)

我的代码是这样的:

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)postget之间,但这并不能解决问题。
我猜我需要session.get()等待几秒钟才能得到实际的结果,但session.get()不允许。

有没有人知道如何做到这一点,或者可以给我怎样的建议,请继续?
我使用Python 3.6,但其他版本的解决方案也没关系。

+0

'R = requests.get(url_login,follow_redirects = TRUE)'做这个产量的任何不同的结果?你可以用'r.url'来检查重定向,这与通过浏览器访问时的值是否相同? – RandomHash

+0

有时,html内容根据'User-Agent'而不同,尝试将其添加到'headers'。另外,你有没有检查过你的cookies,即:'session.cookies.get_dict()'? –

+0

@ 0x52-0x75-0x63-0x79'follow_redirects'似乎不是一个有效的参数。我得到这个错误:'File“C:\ Python \ Python36 \ lib \ site-packages \ requests \ sessions.py”,第501行,获得 返回self.request('GET',url,** kwargs) TypeError:request()得到了一个意外的关键字参数'follow_redirects'' –

回答

0

例如(Linkedin)。 您必须下载ChromeDriver(或其他驱动程序),看看硒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()