美文网首页Python 爬虫我爱编程
【Python爬虫】数据入库之MongoDB

【Python爬虫】数据入库之MongoDB

作者: 倔强的潇洒小姐 | 来源:发表于2018-05-11 16:30 被阅读271次

1、什么是MongoDB

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

2、 MongoDB相关的安装

Windows的安装方法:
1、详见知乎专栏MongoDB及可视化工具的安装,可按照步骤安装并测试连接
2、安装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、安装MongoDB的第三方库pymongo
4、测试连接

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

3、MongoDB在Python中的基本使用

通过一个简单的例子展示使用pymongo连接MongoDB数据库,创建数据库、创建表并插入数据

# -*- coding: utf-8 -*-
# __author__ = 'Carina'


from pymongo import MongoClient


client = MongoClient()
# 连接test数据库,没有则自动创建
db = client.test
# 使用zyp集合,没有则自动创建
my_set = db.zyp

my_set.insert({"name":"carina","age":18,"job":"software test"})

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

效果图.png

实战环节

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

1、访问拉勾网“爬虫”职位相关页面
2、确定网页的加载方式:此处是JavaScript加载
3、通过谷歌浏览器开发者工具(或者抓包工具)分析和寻找网页的真实请求,确定真实数据在positionAjax开头的链接里,请求方式是POST
4、使用requests的post方法获取数据,发现并没有返回想要的数据,说明需要加上headers
5、加上headers的“Cookie”,“User-Agent”,“Referer”等信息,成功返回数据(需要添加什么,可以比对常规头信息,然后一个个试)
6、再把返回的对应数据存储到MongoDB

爬取单页数据
image.png

代码:

# -*- coding: utf-8 -*-
# __author__ = 'Carina'

import requests
from pymongo import MongoClient


client = MongoClient()
# 连接test数据库,没   有则自动创建
db = client.lagou
# 使用set集合,没有则自动创建表
my_set = db.job

#my_set.insert({"name":"carina","age":18,"job":"software test"})

url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E6%9D%AD%E5%B7%9E&needAddtionalResult=false'

payload = {
    "first": "true",
    "pn": "1",
    "kd": "爬虫",
}

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

response = requests.post(url, data=payload, headers=headers)

#print(response.text)
# 把对应的数据保存到MongoDB
my_set.insert(response.json()['content']['positionResult']['result'])       
效果.png
爬取多页数据

1、定义一个函数爬取多页的数据
2、使用fake-Agent包随机选取User-Agent(伪装请求头中的User Agent值)

代码:

# -*- coding: utf-8 -*-
# __author__ = 'Carina'

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


client = MongoClient()
# 连接test数据库,没有则自动创建
db = client.lagou
# 使用set集合,没有则自动创建表
my_set = db.job

headers = {
    "Cookie": "",
    "Referer": "",
}

def get_job_info(page, kd):
    for i in range(page):
        url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E6%9D%AD%E5%B7%9E&needAddtionalResult=false'
        payload = {
           "first": "true",
           "pn": i,
           "kd": kd,
        }
        ua = UserAgent()
        #使用fake-Agent随机生成User-Agent,添加到headers
        headers["User-Agent"] = ua.random
        response = requests.post(url, data=payload, headers=headers)

        if response.status_code == 200:
            job_json = response.json()['content']['positionResult']['result']
            my_set.insert(job_json)
        else:
            print("something wrong!")

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


if __name__ == "__main__":
    get_job_info(3, "产品经理")   # 爬取3页的产品经理数据

PS:对于一些Ajax加载的请求不太好分析的(爬虫难爬时),比如访问新浪微博,这时可以使用移动端地址进行访问,因为移动端的字段反爬会做的比较少,https://weibo.cnhttps://m.weibo.cn

image.png

补充资料

1、MongoDB

2、POST请求

3、fake-useragent包

相关文章

网友评论

    本文标题:【Python爬虫】数据入库之MongoDB

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