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

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

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

结果展示

使用说明

因为要使用selenium,所有需先安装库selenium以及下载对应版本的Chrome Webdriver或者Firefox Webdriver(自行百度).可根据自己的情况选择使用Chrome或Firefox,以及有头模式或无头模式,见代码272行:

  1. 获取微博登录cookies
    浏览器地址栏输入https://passport.weibo.cn/signin/login,打开浏览器开发者工具(Chrome快捷键F12),切换到Network,勾选Preserve log,点击登录按钮,获取cookies,用于模拟登录
  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()中"# 词汇统计——词云"的代码)

    (1)get_weibo_info()获取微博数太多,微博可能会拒绝访问
    只需要等几分钟,重新运行程序
    注意:如果不想再从第一条微博开始抓取,想接着上次继续抓取,可以对代码做如下修改:
    将代码500行的"wb"改为"ab"

    打开存放微博内容的文本(your_user_id.txt),查看上次抓取到的最后一条微博的序号x,再将代码486行的"str(i)"改为"str(x+i)"

    用手机网页版打开微博用户页面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)",然后再次运行程序(注意删除文本中这次运行新添加的非微博内容信息)

    (2)get_weibo_num()获取微博数太多,网络性能会降低
    微博数很多的话,运行程序的同时最好不要干其他事
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值