【python爬虫】模拟登录,保持登录状态,获取XPATH

博主分享学习Python爬虫时遇到的问题。第一个项目爬取校园课程表,难点有模拟登陆后继续爬取信息、维持网站登录状态及课表分布爬取;第二个项目爬取网站信息,难点在于处理动态数据,使用webdriver可解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习python爬虫,总结一下遇到的问题。
(菜鸡一个,还望大佬指点。其中许多代码借鉴了别人博客中分享的代码。)

第一个项目是爬取校园的课程表,难点主要在于模拟登陆之后如何继续从登陆之后的网页中爬取信息,(因为我在学习的时候只学习了用request里的基础方法登陆,但是那样会导致登陆之后依然要重新登陆网页,查阅各个博客之后发现使用webdriver更为方便)

模拟登录的方法:

driver=webdriver.Chrome()  #启动浏览器
url=‘学校的登录页面的网站’
requests.session()
driver.get(url)  #用浏览器访问url
num = input('学号')
key = input('密码')
driver.find_element_by_id("UserName").clear()  #查看源码并填入源码中用户名    的id,比如‘login_email’,该行是用来清除在登录前登录框中的字
driver.find_element_by_id("UserName").send_keys(num) #输入用户名
driver.find_element_by_id("passWord").clear()   #查看源码并填入源码中密码的id
driver.find_element_by_id("passWord").send_keys(key)    #输入密码
# driver.switch_to.frame("loginframe")
driver.find_element_by_class_name("btn").click()   #查看源码中登录按钮的class名
time.sleep(5)
title=driver.title
now_url=driver.current_url

还有一个难点就是我们学校的网站的源代码是附上链接,点击链接之后会提供课表,这里需要注意的是要维持网站登录的状态,不能另外直接用requests方式打开,我用的是webdriver,这样可以模拟在一个浏览器中。
在这里插入图片描述
最后解决问题用的代码

soup =  BeautifulSoup(text, "html.parser")
next_html = soup.find(id='main')
timetable = 'http://59.77.226.35/' + next_html.attrs['src']
#以上是获得链接

#之后直接在启动的浏览器里再次打开新的页面
driver.get(timetable)

names = driver.find_element_by_id('form1').text
#print(names)

之后还有一个小问题就是爬取课表分布不是在一起的,需要单独去爬取,而之前因为使用的是webdriver获得代码,因此需要使用find_element方法

browser.find_element_by_id('q')
browser.find_element_by_css_selector('#q')
browser.find_element_by_xpath('//*[@id="q"]')

但是xpath或者css_selector的路径如果自己写会很麻烦,我纠结了很长时间,但是我之后发现开发人员工具可以直接获得(憨憨石锤)
在这里插入图片描述

第二个项目是爬取网站的信息,网页如图
在这里插入图片描述
这个题目的难点在于爬取的信息中存在动态数据,即ajax类型,但是直接通过webdriver形式爬取的话就可以获得(图片如下,阅读数无法在页面源代码中获得)
在这里插入图片描述
这是页面源代码,里面没有459这个数字在这里插入图片描述
这是开发人员工具中的代码,可以获得此数据但是webdriver相当于从开发者工具中模拟直接获得,数据可以直接获得在这里插入图片描述
下面是源代码供参考

def getHTMLArticle(lst, url):#得到网站文字
    try:
        getAuthors = []
        browser = webdriver.Chrome()
        html = browser.get(url)
        read = browser.find_element(By.ID, 'readcount').text##就是这里,用webdriver贼方便有时候
        time = browser.find_element(By.ID, 'fbsj').text
        author = browser.find_element(By.ID, 'author').text
        getAuthors.append(time)
        getAuthors.append(author)
        getAuthors.append(read)
        browser.close()
        html = getHTMLText(url)
        soup = BeautifulSoup(html, "html.parser")
        title = soup.find('title').text
        getAuthors.append(title)
        art = soup.find('div', style="margin: 0 15px 0 15px;", id="news_content_display")
        articleHTML = art.find_all('p')
        for i in articleHTML:
            article = i.get_text()
            lst.append(article)
        return getAuthors
    except:
        print('失败了')
        return "失败了"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值