python使用selenium获取登陆后的界面源码

编程入门 行业动态 更新时间:2024-10-19 18:31:48

python使用selenium获取登陆后的界面<a href=https://www.elefans.com/category/jswz/34/1770099.html style=源码"/>

python使用selenium获取登陆后的界面源码

如果你看了

《Python爬虫之爬虫神器selenium!还不会用它你就out了》

那么你应该知道 selenium 是什么了

它能做到自动操作

比如我们上次说的自动百度苍老师

但有时候

我们不想要让它打开浏览器去执行

能不能直接在代码里面运行呢

也就是说

有没有一个无形的浏览器呢

phantomJS 就是

它是一个基于 WebKit 的浏览器引擎

可以做到无声无息的操作各种动态网站

比如 js,css选择器,dom操作的

所以对于市面上大多通过 js 渲染的动态网站

难以解析的网站

想要爬取的话

就会使用到

selenium + phantomjs

那么怎么玩呢

这次

小编就带领你

使用它们来爬取X站上的 蔡徐坤和他的球友

接下来就是

学习 python 的正确姿势

如果你还不知道蔡徐坤是谁

那么在这里给你介绍几点

你将会体会到人家有多么牛逼

首先比吴京帅

其次是他的微博动不动就被转发上亿次,还被央视点名表扬

唱得了歌

还跳得了舞

打得了篮球,当过 NBA 形象大使

除此之外

还有诸多优点

在这里就不说了

相信你已经和我一样

已经被他的优秀所折服了

(蔡徐坤本蔡)

正因为如此优秀

所以X站上很多 up 主向他学习打篮球

那么话不多说

开始爬取X站上的 蔡徐坤和他的球友

首先来分析一下X站

打开

/(头条不能发B站网址,你们自行进入哈)

可以看到有一个搜索按钮

我们就输入「蔡徐坤 篮球」

按一下搜索

跳出来另一个窗口

在这个页面可以看到

我们需要的数据有

  • 名称
  • 视频地址
  • 描述
  • 观看次数
  • 弹幕数量
  • 发布时间

待会我们就把这些数据都爬下来

分析完之后

就开始撸代码了

首先我们要拿到浏览器的对象

browser = webdriver.Chrome()

接着开始访问X站

 browser.get("/")  #(头条不能发B站网址,你们自行脑补哈)

获取到X站首页的输入框和搜索按钮

input = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#banner_link > div > div > form > input"))) submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="banner_link"]/div/div/form/button')))

在这里的

WAIT.until(EC.presence_of_element_located...

就是等到这个元素可操作的时候才会继续执行下一步

获取到输入框元素后输入「蔡徐坤 篮球」

接着点击搜索

input.send_keys('蔡徐坤 篮球') submit.click()

然而

不妙的事情发生了

X站弹出了一个登录框

正好挡住了我们要操作的搜索

那么就在搜索之前

点击一下首页刷新一下再输入吧

# 被那个破登录遮住了index = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#primary_menu > ul > li.home > a")))index.click()

这样登录框就不会出来了

(当然,你在这里也可以使用模拟登录,但这个,我们往后说)

ok..

浏览器自动点击搜索之后

这个时候会弹出一个新的窗口

这个窗口里的内容

就是我们要的搜索结果

所以我们要让我们当前的浏览器对象获取到当前的窗口

接着获取到第一页的所有数据

# 跳转到新的窗口print('跳转到新窗口')all_h = browser.window_handlesbrowser.switch_to.window(all_h[1])get_source()

我们还要获取总页数

因为每一页的内容

我们都是要抓取的

total = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.last > button")))return int(total.text)

获取到总页数之后

我们就开始循环

for i in range(2,int(total+1)):         next_page(i)

如何获取下一页呢

当然是模拟点击「下一页按钮」的操作

我们获取「下一页按钮」的元素

然后点击

点击之后判断一下是否在我们当前的页数

然后获取数据

print('获取下一页数据')next_btn = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.next > button')))next_btn.click()WAIT.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.active > button'),str(page_num)))get_source()

有时候可能网速卡

在刷到某一页的时候数据加载不出来

可以来个异常捕获

刷新一下

再递归一下嘿嘿

except TimeoutException:            browser.refresh()        return next_page(page_num)


获取资源很简单

我们已经用 selenium 跳转到我们要的页面了

那么就拿下当前页面的源码

然后用

《Python分布式爬虫之BeautifulSoup处理正则表达式》

来解析一下

最后把数据放到 excel 中

WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#server-search-app > div.contain > div.body-contain > div > div.result-wrap.clearfix')))html = browser.page_sourcesoup = BeautifulSoup(html,'lxml')save_to_excel(soup)

解析爬取

最后别忘了关闭浏览器哦

 finally:             browser.close()

来运行一下项目吧

数据到手

哦~ 对了

不是说还有一个叫做 phantomjs 的么?

简单简单

接下来我们就利用它来打造一个无痕的浏览器

首先我们要下载phantomjs

你可以到官网去下载

下载完之后你需要配置一下环境变量哦

接着回到我们的代码

将 Chrome 换成 phantomjs

browser = webdriver.PhantomJS()

这次我们再来运行项目

这次就是真正的不会打开任何有界面的浏览器了

看下我们抓到的数据


老规矩,关注后发私信“蔡徐坤”即可获得爬虫源码。

重要的事情说三遍!

关注后发私信“蔡徐坤”即可获得爬虫源码。

关注后发私信“蔡徐坤”即可获得爬虫源码。

关注后发私信“蔡徐坤”即可获得爬虫源码。

更多推荐

python使用selenium获取登陆后的界面源码

本文发布于:2024-03-14 08:05:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736013.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   界面   python   selenium

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!