我学习的思路,一般就是技术根据技术贴,技术视频学习,而经验要从实战中获得。在生活中,常常动脑筋,把问题用自己掌握的技能来解决,既能巩固自己的技术,学习经验,又能有成就感,一举两得。
最近出去玩,经常翻豆瓣,在相关小组里获取需要的信息。有一个用户发的帖子是寻找队友,内容是什么记不太清了,但是过了一两天我好想又看到了这个人发的寻找队友的帖子,只记得跟我前两天看到的内容不一致,于是就很好奇,这个人多次发帖怎么发的内容差距蛮大的,不是骗子吧?于是我想着把这个人在这个小组中发的所有帖子找出来。然而豆瓣小组没有按照发布人搜索帖子的功能,于是,我就搬出了python的爬虫技术。(哈哈哈,说的高大上一些,装个小~)

代码前准备

用网页登录豆瓣,了解豆瓣的接口实现。打开f12,观察了几个页面以及接口之后,发现了如下接口:

在该接口的响应数据里,我看到了一条条的帖子的信息。(原谅我不知道这接口用的什么语言,跟我平时做的项目相差较多。工作中的项目,后端数据和前端是分离开的,而不像这样,直接以接口的形式,将数据和前端一起返回。我还需要深入学习)

看到这两个信息,我心中大概有了思路:1、调用该接口,获取所有帖子信息;2、在响应的数据中,查询出指定用户发布的帖子。

编写代码

首先,通过分析,得出接口“https://www.douban.com/group/586674/discussion?start=550”的基本组成。586674为小组的id(586674为生活组id),start=550 是每页查询的开始条数,每页默认25条,因此start是一个间隔为25的数据。
于是我开始敲代码:

import requests
# 生活组
header={"Cookie": """__utmv=30149280.18928; douban-fav-remind=1; bid=1_33bHyMNKk; __yadk_uid=pulR7OghaIPqmJRPIxe3KhEJxut2tYer; trc_cookie_storage=taboola%2520global%253Auser-id%3Db09d96dd-31b1-4593-8d1c-4c578400c1e3-tuct2a38ca8; ll="128517"; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1597026264%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgQBOGEXypqcfy3ThMRX9I1KHKVdC3gJqbRM52Iq8v62ToQLgvcsEytB3SgJVAbR0%26wd%3D%26eqid%3D8d498001003b7191000000035f30afd5%22%5D; _pk_ses.100001.8cb4=*; __utma=30149280.637221786.1522650378.1573119693.1597026266.9; __utmc=30149280; __utmz=30149280.1597026266.9.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; dbcl2="189284129:FDZaIXXKmBU"; ck=LPqG; push_doumail_num=0; douban-profile-remind=1; __gads=ID=3073429e68e6a294:T=1597026329:S=ALNI_MZtbg-6aYKJGzPAR1079Z9BvbTcKg; ap_v=0,6.0; push_noty_num=0; _pk_id.100001.8cb4=101ed8a4922703c1.1522650376.9.1597027280.1573119666.; __utmb=30149280.167.7.1597027140424"""
}
url = "https://www.douban.com/group/586674/discussion?start=0"
print(url)
r = requests.get(url=url,headers=header)
data = r.text
print(data)

运行结果 为空,于是我查了一下相应状态print(r),结果为418
百度中有人说是没有header导致的,但是我添加了,于是我继续搜索问题,终于找到了一个靠谱的文章,尝试之后果真成功了。原来是header中缺失了一个重要内容,如下:

User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。因此我们copy这个信息,添加到header中,再尝试一下,返回200了!

