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还是比较有名和有意思的. 下面是百思不得姐的 ...
随机推荐
- jdk1.8安装
jdk1.8:链接: https://pan.baidu.com/s/1Orv7Rjz0jkprcdoRSFWiPw 提取码: rn73 设置jdk和jre文件位置 配置环境变量: 系统变量中jdk ...
- SpringBoot的自动配置原理
一.入口 上篇注解@SpringBootApplication简单分析,说到了@SpringBootApplication注解的内部结构, 其中@EnableAutoConfiguration利用En ...
- APIO2017总结
T1爆零,T2四分,实力滚粗,OI再见. 四年亚太,回到起点,辣鸡捆绑,毁我青春.
- 为什么在Python里推荐使用多进程而不是多线程?
最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景: 1. ...
- 彻底卸载Windows Service
前言,我使用Quartz.net + quartz.config + quartz_jobs.xml 写了个Windows Service,使用如下bat脚本执行服务的安装,启动,暂停,卸载 @ech ...
- Error: Unable to access xxx.jar
在cmd中运行java -jar xxx.jar出现如下错误: Error: Unable to access xxx.jar 解决方法: 使用绝对路径:java -jar D:\Program Fi ...
- 使用Axis2创建一个简单的WebService服务
使用过Java进行过WebService开发都会听过或者接触过Apache Axis2,Axis2框架是应用最广泛的WebService框架之一了. 这里使用Axis2来开发和部署一个最简单的WebS ...
- Openstack的视频学习
0.安装环境准备 部署架构: 网络模式(红色Net0为管理网络,Net1接外网,Net2是接虚拟机网络流量的): 虚拟化平台为VirtualBox,虚拟网络Host-Only网络的配置: Net0:管 ...
- 【数据结构】红黑树与跳表-(SortSet)-(TreeMap)-(TreeSet)
SortSet 有序的Set,其实在Java中TreeSet是SortSet的唯一实现类,内部通过TreeMap实现的:而TreeMap是通过红黑树实现的:而在Redis中是通过跳表实现的: Skip ...
- 替换url中的域名
/** * * @param domain 域名 * @param port 端口号 * @param url url路径 * @return ...