爬虫实战:requests爬取gif图链接存入mongodb
2020-05-30 本文已影响0人
后山小鲨鱼
1.安装并启动mongodb
解压,进入bin文件夹,新建data文件夹,打开cmd控制台,启动。
mongod.exe --dbpath=data
2.安装robo3T
用来看mongodb的数据
打开下载好的文件
选择第一个安装
安装完成后
只需填上name,即可连接刚才打开的mongodb
- 分析网站
可以看到,里面各种沙雕gif
我们要做的就是把它图片的名字和链接保存下来(不用下载)。
那就要分析它图片的名字和链接是以什么形式存在了,一般有两种情况,
- 直接落地页链就返回相关数据
- ajax返回json数据。
f12打开控制台
切换到network选项卡
一大堆链接
大部分是资源链
先看一下落地页
可以看到落地页返回的内容里面,就有我们想要的信息。
alt属性是图片的名称
data-original是它的gif链接
现在把页面拉到最底
有分页,一共296页
点第二页的时候,发现落地页为。
可以推测,想要爬取第几页的数据,就修改数字就行了。代码如下:
import requests
import time
from lxml import etree
import pymongo
# 连接数据库
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# 连接db
mydb = myclient["gifdb"]
# 连接集合
mycol = mydb["gifs"]
# 删除所有数据
mycol.delete_many({})
# 爬取297页的数据
for i in range(1, 297):
# print(i)
if i == 1:
url = 'https://www.52doutu.cn/pic/'
else:
url = 'https://www.52doutu.cn/pic/'+str(i)+"/"
# header头
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
# 请求链接
r = requests.get(url, headers= header)
# 将源码转化为能被XPath匹配的格式
html = etree.HTML(r.text)
# 返回为一个列表
nameLists = html.xpath('//img[@class="lazyload"]/@alt')
# 返回为一个列表
gifLinkLists = html.xpath('//img[@class="lazyload"]/@data-original')
# 用来存储一条json数据
dataJson = {}
for j in range(len(nameLists)):
# 落地页
dataJson["referUrl"] = url
# gif名称
dataJson["gifName"] = nameLists[j]
# gif链接
dataJson["gifLink"] = gifLinkLists[j]
# 存储的时间
timeStamp = round(time.time())
localTime = time.localtime(timeStamp)
strTime = time.strftime("%Y-%m-%d %H:%M:%S", localTime)
dataJson["getTime"] = strTime
# 插入一条json数据到mongodb
mycol.insert_one(dataJson)
# 制空json
dataJson = {}
# 设定一定的延时,不要太频繁,这样对大家都不好。爬崩了别人的网站,网站会增加反爬虫手段,这样我们就不能愉快的玩耍了。
time.sleep(0.2)
这样,就可以爬取到数据到mongodb了。
我们打开mongodb
查看一下数量
17704条
要这些沙雕图有啥用?
我也不知道,就想拿来练习一下。