半次元COS图爬取-写在前面

今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 cosplay ,这种网站必然会有这个的存在啊,于是乎,我准备好我的大爬虫了。

把上面的链接打开之后,被我发现了吧,就知道我的第八感不错滴。接下来就是找入口,一定要找到图片链接的入口才可以做下面的操作

这个页面不断往下拖拽,页面会一直加载,当时当你拖拽一会,就停下来了,就是这个时机

发现入口,在我实际的操作中,其实还发现了很多其他的入口,这个就不一一的解释了,赶紧上车,进入 view more 之后,发现了页面依旧是一个下拉刷新的布局方式,专业术语 瀑布流

半次元COS图爬取-python爬虫第一步

打开开发者工具,切换到network之后,发现 很多xhr请求,发现这个,就代表这个网站很容易爬取了



提取待爬取的链接,分析规律

  1. https://bcy.net/circle/timeline/loadtag?since=0&grid_type=timeline&tag_id=1482&sort=hot
  2. https://bcy.net/circle/timeline/loadtag?since=26499.779&grid_type=timeline&tag_id=1482&sort=hot
  3. https://bcy.net/circle/timeline/loadtag?since=26497.945&grid_type=timeline&tag_id=1482&sort=hot

发现只有一个参数在变,而且这变化好像没有任何规律可以寻找,没事,看数据,你就可以发现其中的奥妙了



这个网站的原理很简单,就是通过不断获取每次数据的最后一条的since然后获取接下来的数据,那么我们按照它的规律实现代码就可以了,不要多线程了,这种规律是没有办法进行实操的。

这次的数据我把它存储到mongodb里面,因为没有办法一次全部获取到,所以可能需要下次在继续使用

  1. if __name__ == '__main__':
  2. ### mongodb 的一些基本操作
  3. DATABASE_IP = '127.0.0.1'
  4. DATABASE_PORT = 27017
  5. DATABASE_NAME = 'sun'
  6. start_url = "https://bcy.net/circle/timeline/loadtag?since={}&grid_type=timeline&tag_id=399&sort=recent"
  7. client = MongoClient(DATABASE_IP, DATABASE_PORT)
  8. db = client.sun
  9. db.authenticate("dba", "dba")
  10. collection = db.bcy # 准备插入数据
  11. #####################################3333
  12. get_data(start_url,collection)

获取网页数据这个地方,由我们前面的经验就变得很简单了

  1. ## 半次元COS图爬取-获取数据函数
  2. def get_data(start_url,collection):
  3. since = 0
  4. while 1:
  5. try:
  6. with requests.Session() as s:
  7. response = s.get(start_url.format(str(since)),headers=headers,timeout=3)
  8. res_data = response.json()
  9. if res_data["status"] == 1:
  10. data = res_data["data"] # 获取Data数组
  11. time.sleep(0.5)
  12. ## 数据处理
  13. since = data[-1]["since"] # 获取20条数据的最后一条json数据中的since
  14. ret = json_handle(data) # 代码实现在下面
  15. try:
  16. print(ret)
  17. collection.insert_many(ret) # 批量出入数据库
  18. print("上述数据插入成功!!!!!!!!")
  19. except Exception as e:
  20. print("插入失败")
  21. print(ret)
  22. ##
  23. except Exception as e:
  24. print("!",end="异常,请注意")
  25. print(e,end=" ")
  26. else:
  27. print("循环完毕")

网页解析代码

  1. # 对JSON数据进行处理
  2. def json_handle(data):
  3. # 提取关键数据
  4. list_infos = []
  5. for item in data:
  6. item = item["item_detail"]
  7. try:
  8. avatar = item["avatar"] # 用户头像
  9. item_id = item["item_id"] # 图片详情页面
  10. like_count = item["like_count"] # 喜欢数目
  11. pic_num = item["pic_num"] if "pic_num" in item else 0 # 图片总数
  12. reply_count =item["reply_count"]
  13. share_count =item["share_count"]
  14. uid = item["uid"]
  15. plain = item["plain"]
  16. uname = item["uname"]
  17. list_infos.append({"avatar":avatar,
  18. "item_id":item_id,
  19. "like_count":like_count,
  20. "pic_num":pic_num,
  21. "reply_count":reply_count,
  22. "share_count":share_count,
  23. "uid":uid,
  24. "plain":plain,
  25. "uname":uname})
  26. except Exception as e:
  27. print(e)
  28. continue
  29. return list_infos

