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

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

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

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

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

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

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



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

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

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



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

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

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

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

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

网页解析代码

# 对JSON数据进行处理
def json_handle(data):
# 提取关键数据
list_infos = []
for item in data:
item = item["item_detail"]
try:
avatar = item["avatar"] # 用户头像
item_id = item["item_id"] # 图片详情页面
like_count = item["like_count"] # 喜欢数目
pic_num = item["pic_num"] if "pic_num" in item else 0 # 图片总数
reply_count =item["reply_count"]
share_count =item["share_count"]
uid = item["uid"]
plain = item["plain"]
uname = item["uname"]
list_infos.append({"avatar":avatar,
"item_id":item_id,
"like_count":like_count,
"pic_num":pic_num,
"reply_count":reply_count,
"share_count":share_count,
"uid":uid,
"plain":plain,
"uname":uname})
except Exception as e:
print(e)
continue
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. base加密解密工具类

    public class MLDUtil { public static Key DEFAULT_KEY = null; public static final String DEFAULT_SECR ...

  2. C#的排序Sort和OrderBy扩展方法

    可以实现一个IComparable接口的CompareTo方法,或者是给予List的Sort扩展方法,传入委托实现,举个例子: list.Sort((a, b) => { var o = a.s ...

  3. The First of my text

    JavaScript 学习第一天 一.属性可以动态拓展 例如: var person = { name : "zs"; age : 21; } person.sex = " ...

  4. angular.lowercase()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. mysql远程访问以及权限设置

    前几天看见有人问数据库怎么远程访问,当时想不是很简单么,以前就用Navicat连接过服务器数据库,一连就连上了.然后自己试了试...不行.什么情况??!!!报的错误是100061,网上一搜,是权限问题 ...

  6. Vue-router重修01

    ---恢复内容开始--- 1.在vue中获取dom vue中不建议您亲自进行dom操作 vue实例内置ref属性存储或获取相应的dom元素 <div ref="dv"> ...

  7. 多路分支----switch语句

    switch-case与if-else有相似的作用,都是表达分支的方式. 语法形式: switch(type){ case 常量1: do something; break; case 常量2: do ...

  8. Centos服务器上NFS灾备环境及KVM的搭建及使用

    1.概述 由于在单台服务器上搭建灾备环境需要KVM和NFS的支持,下面先列出KVM的搭建流程,再列出使用NFS实现单台服务器灾备的流程. A.搭建KVM环境 1>.主机环境准备 Linux Sy ...

  9. microk8s

    https://microk8s.io/ video guide: sudo snap install microk8s --classic #snap install microk8s --clas ...

  10. promise的异步链式调用

    场景:  淘米  干净的米下锅  蒸米饭  吃米饭 ;这几个步骤是一个接着一个执行, 也就是只有前面的做完后, 才会去做后面的. 并且每一步都需要用一部分时间去执行. function deal(ta ...