import requests
# 生活组
header={"Cookie": """__utmv=30149280.18928; douban-fav-remind=1; bid=1_33bHyMNKk; __yadk_uid=pulR7OghaIPqmJRPIxe3KhEJxut2tYer; trc_cookie_storage=taboola%2520global%253Auser-id%3Db09d96dd-31b1-4593-8d1c-4c578400c1e3-tuct2a38ca8; ll="128517"; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1597026264%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgQBOGEXypqcfy3ThMRX9I1KHKVdC3gJqbRM52Iq8v62ToQLgvcsEytB3SgJVAbR0%26wd%3D%26eqid%3D8d498001003b7191000000035f30afd5%22%5D; _pk_ses.100001.8cb4=*; __utma=30149280.637221786.1522650378.1573119693.1597026266.9; __utmc=30149280; __utmz=30149280.1597026266.9.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; dbcl2="189284129:FDZaIXXKmBU"; ck=LPqG; push_doumail_num=0; douban-profile-remind=1; __gads=ID=3073429e68e6a294:T=1597026329:S=ALNI_MZtbg-6aYKJGzPAR1079Z9BvbTcKg; ap_v=0,6.0; push_noty_num=0; _pk_id.100001.8cb4=101ed8a4922703c1.1522650376.9.1597027280.1573119666.; __utmb=30149280.167.7.1597027140424""",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"}
url = "https://www.douban.com/group/586674/discussion?start=0"
print(url)
r = requests.get(url=url,headers=header)
data = r.text
print(data)


OK,到这里,返回的数据我们已经拿到了,那么只需要从响应的数据中查到指定用户即可。代码如下:

result = data.find("https://www.douban.com/people/123456789/")#123456789为用户的豆瓣id,可在用户首页看到该id,类似于qq号,微信号
print(result)# 返回结果为-1,则查询为空,返回正常页码,则访问即可查询详细信息

到这里,基本功能已经完成,但是需要完善。因为接口“url = “https://www.douban.com/group/pu-shu/discussion?start=0””仅查了25条数据,没有查询更多的数据,因此,start这里我们需要写成一个变量。由于每页仅有25条数据,因此start的值其实就是0,25,50,75…步长为25的一个切片值。于是我修改了代码:

#程序:每页25条,因此步长25,搜索一百万页以内数据
for i in range(0,1000000,25):url = "https://www.douban.com/group/586674/discussion?start={0}".format(i)print(url)r = requests.get(url=url,headers=header3)data = r.textprint(data)

于是该程序就可以查询1000000/25页内的帖子信息了。
因为我在互相表扬组中发过帖子,因此我做了下测试,果真查到了我在表扬组中发的帖子,结果如下:

点击对应的链接,就可以到达我发贴子的列表页,很容易就能找到我发的帖子了。

附上所有代码:

# 豆瓣爬虫——查询某用户在小组发布的所有帖子
# author ---sf
import requests# 生活组 586674
# 互相表扬组 kuakua# 生活组
header={"Cookie": """__utmv=30149280.18928; douban-fav-remind=1; bid=1_33bHyMNKk; __yadk_uid=pulR7OghaIPqmJRPIxe3KhEJxut2tYer; trc_cookie_storage=taboola%2520global%253Auser-id%3Db09d96dd-31b1-4593-8d1c-4c578400c1e3-tuct2a38ca8; ll="128517"; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1597026264%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgQBOGEXypqcfy3ThMRX9I1KHKVdC3gJqbRM52Iq8v62ToQLgvcsEytB3SgJVAbR0%26wd%3D%26eqid%3D8d498001003b7191000000035f30afd5%22%5D; _pk_ses.100001.8cb4=*; __utma=30149280.637221786.1522650378.1573119693.1597026266.9; __utmc=30149280; __utmz=30149280.1597026266.9.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; dbcl2="189284129:FDZaIXXKmBU"; ck=LPqG; push_doumail_num=0; douban-profile-remind=1; __gads=ID=3073429e68e6a294:T=1597026329:S=ALNI_MZtbg-6aYKJGzPAR1079Z9BvbTcKg; ap_v=0,6.0; push_noty_num=0; _pk_id.100001.8cb4=101ed8a4922703c1.1522650376.9.1597027280.1573119666.; __utmb=30149280.167.7.1597027140424""",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"}# 程序:每页25条,因此步长25,搜索一百万页以内数据
for i in range(0,1000000,25):url = "https://www.douban.com/group/kuakua/discussion?start={0}".format(i)print(url)r = requests.get(url=url,headers=header)data = r.text# print(data)# ********* 用户IDresult = data.find("https://www.douban.com/people/*******/")print(result)# 返回结果为-1,则查询为空,返回正常页码,则访问即可查询详细信息

代码过于简单,由于不是硬需,所以也不想优化了。有兴趣的同学可以探究一下豆瓣的cookie,因为我在实践中,发现该接口的cookie处于实时变化中,每次调用接口,cookie都不一样。另外最后可以做个判断,把查询到的有结果的url全部存储起来,这样就不用盯着运行结果一条条看了。(我懒,不写了。)

注意:此操作存在一定风险,慎用。频繁访问豆瓣服务调取接口,我被豆瓣多次提醒账号异常,且暂时封号,不过改个密码就可以继续用了。

之后我又用了20分钟,写了个查询某用户在某个小组中的所有评论、点赞和转发信息,调试了一个小时。。[尴尬]其实就是多了一个正则表达式,找出所有的帖子id。
后续有时间再分享吧。
多疑的小姐妹可不用要这种方法去查男朋友有没有在什么劝分组里吐槽你哦[偷笑]!

分享使人快乐!-sf

python爬虫——豆瓣小组,查询某用户在小组中发布的所有帖子相关推荐

  1. python爬虫-豆瓣爬取数据保存为html文件

    接<python爬虫-豆瓣数据爬取-正则匹配>中的案例五,将爬取的豆瓣租房信息网址和标题保存为html文件. 脚本修改如下: # -*-coding:utf-8 -*- import re ...

  2. python爬虫 豆瓣影评的爬取cookies实现自动登录账号

    python爬虫 豆瓣影评的爬取cookies实现自动登录账号 频繁的登录网页会让豆瓣锁定你的账号-- 网页请求 使用cookies来实现的自动登录账号,这里的cookies因为涉及到账号我屏蔽了,具 ...

  3. Python爬虫豆瓣电影top250

      我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单   有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250.   打开链接,查看网页源代码,查找我们需要的信息的字 ...

  4. 第一篇CSDN博客 python爬虫豆瓣排名前250的电影

    ## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...

  5. python爬虫—豆瓣电影海报(按类别)

    原文地址:http://www.alannah.cn/2019/04/06/getdouban/ python爬虫-豆瓣电影海报 目标:通过python爬虫在豆瓣电影上按类别对电影海报等数据进行抓取, ...

  6. Python爬虫获取简书的用户、文章、评论、图片等数据,并存入数据库

    Python爬虫获取简书的用户.文章.评论.图片等数据,并存入数据库 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维 ...

  7. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  8. python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...

    原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...

  9. 爬虫-豆瓣书籍排行榜及用户信息-2021.7.23-使用Scrapy框架-用MongoDB存储数据

    1.环境 python3.8或python3.7 pycharm2021.2 MongoDB Scrapy 2.信息提取 2.1 创建Scrapy项目 在cmd模式下创建Scrapy项目 # 进入要存 ...

最新文章

  1. Angularjs相关文章地址
  2. Visual Studio 与 Eclipse,谁是最强 IDE?
  3. 复用Oracle数据文件,Oracle 多元复用数据库文件
  4. hashchange
  5. POJ 3279 Fliptile
  6. JDBC — JDBC之Insert方法
  7. Modelsim SE 下载安装、注册详细教程
  8. 春雷视频添加投屏功能解惑
  9. Edxposed研究之Magisk源码下载编译的详细实战教程
  10. zxr10交换机配置手册vlan_中兴交换机配置命令
  11. python 前缀和总结
  12. Linux4 移植 6410,linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)...
  13. python软件长什么样子图片_使用Python把多个图片拼接成为长图
  14. XYplorer的安装和使用
  15. 战争地带2100 mac版
  16. 【设计模式】我对设计模式的C语言解读(下)
  17. CF(Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
  18. grant change notification to 用户名的探究
  19. maven卸载强制性依赖
  20. 让我们并肩作战—机房合作

热门文章

  1. 分数换算小数补0法_数学 | 循环小数的循环节以及永远追不上的乌龟
  2. Apple Developer App 出现 未知错误 的解决办法
  3. 改default client等小技巧
  4. CC2640R2F学习笔记(1)——搭建环境、编译烧写
  5. 计算机网络知识点总结-第四章:网络层
  6. java中Boolean和boolean的区别
  7. advancedeast认识
  8. Qt 之格栅布局(QGridLayout)
  9. 【一步步学OpenGL 31】 -《PN(Point-Normal)三角形曲面细分》
  10. java无锁数据结构,无锁有序链表的实现