Python 如果一个页面被重定向到另一个页面,如何刮取该页面

Python 如果一个页面被重定向到另一个页面,如何刮取该页面,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我正试图从https://www.memrise.com/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms,但您可以看到,当它通过web驱动程序加载链接时,它会自动将其重定向到登录页面。在我登录之后,它会直接进入我想刮的页面,但是BeautifulSoup会一直刮着登录页面 我如何使它如此漂亮?汤刮到了我想要的页面,而不是登录页面 我已经试过在它给我时间登录之前

我正试图从
https://www.memrise.com/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms
,但您可以看到,当它通过web驱动程序加载链接时,它会自动将其重定向到登录页面。在我登录之后,它会直接进入我想刮的页面,但是BeautifulSoup会一直刮着登录页面

我如何使它如此漂亮?汤刮到了我想要的页面,而不是登录页面

我已经试过在它给我时间登录之前放置一个
time.sleep()
,但这也不起作用

soup = BeautifulSoup(requests.get("https://www.memrise.com/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms").text, 'html.parser')
while True:
    front_half = soup.find_all(class_='qquestion qtext')
    print(front_half)
    time.sleep(1)

您可能需要的是一个带有
请求的持久会话。可能正好满足你的需要。总体思路很简单:

  • 您打开一个会话并向网站发送请求
  • 发送登录post请求,以便让您登录
  • 使用同一会话查询url 您需要了解登录post请求的结构以及传递的数据(用户名、电子邮件等),并使用该数据创建一个
    json

    导入请求
    url='1〕https://www.memrise.com/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms'
    会话=请求。会话()
    登录\u数据={
    “用户名”:,
    “csrfmiddlewaretoken”:,
    “密码”:,
    “下一步”:“/course/2021573/french-1-145/garden/speed\u review/?source\u element=ms\u mode&source\u screen=eos\u ms”
    }
    session.get(url)#这将重定向您,并可能加载一些初始cookies信息
    r=会话。post('https:///login.py,登录名(U数据)
    如果r.status_code==200:#如果接受请求
    res=session.get(url)
    soup=BeautifulSoup(res.text,'html.parser')
    ##(…)你的刮码
    
    您可以使用selenium。只需编写browser.get(“website.you.need”) 这将带您进入登录页面。手动登录一次。现在添加一个for循环链接,您需要在同一程序中刮取同一网站的,这样浏览器就不会关闭,从而不会丢失会话。因此,在程序没有结束之前,您可以访问您想要访问的链接

    您的代码可能如下所示

    from selenium import webdriver 
    import time 
    
    
    browser = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver") 
    browser.get('abc.com/page=1')
    # this link will redirect you to the login page. Enter your credentials manually. And wait for logging in successfully. 30 seconds would be enough
    time.sleep(30)
    
    links = ["abc.com/page=1","abc.com/page=2"]
    
    for j in range(len(links)):
        link = links[j]
    
        browser.get(link)
        #this wont need login as you are not closing the 
        time.sleep(5)
        html = browser.page_source
        # do your scraping or save the html sourcecode somewhere and scrape it later.
    
    browser.close()
    

    如果它是在服务器端处理的(在我看来),那么你什么都做不了,因为服务器不会提供任何东西。除非您发送登录cookie/。。请你再解释一下,我不明白你的意思