python爬虫入库到帝国cms_【Python爬虫】数据入库之MongoDB

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.cn、https://m.weibo.cn

image.png

补充资料

1、MongoDB

学习更多关于MongoDB语法的知识:MongoDB 3.4 中文文档

可以在Github的PyMongo中学习到更多pymongo包的用法

2、POST请求

阅读更加复杂的 POST 请求,学习关于requests的POST请求方法的用法

3、fake-useragent包

前往fake-useragent 0.1.7官方文档,学习更多fake-useragent的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值