美文网首页
1-7 数据入库及MongoDB(案例二:爬取拉勾网)

1-7 数据入库及MongoDB(案例二:爬取拉勾网)

作者: pnjoe | 来源:发表于2018-06-28 11:57 被阅读79次

MongoDB:

1. 什么是MongoDB

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

2. MongoDB相关的安装

Windows的安装方法:
MongoDB 官网地址:https://www.mongodb.com/


我在安装3.6版本的过程中会卡死(如下图)。我刚开始误以为是正常的,电脑没关跑一夜...T_T

查阅了网上资料,我并不孤单,解决办法是在安装过程中,不要勾选Install MongoDB Compass
image.png
去掉勾选
知道怎么避开上面的大坑后,就可以照小歪老师的安装教程去安装吧。
  1. 小歪老师在自己的知乎专栏MongoDB及可视化工具的安装中给出了详细的MongoDB数据库、可视化工具RoboMongo和MongoDB的PyCharm插件——Mongo Plugin的安装步骤和方法,可按照步骤安装并测试连接
  2. Python用于操作MongoDB的第三方库pymongo安装
```
pip install pymongo

```

Mac OS的安装方法:

  1. 参考Mac OSX 平台安装 MongoDB安装,可视化工具RoboMongo安装方法与Windows平台大致相同。
  2. MongoDB的PyCharm插件——Mongo Plugin安装: Preferences——Plugins——Mongo Plugin,安装完成后重启PyCharm可发现右侧有Mongo Explorer
  3. Python用于操作MongoDB的第三方库pymongo安装
```
pip install pymongo

```
  1. 测试连接
```
首先需要使用以下方法在终端启动MongoDB
cd /usr/local/mongodb/bin
sudo ./mongod
然后在PyCharm右侧的Mongo Explorer连接localhost:27017即可

```

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集合中找到


实战

爬取拉勾网里关键词为“爬虫”的相关职位信息


拉勾网有对爬虫做了反爬处理。
直接发起requests,会出错。
请求头部,加上Referer,User-Agent,可以连续爬取几页信息后,会报错。再加上Cookie。就解决了。

import requests
from pymongo import MongoClient
import time

client = MongoClient()
db = client.lagou
my_set = db.job

url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"

def get_job_info(page,kd):
    for i in range(page):
        payload ={
            "first": "true",
            "pn": i+1,
            "kd": kd
        }

        headers = {
            "Cookie": "JSESSIONID=ABAAABAAAFCAAEGA357942019E2E1BC54FEA21772A7C75A; user_trace_token=20180626175355-c28a0798-703d-474a-bdf5-db6e78ef76f1; _ga=GA1.2.86233454.1530006829; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1530006829; LGUID=20180626175356-d72c696f-7926-11e8-9759-5254005c3644; SEARCH_ID=c9988e2253c6479f97d87324482689c3; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1530006846; LGRID=20180626175413-e160efe2-7926-11e8-b104-525400f775ce",
            "Referer": "https://www.lagou.com/jobs/list_%E7%88%AC%E8%99%AB?labelWords=&fromSearch=true&suginput=",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"
        }

        r = requests.post(url,data=payload,headers=headers)
        if r.status_code == 200:
            my_set.insert(r.json()["content"]["positionResult"]["result"])
        else:
            print("somnething wrong!")
        print ("正在爬取第"+str(i+1)+"页")
        time.sleep(3)
        
        
if __name__ == '__main__':
    get_job_info(30,"爬虫")
最终存储到Mongo里的数据

相关资料

1. MongoDB

2. POST请求

3. fake-useragent包

相关文章

网友评论

      本文标题:1-7 数据入库及MongoDB(案例二:爬取拉勾网)

      本文链接:https://www.haomeiwen.com/subject/hydiyftx.html