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/。。请你再解释一下,我不明白你的意思