我想从网站抓取一些数据。要手动访问目标数据,我需要登录然后单击某些按钮以最终获取目标html页面。目前,我正在使用Python request
库来模拟此过程。我这样做:
ss = requests.session()
#log in
resp = ss.post(url, data = (('username', 'xxx'), ('password', 'xxx')))
#then send requests to the target url
result = ss.get(taraget_url)
然而,我发现最后的请求没有归还给我我想要的东西。
所以我改变了方法。我下载所有网络流量并查看上一个请求的标头和cookie。我发现这里有一些内容在每次登录会话中都有所不同,比如sessionid
和其他一些变量。因此,当在响应中返回这些varibales时,我会追溯,然后通过发送相应的请求再次获取值。在此之后,我构建了正确的标头和cookie,然后发送这样的请求:
resp = ss.get(target_url, headers = myheader, cookies = mycookie)
但是,它仍然没有给我任何回报。有人可以帮忙吗?
答案 0 :(得分:1)
前段时间我在同一条船上,我最终转而尝试使用Selenium,这让生活更加轻松。 (pip install selenium
)。然后,您可以登录网站,然后导航到所需的网站:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
website_with_logins = "https://website.com"
website_to_access_after_login = "https://website.com/page"
driver.get( str(website_with_logins) )
username = driver.find_element_by_name("username")
username.send_keys("your_username")
password = driver.find_element_by_name("password")
password.send_keys("your_password")
password.send_keys(Keys.RETURN)
driver.get( str(website_to_access_after_login) )
一旦你加载website_to_access_after_login
(你会看到它出现),你就可以获得html,只需使用
html = driver.page_source
希望这有帮助。