海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)

如果你看了

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

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

它能做到自动操作

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(1)

但有时候

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

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

也就是说

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

phantomJS 就是

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

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

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

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

难以解析的网站

想要爬取的话

就会使用到

selenium phantomjs

那么怎么玩呢

这次

小编就带领你

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

接下来就是

学习 python 的正确姿势

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

那么在这里给你介绍几点

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

首先比吴京帅

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(2)

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(3)

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(4)

唱得了歌

还跳得了舞

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

除此之外

还有诸多优点

在这里就不说了

相信你已经和我一样

已经被他的优秀所折服了

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(5)

(蔡徐坤本蔡)

正因为如此优秀

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

那么话不多说

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(6)

首先来分析一下X站

打开

https://www.xxx.com/(头条不能发B站网址,你们自行进入哈)

可以看到有一个搜索按钮

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(7)

按一下搜索

跳出来另一个窗口

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(8)

在这个页面可以看到

我们需要的数据有

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

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

分析完之后

就开始撸代码了

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

browser = webdriver.Chrome()

接着开始访问X站

browser.get("https://www.xxx.com/") #(头条不能发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站弹出了一个登录框

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(9)

那么就在搜索之前

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

# 被那个破登录遮住了 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_handles browser.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_source soup = BeautifulSoup(html,lxml) save_to_excel(soup)

解析爬取

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(10)

最后别忘了关闭浏览器哦

finally: browser.close()

来运行一下项目吧

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(11)

数据到手

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(12)

哦~ 对了

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

简单简单

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

首先我们要下载phantomjs

你可以到官网去下载

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

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(13)

接着回到我们的代码

将 Chrome 换成 phantomjs

browser = webdriver.PhantomJS()

这次我们再来运行项目

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(14)

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

看下我们抓到的数据

海龟画图python代码画蔡徐坤(Python爬虫爬取B站蔡徐坤打篮球)(15)


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

重要的事情说三遍!

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

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

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。