文章目录

  • 前言
  • 网站分析
  • 具体代码
    • 解决登录
    • 获取id
    • 获取信息
    • 调用演示

前言

由于第一问需要频道用户信息,便选择从深圳卫视的微博中爬取其粉丝的信息作为数据。

网站分析

首先分析微博粉丝列表,获取每个粉丝的id,可用地址栏的page参数进行翻页,

在用户信息部分,有两个需要注意的地方:一个是id会拼在一个数字的后面,我这里的id前就有100505,这个数字不固定,大家之后运行的话一定要记得修改;另外一个是有些用户的基本信息不全,爬取的时候需要加上过滤条件。

总的来讲思路就是在微博粉丝列表的界面获取粉丝的id,再根据id来爬取每个粉丝的基本信息。

具体代码

解决登录

def get_userids(targetId, fileName):browser = webdriver.Chrome()browser.get('https://weibo.com')# 先手动登录,保存一下cookiestime.sleep(60)write_cookies(browser.get_cookies())browser.delete_all_cookies()# 获取保存的cookiescookies = get_cookies_list()# 设置cookie再打开首页可以看到是已登录状态for item in cookies:browser.add_cookie(item)browser.get('https://weibo.com')

其中用到两个我以前封装的工具方法

def write_cookies(cookies):cookiesJson = json.dumps(cookies)with open('taobao.json', 'w') as f:f.write(cookiesJson)
def get_cookies_list():with open('taobao.json', 'r', encoding='utf-8') as f:cookiesList = json.loads(f.read())return cookiesList

获取id

def get_userids(targetId, fileName):''':param userids: 我这里采取的是根据id,来确定需要爬取的微博对象,简单修改一下代码也可以直接写链接。:param fileName: 直接将id写入文件保存下来:return: 没有返回值'''browser = webdriver.Chrome()browser.get('https://weibo.com')browser.delete_all_cookies()# 获取保存的cookiescookies = get_cookies_list()for item in cookies:browser.add_cookie(item)for i in range(1, 6):# url = 'https://weibo.com/p/100106'+str(targetId)+'/follow?relate=fans&page='+str(i)+'#Pl_Official_HisRelation__47'url = 'https://weibo.com/p/100606'+str(targetId)+'/follow?relate=fans&page='+str(i)+'#Pl_Official_HisRelation__47'# url = 'https://weibo.com/p/100206'+str(targetId)+'/follow?pids=Pl_Official_HisRelation__50&relate=fans&page='+str(i)+'#Pl_Official_HisRelation__50'browser.get(url)html = browser.page_sourcedoc = pq(html)userlist = doc.find('.info_name .S_txt1') # CSS选择器,时间长了可能会变for user in userlist.items():item = str(user.attr('href'))userid = re.findall("u/(.+)\?", item)with open('ids/audience/'+fileName, 'a') as f:       # 保存文件的名字if len(userid) > 0:f.write(str(userid[0]) + '\n')

获取信息

def get_info(userids, fileName):'''    :param userids: 之前爬取的用户id:param fileName: 用于存储基本信息的文件,采用csv格式,一个用户一行:用户名,地区,性别、生日:return: 无返回值'''browser = webdriver.Chrome()browser.get('https://weibo.com')browser.delete_all_cookies()cookies = get_cookies_list()# 设置cookie再打开首页可以看到是已登录状态for item in cookies:browser.add_cookie(item)for userid in userids:url = 'https://weibo.com/p/100505'+str(userid)+'/info?mod=pedit_more'browser.get(url)html = browser.page_sourcedoc = pq(html)basic = doc.find('.WB_innerwrap .clearfix .li_1 .pt_detail')           # CSS选择器,时间长了可能会变count = 1line = []for item in basic.items():if count <= 4:                        # 只取前四个line.append(item.text())count = count+1else:breakwrite_info(line, fileName, userid)browser.close()

其中将写信息的操作单独进行了封装

def write_info(line, fileName, userid):with open('infos/product/'+fileName, 'a') as f:if len(line) == 4 and str(line[2]) in '男,女' and '年' in str(line[3]) and '月' in str(line[3]):f.write(str(userid) + ',' + str(line[1]) + ',' + str(line[2]) + ',' + str(line[3]) + '\n')

调用演示

if __name__ == '__main__':names = ['深圳卫视诗意中国栏目', '深圳卫视探秘时刻栏目', '深圳卫视微博发布厅', '深圳卫视温暖在身边栏目', '深圳卫视正午三十分栏目', '深圳卫视直播港澳台栏目']for name in names:ids = read_ids(name+'粉丝id列表.txt')get_info(ids, name+'粉丝信息列表.csv')

其中封装了一个读取id的方法

def read_ids(fileName):ids = []with open('ids/product/'+fileName) as f:for line in f:ids.append(line.strip())return ids

