当前位置:   article > 正文

【爬虫项目-4】微博超话内容爬取/selenium使用教学_微博超话数据爬虫

微博超话数据爬虫

一、代码撰写目的

闲来无事想了解王者荣耀某个英雄最近的风评,例如是版本之子吗or出装怎么搭配or大家对策划这次改动有何看法,发现微博超话这方面的内容非常多,于是想把超话内容爬取下来做进一步数据分析。温馨提示 本代码可以适用于任何微博超话内容的爬取,只需修改url即可。

二、网页结构

可以看到超话一打开,网页是如下布局,一篇帖子大概包含如下一些信息:用户id、发布时间、来自xxx超话、帖子正文内容以及收藏、转发、评论、点赞数量。

再往下翻会发现,通常无法完整加载出来一整夜,会下翻会触发加载,所以说这是一个动态网页

想要批量爬取上百页超话内容,我们不仅要克服动态加载还要实现自动翻页

三、代码主体

话不多说,上菜

版本一定要注意,selenium的版本会影响后面代码的编写

  1. import time
  2. from bs4 import BeautifulSoup #4.10.0
  3. from selenium import webdriver #3.141.0
  4. from xlrd import open_workbook
  5. from xlutils.copy import copy
  6. import eventlet#导入eventlet这个模块

配置webdriver,webdriver的路径根据自己实际进行配置,一定要下载和自己电脑谷歌浏览器版本相匹配的的webdriver否则会出现错误,怎么查看自己谷歌浏览器版本可以自行百度,Chromewebdriver下载链接也可以自行百度,网上一大堆,下载完成之后解压出来exe放到自己的项目路径下就可以。

这里的base_url可以根据自己爬取的超话进行修改,baseurl是用于后面翻页的,所以url最后是page=而不是page=xx(某一具体数字)

  1. #调用selenium工具
  2. options = webdriver.ChromeOptions()
  3. options.add_experimental_option('excludeSwitches', ['enable-automation'])
  4. driver = webdriver.Chrome(executable_path=r"chromedriver.exe", options=options)
  5. base_url = "https://s.weibo.com/weibo?q=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80%E8%B6%85%E8%AF%9D%E4%BC%A0%E7%BB%9F%E6%96%87%E5%8C%96&page="

下面这段代码用于登录微博(不登录的话无法批量爬取),其中cookies需要自己配置(登录自己的微博然后复制自己的cookies),cookies如何获取可以百度(真的很多教学,这里就不展开篇幅说了)

  1. driver.get("https://weibo.com/p/100808ccb61d96c8f867d4f6c412e95c4f173a/super_index?current_page=3&since_id=4878245637659820&page=2#1678548112338")
  2. driver.delete_all_cookies()
  3. cookies ={}
  4. for cookie in cookies:
  5. cookie_dict = {
  6. 'domain': '.weibo.com',
  7. 'name': cookie.get('name'),
  8. 'value': cookie.get('value'),
  9. "expires": cookie.get('value'),
  10. 'path': '/',
  11. 'httpOnly': False,
  12. 'HostOnly': False,
  13. 'Secure': False}
  14. driver.add_cookie(cookie_dict)
  15. driver.refresh()

如果实在不会配置,可以采用下面这段代码,即直接暂停一分钟,自己手动登录一下

  1. driver.get("https://weibo.com/p/100808ccb61d96c8f867d4f6c412e95c4f173a/super_index?current_page=3&since_id=4878245637659820&page=2#1678548112338")
  2. driver.delete_all_cookies()
  3. time.sleep(60)

下面这段代码用于解决动态加载,即一直自动下滑直到触底

  1. driver.get(url)
  2. time.sleep(5)
  3. eventlet.monkey_patch() # 必须加这条代码
  4. with eventlet.Timeout(10, False): # 设置超时时间为20秒
  5. while True:
  6. # 循环将滚动条下拉
  7. driver.execute_script("window.scrollBy(0,1000)")
  8. # sleep一下让滚动条反应一下
  9. time.sleep(0.05)
  10. # 获取当前滚动条距离顶部的距离
  11. check_height = driver.execute_script(
  12. "return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
  13. # 如果两者相等说明到底了
  14. if check_height >9000:
  15. break

再往下的代码都是用于定位元素,爬取内容的,真正的难题已经都被解决了,因为观察到有的帖子内容比较长,需要点击展开才能爬取完整内容,因此自动定位页面中所有展开字样并自动点击再进行帖子正文抓取

  1. elements = driver.find_elements_by_css_selector(
  2. "div.content p.txt a")
  3. for i in elements:
  4. if "展开" in i.text:
  5. driver.execute_script("arguments[0].click()",i)

保存数据

  1. r_xls = open_workbook(r"帖子内容.xlsx") # 读取excel文件
  2. row = r_xls.sheets()[0].nrows # 获取已有的行数
  3. excel = copy(r_xls) # 将xlrd的对象转化为xlwt的对象
  4. worksheet = excel.get_sheet(0) # 获取要操作的sheet
  5. # 对excel表追加一行内容
  6. for i in range(len(chuantong)):
  7. worksheet.write(row, 0, chuantong[i]) # 括号内分别为行数、列数、内容
  8. row += 1
  9. excel.save(r"帖子内容.xlsx") # 保存并覆盖文件

四、注意事项(完整的代码和数据在公主号和Github)

大家白嫖代码的时候一定要注意我标明的三方库版本,版本不对很有可能会出错,此外最后保存数据的方法有很多大家可以自行挑选更改。

最重要的一点,如果大家觉得有用跪求大家给我一个关注和点赞,有不懂的问题可以私信或者留言,欢迎大家关注我的公主号,上面有更多更详尽的代码,喜欢白嫖的有福了。

GitHub - Maekfei/Spider-projects: 爬虫实战,集合了数十个爬虫实战代码,全都亲测可用,借鉴麻烦点个star谢谢 同时欢迎访问我的github主页,copy代码的同时别忘了点个star 谢谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/841392
推荐阅读
相关标签
  

闽ICP备14008679号