范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

python爬虫练习seleniumBeautifulSoup,爬b站搜索内容保存excel

  一、简介
  前面文章已经介绍了selenium库使用,及浏览器提取信息相关方法。参考:python爬虫之selenium库
  现在目标要求,用爬虫通过浏览器,搜索关键词,将搜索到的视频信息存储在excel表中。二、创建excel表格,以及chrome驱动n = 1 word = input("请输入要搜索的关键词:") driver = webdriver.Chrome() wait = WebDriverWait(driver,10)  excl = xlwt.Workbook(encoding="utf-8", style_compression=0)  sheet = excl.add_sheet("b站视频:"+word, cell_overwrite_ok=True) sheet.write(0, 0, "名称") sheet.write(0, 1, "up主") sheet.write(0, 2, "播放量") sheet.write(0, 3, "视频时长") sheet.write(0, 4, "链接") sheet.write(0, 5, "发布时间")三、创建定义搜索函数
  里面有button_next 为跳转下一页的功能,之所有不用By.CLASS_NAME定位。看html代码可知
  class名称很长,而且有空格,如果selenium用By.CLASS_NAME定位,有空格会报错:selenium.common.exceptions.NoSuchElementException: Message: no such element
  所以这里用By.CSS_SELECTOR方法定位。def search():     driver.get("https://www.bilibili.com/")     input = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "nav-search-input")))     button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "nav-search-btn")))      input.send_keys(word)     button.click()     print("开始搜索:"+word)     windows = driver.window_handles     driver.switch_to.window(windows[-1])     get_source()     #第1页跳转第2页     button_next = driver.find_element(By.CSS_SELECTOR,"#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_x50 > p > p > button:nth-child(11)")     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.video-list.row > p:nth-child(1) > p > p.bili-video-card__wrap.__scale-wrap")))     button_next.click()     get_source()四、定义跳转下一页函数
  这里有调转下一页函数,那为什么在上面搜索函数也有下一页功能,因为分析代码。#第2页的CSS_SELECTOR路径 #i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_x50 > p > p > button:nth-child(11)  #后面页面的CSS_SELECTOR路径 #i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_lg > p > p > button:nth-child(11)
  第1页的CSS_SELECTOR和后面的页面的CSS_SELECTOR的不一样,所以把第1页跳第2页单独加在了上面搜索函数中。def next_page():     button_next = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_lg > p > p > button:nth-child(11)")))     button_next.click()     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.video-list.row > p:nth-child(1) > p > p.bili-video-card__wrap.__scale-wrap")))     get_source()五、定义获取页面代码函数
  上面定义的函数都有get_source()函数,这个函数就是现在需要创建的,用途获取页面代码,传入BeautifulSoupdef get_source():     html = driver.page_source     soup = BeautifulSoup(html, "lxml")     save_excl(soup)六、获取元素并存到excel表
  通过BeautifulSoup循环获取页面信息,并存到创建好的excel表中。def save_excl(soup):     list = soup.find(class_="video-list row").find_all(class_="bili-video-card")     for item in list:         # print(item)         video_name = item.find(class_="bili-video-card__info--tit").text         video_up = item.find(class_="bili-video-card__info--author").string         video_date = item.find(class_="bili-video-card__info--date").string         video_play = item.find(class_="bili-video-card__stats--item").text         video_times = item.find(class_="bili-video-card__stats__duration").string         video_link = item.find("a")["href"].replace("//", "https://")         print(video_name, video_up, video_play, video_times, video_link, video_date)          global n          sheet.write(n, 0, video_name)         sheet.write(n, 1, video_up)         sheet.write(n, 2, video_play)         sheet.write(n, 3, video_times)         sheet.write(n, 4, video_link)         sheet.write(n, 5, video_date)          n = n +1七、定义main函数,循环获取跳转每一页
  这里默认是10页的数据,后面就不获取了,可以自行调整页面数。最后保存表名。def main():     search()     for i in range(1,10):         next_page()         i = i + 1     driver.close() if __name__ == "__main__":     main()     excl.save("b站"+word+"视频.xls")八、最终代码执行效果
  这里CSS_SELECTOR路径,我这里尽量的在最底层,所以比较长,因为短路径,经常性等待时间不够长,没有加载所有页面,提取不到信息而报错。from selenium import webdriver from selenium.webdriver.common.by import By from bs4 import BeautifulSoup from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import xlwt import time  n = 1 word = input("请输入要搜索的关键词:") driver = webdriver.Chrome() wait = WebDriverWait(driver,10)  excl = xlwt.Workbook(encoding="utf-8", style_compression=0)  sheet = excl.add_sheet("b站视频:"+word, cell_overwrite_ok=True) sheet.write(0, 0, "名称") sheet.write(0, 1, "up主") sheet.write(0, 2, "播放量") sheet.write(0, 3, "视频时长") sheet.write(0, 4, "链接") sheet.write(0, 5, "发布时间")  def search():     driver.get("https://www.bilibili.com/")     input = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "nav-search-input")))     button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "nav-search-btn")))      input.send_keys(word)     button.click()     print("开始搜索:"+word)     windows = driver.window_handles     driver.switch_to.window(windows[-1])     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,                                                "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.video.i_wrapper.search-all-list")))     get_source()     print("开始下一页:")     button_next = driver.find_element(By.CSS_SELECTOR,                                       "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_x50 > p > p > button:nth-child(11)")     button_next.click()     #time.sleep(2)     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.video-list.row > p:nth-child(1) > p > p.bili-video-card__wrap.__scale-wrap > p > p > a > h3")))     get_source()     print("完成")  def next_page():     button_next = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,                                       "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.flex_center.mt_x50.mb_lg > p > p > button:nth-child(11)")))     button_next.click()     print("开始下一页")     #time.sleep(5)     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,                                                "#i_cecream > p > p:nth-child(2) > p.search-content > p > p > p.video-list.row > p:nth-child(1) > p > p.bili-video-card__wrap.__scale-wrap > p > p > a > h3")))     get_source()     print("完成")      def save_excl(soup):     list = soup.find(class_="video-list row").find_all(class_="bili-video-card")     for item in list:         # print(item)         video_name = item.find(class_="bili-video-card__info--tit").text         video_up = item.find(class_="bili-video-card__info--author").string         video_date = item.find(class_="bili-video-card__info--date").string         video_play = item.find(class_="bili-video-card__stats--item").text         video_times = item.find(class_="bili-video-card__stats__duration").string         video_link = item.find("a")["href"].replace("//", "https://")         print(video_name, video_up, video_play, video_times, video_link, video_date)          global n          sheet.write(n, 0, video_name)         sheet.write(n, 1, video_up)         sheet.write(n, 2, video_play)         sheet.write(n, 3, video_times)         sheet.write(n, 4, video_link)         sheet.write(n, 5, video_date)          n = n +1          def get_source():     html = driver.page_source     soup = BeautifulSoup(html, "lxml")     save_excl(soup)      def main():     search()     for i in range(1,10):         next_page()         i = i + 1     driver.close()      if __name__ == "__main__":     main()     excl.save("b站"+word+"视频.xls")
  执行输入MV执行结果:
  在文件夹也生成了excel文件表
  打开,信息保存完成
  同理,输入其他关键词,也可以。
  以上,简单爬取搜索信息就完成了,如果要在服务器上隐藏运行,参考我上篇文章:python爬虫之selenium库

