百木园-与人分享,
就是让自己快乐。

Python带你爬取b站上的NBA形象大使,这不得大展身手...

前言

今天给大家透露了我们这篇要说的牛逼利器

selenium + phantomjs

Python学习交流Q群:906715085###
如果你知道 selenium 是什么了

它能做到自动操作

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

 

在这里插入图片描述

将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

但有时候

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

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

也就是说

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


phantomJS 就是

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

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

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

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

难以解析的网站

想要爬取的话

就会使用到

selenium + phantomjs

那么怎么玩呢

这次

就带领你

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

接下来就是

学习 python 的正确姿势

在这里插入图片描述

这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

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

那么 在这里给你介绍几点

你将会体会到人家有多么牛逼
在这里插入图片描述

首先比吴京帅

这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

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

在这里插入图片描述
在这里插入图片描述

唱得了歌

还跳得了舞

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

除此之外

还有诸多优点

在这里就不说了

相信你已经和我一样

已经被他的优秀所折服了

正因为如此优秀

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

那么话不多说

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

python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

首先来分析一下 b 站

打开

https://www.bilibili.com/

 

可以看到有一个搜索按钮

我们就输入「蔡徐坤 篮球」
在这里插入图片描述

按一下搜索

跳出来另一个窗口

在这里插入图片描述

在这里插入图片描述

在这个页面可以看到

我们需要的数据有

名称

视频地址

描述

观看次数

弹幕数量

发布时间

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

分析完之后

就开始撸代码了

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

browser = webdriver.Chrome()

 

接着开始访问 b 站

  browser.get(\"https://www.bilibili.com/\")

 

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

Python学习交流Q群:906715085###
 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()

 

然而

不妙的事情发生了

b站弹出了一个登录框

正好挡住了我们要操作的搜索
在这里插入图片描述

那么就在搜索之前

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

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

 

这样登录框就不会出来了

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

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 跳转到我们要的页面了

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

然后用

正则表达式

来解析一下

最后把数据放到 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学习交流Q群:906715085###
def save_to_excel(soup):
    list = soup.find(class_=\'all-contain\').find_all(class_=\'info\')
    for item in list:
        item_title = item.find(\'a\').get(\'title\')
        item_link = item.find(\'a\').get(\'href\')
        item_dec = item.find(class_=\'des hide\').text
        item_view = item.find(class_=\'so-icon watch-num\').text
        item_biubiu = item.find(class_=\'so-icon hide\').text
        item_date = item.find(class_=\'so-icon time\').text

        print(\'爬取:\' + item_title)

        global n

        sheet.write(n, 0, item_title)
        sheet.write(n, 1, item_link)
        sheet.write(n, 2, item_dec)
        sheet.write(n, 3, item_view)
        sheet.write(n, 4, item_biubiu)
        sheet.write(n, 5, item_date)

        n = n + 1

 

最后别忘了关闭浏览器哦

 finally:
        browser.close()

 

来运行一下项目吧

在这里插入图片描述

数据到手
在这里插入图片描述

哦~ 对了

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

简单简单

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

首先我们要下载phantomjs

你可以到

http://phantomjs.org/download.html

 

这里去下载

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

在这里插入图片描述

接着回到我们的代码

将 Chrome 换成 phantomjs

browser = webdriver.PhantomJS()

 

这次我们再来运行项目

在这里插入图片描述

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

看下我们抓到的数据
在这里插入图片描述

结束:

我们就把蔡徐坤给爬取下来了,今天的教程还是比较简单的,每一个操作步骤都给大家交代的明明白白,相信大家一定可以学会

的。当然,没有学会的小伙伴也不要害羞,要及时说出哪里不懂,评论留言就给你回复。最后,记得给我点赞鸭!!!


来源:https://www.cnblogs.com/123456feng/p/16170456.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python带你爬取b站上的NBA形象大使,这不得大展身手...

相关推荐

  • 暂无文章