19年深圳杯D题之爬取微博粉丝基本信息相关推荐

  1. 19年深圳杯D题之爬取电视收视率排行榜

    文章目录 前言 站点分析 具体代码 前言 D题与地方电视台有关,多年的收视率数据可能有一些用 站点分析 http://www.tvtv.hk/archives/category/tv 可以发现每天的排 ...

  2. web scraper 爬取微博粉丝性别以及微博内容

    一.粉丝性别 两个地方要注意: 1. 翻页,由于查看粉丝数限制,如果一直点下一页,会卡在第5页或者第10页,最后数据无法保存.所以还是在url里写上页数范围,这样最后数据可以保存:比如第一页网址:是  ...

  3. # 深圳杯D题爬取电视收视率排行榜

    目录 深圳杯D题爬取电视收视率排行榜 站点分析 代码实现 深圳杯D题爬取电视收视率排行榜 站点分析 http://www.tvtv.hk/archives/category/tv 每天的排行版通过静态 ...

  4. 2022年深圳杯A题破除“尖叫效应”与“回声室效应”走出“信息茧房”

    2022年深圳杯A题破除"尖叫效应"与"回声室效应"走出"信息茧房"   为了防止更多的人走弯路,对于此题,数据随便找,数据自己造然后文档写 ...

  5. 2020深圳杯B题论文

    2020深圳杯B题论文 问题1: 在给定的信噪比(SNR)信道中,为了达到更高的频谱效率,很多新型的星座图技术,例如几何成型(GeometricShaping,GS)和概率成型(Probalisiti ...

  6. 2020年深圳杯C题

    C题:无线可充电传感器网络充电路线规划 摘要 物联网的快速发展带动了无线传感器网络WSN在生活中的广泛运用.无线传感器网络中包括若干传感器以及一个数据中心,这些传感器的电池均需要移动充电器提供能量来维 ...

  7. c语言开发深圳,2020年深圳杯C题

    C题:无线可充电传感器网络充电路线规划 摘要 物联网的快速发展带动了无线传感器网络WSN在生活中的广泛运用.无线传感器网络中包括若干传感器以及一个数据中心,这些传感器的电池均需要移动充电器提供能量来维 ...

  8. 2021年深圳杯A题火星探测器着陆控制方案

    2021年深圳杯A题火星探测器着陆控制方案 本题聚焦于探测器从火星同步轨道出发到探测器在火星地表上方悬停的过程(以下简称着陆过程),要求参赛队收集有关天问一号探测器的音像和文字等公开资料,建立数学模型 ...

  9. 【Python爬虫】2022年数学建模美赛B题数据爬取

    2022年数学建模美赛B题数据爬取 背景 2022年的美赛刚刚落下帷幕,该题的一个主要难点在于数据的获取.很多人无法找到有效的数据,或者是无法获取数据. 比如找到了如下米德湖的水文数据,但是发现并没有 ...

最新文章

  1. mysql 5.7 gtid 主从_MySQL 5.7基于GTID的主从复制实践
  2. Tomcat端口被占用:starting Tomcat8.0 server at localhost has encountered a problem
  3. 都说性能调优难?玩转这3款工具,让你秒变“老司机”!
  4. libinject的编译
  5. 程序的灵魂-----算法
  6. SpringCloud 从菜鸟到大牛之三 服务拆分 理论
  7. 服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)
  8. halcon学习之图像分割
  9. 小米闪购首页实战(HTML+CSS+JS)
  10. [转]win10 vs2010安装教程(超详细,附下载链接)
  11. 一句话说明sync, fsync, fdatasync的区别
  12. scala 定义空list_scala-03-list操作
  13. Vue隐藏技能:运行时渲染用户写入的组件代码!
  14. 打开word时,出现“向程序发送命令时出现问题”的解决方法
  15. c++ Beep函数的雪之梦
  16. 阿里巴巴开源的15个顶级Java项目
  17. 最简单的FRP内网穿透教程
  18. 电脑开机遇到二维码怎么办?
  19. 如何设计空白页面,体验更好!
  20. NoteExpress引用文献出现ADDIN NE.Ref.

热门文章

  1. 选择“食品装箱机”应该考虑的几个方面
  2. ppst——开发技术视频 spring的restful服务搭建
  3. Ada Lovelace—世界上首位“程序媛”
  4. 新的集成环境 PHP study_pro(PHP study 2019)
  5. 星露谷物语多玩家显示联机服务器没法邀请,星露谷物语联机怎么玩 星露谷物语联机玩法介绍...
  6. Unity之谷歌应用内评价(google play in-app review)
  7. 网页扩展名是php的是,php文件的扩展名是什么
  8. MDK编译出现*.axf: Error: L6218E: Undefined symbol 问题解决方法
  9. 文件管理 —— 文件存储空间管理
  10. Motorola XOOM平板电脑(wingray)刷机方法