Python爬虫入门教程 12-100 半次元COS图爬取
半次元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图爬取的更多相关文章
- Python爬虫入门教程: 半次元COS图爬取
半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...
- Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二
蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...
- Python爬虫入门教程 15-100 石家庄政民互动数据爬取
石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为 http://www.sjz.gov.cn/col/14900 ...
- Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
写在前面 从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,CSDN学院,网易云课堂,慕课网 ...
- Python爬虫入门教程 18-100 煎蛋网XXOO图片抓取
写在前面 很高兴我这系列的文章写道第18篇了,今天写一个爬虫爱好者特别喜欢的网站煎蛋网http://jandan.net/ooxx,这个网站其实还是有点意思的,网站很多人写了N多的教程了,各种方式的都 ...
- Python爬虫入门教程 23-100 石家庄链家租房数据抓取
1. 写在前面 作为一个活跃在京津冀地区的开发者,要闲着没事就看看石家庄这个国际化大都市的一些数据,这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取 ...
- Python爬虫入门教程 21-100 网易云课堂课程数据抓取
写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...
- Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...
- Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...
随机推荐
- Shell编程-条件测试 | 基础篇
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...
- 深入理解CPP与C中bsearch函数的用法
·使用besearch函数的前提(一些废话) 首先让我们先亮出二分法的定义: https://baike.baidu.com/item/二分法/1364267 以及二分法实现的方法: https:// ...
- go 监听系统信号
linux 信号查看 kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFP ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习4
#include <iostream> using namespace std; const int strsize=30; const int BOPSIZE=5; void showm ...
- mysql的复习
. 着重号,区分字段和关键字的符号 +号是运算的 起别名,其中的as可以省略 ifnull(expr1,expr2),expr1代表输入的字段,expr2代表如果输入的字段是null则为expr2 条 ...
- linux的一些基础命令
Linux是基于Unix的开源免费的操作系统,是部署服务器的很好选择. 系统:win10 工具:vm虚拟机+Xshell/CRT 虚拟机的系统为linux centos 7 首先看一下linux的基 ...
- FTP连接超时
今天程序在连接FTP服务器,突然无法连接,用Windows 的 Explorer能正常连接,但用 WebRequest.WebResponse连接时,总是抛出连接超时异常. 后查找相关资料,原因是:程 ...
- poi导出Excel直接在浏览器下载
需求:导出成Excel格式,要在浏览器看到类似于下载的效果. 导出的Excel和下载在同一个目录下. xxController.java // 导出 @RequestMapping(value = & ...
- 关于阿里云Centos7 Mailx发送邮件失败的处理
开始通过配置系统自带的mail 发送邮件 在其中一台服务器怎么都不行 /etc/mail.rc配置: set from="邮箱名" set smtp="smtp.163. ...
- DOM与BOM
DOM 1.概念起源: 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结 ...