到现在就实现了,代码跑起来

想要源码的,在评论里面留言自己的邮箱或者其他任何我能联系到你的方式都可以哒。

Python爬虫入门教程 12-100 半次元COS图爬取的更多相关文章

  1. Python爬虫入门教程: 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  2. Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二

    蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...

  3. Python爬虫入门教程 15-100 石家庄政民互动数据爬取

    石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为 http://www.sjz.gov.cn/col/14900 ...

  4. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取

    写在前面 从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,CSDN学院,网易云课堂,慕课网 ...

  5. Python爬虫入门教程 18-100 煎蛋网XXOO图片抓取

    写在前面 很高兴我这系列的文章写道第18篇了,今天写一个爬虫爱好者特别喜欢的网站煎蛋网http://jandan.net/ooxx,这个网站其实还是有点意思的,网站很多人写了N多的教程了,各种方式的都 ...

  6. Python爬虫入门教程 23-100 石家庄链家租房数据抓取

    1. 写在前面 作为一个活跃在京津冀地区的开发者,要闲着没事就看看石家庄这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取 ...

  7. Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...

  8. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...

  9. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

随机推荐

  1. Extjs在树上加右键菜单--2019-04-15

    效果图如下: 使用规则:将监听加到按钮或树上,监听代码如下. 代码如下: listeners : { //节点单击事件 'rowcontextmenu' : function(view, record ...

  2. JWT 超详细分析

    请参考以下链接 https://learnku.com/articles/17883

  3. 绕最新版安全狗-附上sqlmap的tamper

    在t00ls 里面我发的,放博客分享 记录一下 小菜写文章,太菜 希望大佬放过我!  主要分享一下,绕狗的思路环境:windows7 + phpstudy + safedog v4.0  + Mysq ...

  4. C# 去除\0

    在做项目的时候遇到了这种情况,如图 这个字符串包含了好多的\0,等你放大查看的时候又什么都不显示,十分惹人烦,哈哈 网上有的解决办法说 tmpStr.TrimEnd("\0");但 ...

  5. windows10计划任务启动bat执行jar打包的jar文件

    今天公司要用bat文件执行jar打包的java文件,运行没项目的程序,并且用任务计划开机自启,今天记录下坑 系统:win10 一.编写.bat执行用jar打包的jar文件 @echo off java ...

  6. python学习:continue及break使用

    continue及break使用 #continue 作用:结束本次循环,继续下次循环#break 作用:跳出整个当次循环 for i in range(10): if i < 5: conti ...

  7. vue-cli跳转到新页面的顶部

    我这里有两种方法都是可以用的 1,利用vue-router的默认模式hash,可以记录上一页的位置,如果需要点话,如果没有记录,在进入新页面的时候是返回到新页面的最顶部的 scrollBehavior ...

  8. EF的简单认识

    EF的简单认识   EF简介 EntityFramwork是微软提供的一款ORM框架(Object Relational Mapping),实体映射模型,它的底层是ADO.NET的机制,使用EF将省去 ...

  9. python—迭代器、生成器

    1.迭代器(iteration) 迭代器协议:提供next()方法,该方法要么返回迭代的下一项,要么异常.(只能往后走) 可迭代对象:实现迭代器协议的对象. **字符串.列表.元祖.字典.集合.文件都 ...

  10. 整理4种Vue组件通信方式

    整理4种Vue组件通信方式 重点是梳理了前两个,父子组件通信和eventBus通信,我觉得Vue文档里的说明还是有一些简易,我自己第一遍是没看明白. 父子组件的通信 非父子组件的eventBus通信 ...