佛光山科技弘法新契机讲座数字佛教艺术家宓雄观点引热议9月18日上午,佛光山在法宝堂举行一场以科技弘法新契机为主题的讲座,由佛光山信息监院慧让法师主持,邀请网龙网络集团宗教事业部总经理数字佛教艺术家宓雄分享近几年在佛教科技弘法上的成果强势来袭!2022九月最新高级锐化PS插件,没有比这更专业本期带来最新专业图像锐化PS插件FranzisSHARPENprojects4中文版可独立使用,也可作为PS插件使用包含超多专业编辑功能和多达33款预设无偿领取提示随意评论私信我关辽宁男篮热身赛!郭艾伦上演回归首秀,全主力出战,杨鸣小试牛刀折腾了一个夏天之后,随着辽宁男篮和郭艾伦完成续约画上了句号。对于辽宁男篮来说,他们目前最大的问题就是磨合,杨鸣对此也表示是近期重要工作。之前辽宁男篮曾经计划和吉林男篮进行3场热身赛女排全锦赛上海3比2险胜天津,卫冕冠军首秀告捷,云南爆冷胜辽宁北京时间9月19日消息,2022年全国女子排球锦标赛在福建漳州进入到第二天。小组循环赛,卫冕冠军上海女排经过五局苦战以3比2击败天津女排,首秀取得胜利云南女排以3比1爆冷战胜辽宁女羊了个羊刷屏,背后的游戏界茅台,员工人均年薪达92万元继旅行青蛙合成大西瓜之后,近日又有一款名为羊了个羊的小游戏成功出圈。看似简单的消除闯关游戏,却让不少玩家上头,服务器在2天之内崩了3次。通关异常困难,有网友调侃第一关瞎玩都能过,第中国版香奶奶郑明明美的使者开设美容院后的郑明明,继续扩大自己的事业,于是在八十年代末期,于上海青浦县投资办厂,生产以自己姓名命名的系列化妆产品,致力于成为国货第一品牌。近年,郑明明系列化妆品已成为内地畅销产中国女篮,全力去拼每一分来源人民日报2022年女篮世界杯9月22日开幕中国女篮,全力去拼每一分中国队在女篮世界杯预选赛比赛中三战全胜。图为中国队球员李梦(右)在战胜法国队的世预赛比赛中。普雷德拉格米洛萨夫出道前歪瓜裂枣,出道后美若天仙,这9位明星整得太过惊艳文白面书誏编辑白面书誏娱乐圈的女星一般分为两种类型一种是整容失败,一种是整容成功。有人因整容失败导致面部僵硬五官不协调。有人因整容成功逆天改命,从原本的歪瓜裂枣直接逆袭成受人追捧的50岁看起来像30岁的女生,都有这些特征,占两样就显年轻嗨,我是柒作作。对于女人来说,我们都会有一种集体焦虑,害怕自己变老,岁月无情,我们没有办法留住时间的脚步。但也有很多女生,她们好像受到了岁月的优待,虽然已经50岁了,依然有着30多2010年买下北京270平豪宅,王楠如今赚到多少钱?数字惊人王楠,中国国乒历史上最好的球员之一,女乒的第二代大魔王,哪怕退役多年,王楠依旧将国乒当成自己的娘家,2021年东京奥运会,中国国乒载誉归来,王楠更是大方的给所有拿到金牌和银牌的国乒最黑不过泰国跟团游,这里已不是净土,如今专坑中国游客年底,大批中国人又要带着家人去旅游了。为了防止财产和生命安全受到侵犯,必须彻底揭露这些旨在伤害中国人的产业链!每个公民都值得反思和警惕!一直坑客户,却很少曝光近年来,随着普吉岛旅游
金灿灿的鸷鸟讲述着秦人的故事鸷鸟形金饰片四鸟纹金饰片金饰片兽面纹盾形金饰片盘龙纹金饰片口唇纹鳞形金饰片目云纹圭形金饰片目云纹窃曲形金饰片先秦时的文物,给人的印象总是青铜器居多,青铜鼎青铜簋青铜盉青铜敦青铜器造专为孩子设计的影院,有声投影AI交互,趣学伴儿童故事放映机体验数码产品现在无处不在,孩子放学回家写完作业,出去玩上一会,回到家不是看电视就是玩手机,有时候碰上孩子爱看的视频或者爱玩的游戏,拉都拉不走只能在争吵声中强制关闭。这些带娱乐性的电子设生命的旅程,你我的相遇是为了遇见更多美好的事生命的旅程,你我的相遇是为了在这个世界上遇见更多美好的事。我在年轻时都会想,人无法面对,情不知所起,一切的一切都会烟消云散。看到它落幕的时候,苦苦的感觉,无人陪伴。可是我还是这样看恭喜辽篮!2米08大外援即将汇合,加盟年薪曝光,李洪庆立功了目前CBA联赛如火如荼进行中,在一场焦点比赛中辽宁男篮迎战吉林男篮。经过四节比赛激烈角逐,辽篮以11789大胜对手,并以9胜1负与浙江稠州男篮并列排名联盟第一位,而随后的比赛中广东山上有青草,绿草如茵山上有青草,绿草如茵。我走在四月份的小路上,静静的看着湛蓝的天空,想像着儿时的事儿。小路上的草儿绿得有些发黑。路没有尽头,寂寞也不知道,它到底是在哪一棵树儿下默默地看着我。一条路依我眼中的山东小吃我即兴而作的拙文我眼中的鲁菜在齐鲁壹点刊载后,由于视角独特,立场观点相对客观理性,引发了餐饮圈和周边同事朋友的关注,热情鼓励者有之,友善探讨者有之,都给了我莫大的感动,激励我在餐饮零元转会费!哈维回归首笔签约出现,解放11名伤病球员带来最强阵相信看了上一场巴萨比赛的球迷都已经得了不少心脏相关疾病,不是因为熬夜造成的,而是因为领先三球被读秒绝平给气的。不过,据悉哈维的首笔签约已经浮现,这位新援的到来不仅可以化解大家的心病今日立冬,养生莫踩这5个雷区倏忽秋又尽,今日恰立冬,伴随着大范围寒潮的来袭,气温急剧下降,全国多地体验了一夜入冬的感觉。立冬是二十四节气中第十九个节气,常被认为是冬季之始。从立冬到立春,俗称冬仨月,是一年里最立冬,人生静美如秋时光荏苒,岁月如朔。在花草树木颜色变动中,我们欣赏着四季的缤纷绚烂,感受着生命的变换与美好,同时,也要面对所有的叶落归根的无奈和伤感,体会迎来送往的五味杂陈。四季轮回,生生不息。抬立冬丨10种食物有益健康立冬节气立冬是农历二十四节气之一,时间点在公历每年11月78日之间。立冬过后,日照时间将继续缩短,正午太阳高度继续降低。中国民间以立冬为冬季之始,立冬期间,有需进补以度严冬的食俗。立冬日市民宅家吃饺子涮火锅,商超电商订单增长加大生鲜供应刚刚过去的这个周末恰逢立冬,受降温和下雪影响,市民减少外出,对蔬菜饺子等民生商品需求大增,超市和生鲜电商线上订单大幅增加,京城商超和生鲜电商纷纷加大货源供应,提前准备好各类入冬商品