Python爬虫学习记录——7.数据入库之MongoDB

文章目录

MongoDB

  1. 什么是MongoDB
    MongoDB是一个高性能,开源,无模式的文档型数据库
    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成

  2. MongoDB相关的安装
    这里仅列出Windows系统的安装方法。

    1. 推荐博客:https://zhuanlan.zhihu.com/p/29986675,博客中给出了详细的MongoDB数据库、可视化工具RoboMongo和MongoDB的PyCharm插件——Mongo Plugin的安装步骤和方法,可按照步骤安装并测试连接
    2. Python用于操作MongoDB的第三方库pymongo安装: pip install pymongo
  3. MongoDB在Python中的基本使用
    这里通过一个简单的例子展示使用pymongo连接MongoDB数据库,并插入数据

#! /usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import MongoClient
client = MongoClient()
db = client.test #连接test数据库,没有则自动创建
my_set = db.set #使用set集合,没有则自动创建
my_set.insert({'name':'Vinie','age':24})#插入一条数据

插入的数据可在MongoDB的test数据库的set集合中找到

实战

爬取拉勾网有关“爬虫”的职位信息,并把爬取的数据存储在MongoDB数据库中

步骤

  1. 首先前往拉勾网“爬虫”职位相关页面
  2. 确定网页的加载方式是JavaScript加载
  3. 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是POST
  4. 使用requests的post方法获取数据,发现并没有返回想要的数据,说明需要加上headers
  5. 加上headers的’Cookie’,’User-Agent’,’Referer’等信息,成功返回数据
  6. 再把返回的对应数据存储到MongoDB

代码实现

  1. 爬取单页数据
#! /usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import MongoClient
import requests

client = MongoClient()
db = client.lagou #创建一个lagou数据库
my_set = db.job #创建job集合

url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'
payload = {
    'first':'true',
    'pn':'1',
    'kd':'爬虫',
}

headers = {
    'Cookie':'',
    'User-Agent':'',
    'Referer':'',
} #填入对应的headers信息

response = requests.post(url, data = payload, headers = headers) #使用POST方法请求数据,加上payload和headers信息
my_set.insert(response.json()['content']['positionResult']['result']) #把对应的数据保存到MOngoDB
  1. 爬取多页数据.
    定义一个函数爬取多页的数据;使用fake-Agent包随机选取User-Agent
    关于fake-Agent的详细介绍,可以参考其官方文档:https://pypi.org/project/fake-useragent/
#! /usr/bin/env python
# -*- coding:utf-8 -*-

import requests
from pymongo import MongoClient
import time
from fake_useragent import UserAgent

client = MongoClient()
db = client.lagou
lagou = db.PHP #创建PHP集合

headers = {
            'Cookie':'',
            'Referer':'',
        } #对应的headers信息

def get_job_info(page, kd): #加入一个职位参数kd
    for i in range(page):
        url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'
        payload = {
            'first': 'true',
            'pn': i,
            'kd': kd,
        }

        ua = UserAgent() 
        headers['User-Agent'] = ua.random #使用fake-Agent随机生成User-Agent,添加到headers
        response = requests.post(url, data=payload, headers=headers)

        if response.status_code == 200:
            job_json = response.json()['content']['positionResult']['result']
            lagou.insert(job_json)
        else:
            print('Something Wrong!')

        print('正在爬取' + str(i+1) + '页的数据...')
        time.sleep(3)

if __name__ == '__main__':
    get_job_info(3, 'PHP') #爬取前3页的PHP职位信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赈川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值