Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)

代码移步:https://github.com/AnRanbel/Python/tree/master/PythonCrawler/weibospider

我是在这位作者https://github.com/dataabc/weiboSpider代码的基础上加了微博数抓取(主要是想用一下selenium试试)和分析数据,当前代码只能抓取原创微博,其实要实现全部微博的获取(转发+原创)也很简单,大家可以自己试试(用手机网页版https://weibo.cn/抓取微博,2012年以前的原创微博没有包括在原创模式下,所以变量filter的意义不大)

结果展示

Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第1张图片

Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第2张图片

Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第3张图片

Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第4张图片

使用说明

因为要使用selenium,所有需先安装库selenium以及下载对应版本的Chrome Webdriver或者Firefox Webdriver(自行百度).可根据自己的情况选择使用Chrome或Firefox,以及有头模式或无头模式,见代码272行:
Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第5张图片

  1. 获取微博登录cookies
    浏览器地址栏输入https://passport.weibo.cn/signin/login,打开浏览器开发者工具(Chrome快捷键F12),切换到Network,勾选Preserve log,点击登录按钮,获取cookies,用于模拟登录
    Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第6张图片
  2. 获取微博用户id
    登录后,浏览器地址栏输入https://weibo.cn,搜索微博用户,获取相应id

    地址栏u/后面的那串数字就是user_id,复制粘贴到user_id变量中
  3. 程序运行中可能会出现的问题
  • 报错requests.exceptions.SSLError: HTTPSConnectionPool(host='weibo.cn', port=443): Max retries exceeded with url: /1192329893/info (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:833)'),))
    通常只需要隔一会儿再重新启动程序即可
  • 微博拒绝访问和网页获取失败
    此程序大体分为6步进行,其中最易出错的就是get_weibo_info()和get_weibo_num()。如果你要抓取的微博用户微博数过多(>1000)可以考虑两个函数分两次运行(第一次运行先注释掉self.get_weibo_num,另外注释掉write_txt()中"#将微博发布数写入文件"的代码和analyse()中"#发布数统计——条形图"的代码;第二次运行先删掉第一次的注释,再注释掉self.get_weibo_info,另外注释掉write_txt()中"# 将微博内容写入文件"的代码和analyse()中"# 词汇统计——词云"的代码)
    Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第7张图片

    (1)get_weibo_info()获取微博数太多,微博可能会拒绝访问
    只需要等几分钟,重新运行程序
    注意:如果不想再从第一条微博开始抓取,想接着上次继续抓取,可以对代码做如下修改:
    将代码500行的"wb"改为"ab"
    Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第8张图片
    打开存放微博内容的文本(your_user_id.txt),查看上次抓取到的最后一条微博的序号x,再将代码486行的"str(i)"改为"str(x+i)"
    Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第9张图片
    用手机网页版打开微博用户页面https://weibo.cn/u/your_user_id,查看上次抓取停止在哪一页,如果上次停止在y页,则将代码139行的"for page in range(1, page_num + 1)"改为"for page in range(y+1, page_num + 1)",然后再次运行程序(注意删除文本中这次运行新添加的非微博内容信息)
    Python抓取新浪微博用户信息(Selenium+PyQuery+BeautifulSoup)_第10张图片
    (2)get_weibo_num()获取微博数太多,网络性能会降低
    微博数很多的话,运行程序的同时最好不要干其他事

你可能感兴趣的:(python,selenium)