python爬虫爬虫实战

爬虫实战:requests爬取gif图链接存入mongodb

2020-05-30  本文已影响0人  后山小鲨鱼

1.安装并启动mongodb

https://www.mongodb.com/download-center/community
下载zip包

解压,进入bin文件夹,新建data文件夹,打开cmd控制台,启动。

mongod.exe --dbpath=data

2.安装robo3T
用来看mongodb的数据

https://robomongo.org/

打开下载好的文件

选择第一个安装
安装完成后


只需填上name,即可连接刚才打开的mongodb

  1. 分析网站

https://www.52doutu.cn/pic/

可以看到,里面各种沙雕gif
我们要做的就是把它图片的名字和链接保存下来(不用下载)。
那就要分析它图片的名字和链接是以什么形式存在了,一般有两种情况,

f12打开控制台
切换到network选项卡



一大堆链接
大部分是资源链
先看一下落地页


可以看到落地页返回的内容里面,就有我们想要的信息。
alt属性是图片的名称
data-original是它的gif链接

现在把页面拉到最底

有分页,一共296页
点第二页的时候,发现落地页为。

https://www.52doutu.cn/pic/2/

可以推测,想要爬取第几页的数据,就修改数字就行了。代码如下:

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条
要这些沙雕图有啥用?
我也不知道,就想拿来练习一下。

上一篇下一篇

猜你喜欢

热点阅读