读书笔记(5)——python爬取糗事百科,写入Mongo

本文介绍如何使用Python爬虫抓取糗事百科的内容,并利用pymongo模块将抓取到的数据存储到MongoDB数据库中。文章详细展示了从安装MongoDB、配置数据存储路径到Python代码实现的全过程。

Mongo实际上是以文档、集合、数据库的形式。

文档有唯一的一个ID,类似python里的字典,数据以key-value的形式存储其中,但是键值对是有顺序的,顺序不同文档也是不同的。

集合是在MongoDB中的一组文档,类似关系型数据库中的数据表。

一个MongDB中可以建立多个数据库,默认数据库为“db”,在MongDB的shell窗口中,使用show dbs命令可以查看所有的数据库,使用db命令可以看当前的数据库。

安装Mongo:去https://www.mongodb.com/download-center下载Mongo

153357_hoj4_3629884.png

进行安装。安装后可以看到如下:其中那个mongodb-win32-x86_64-2008plus-ssl是安装包,data是设置的数据存储文件。

153455_DnEU_3629884.png

前面说的设置数据存储路径具体操作如下:

mongod -dpath 路径
例如:mongod -dpath F:\常用软件\MongoDB\data

然后就会开启mongDB服务:

160054_zE9x_3629884.png

mongDB服务不用关闭,用以接下来的python连接,否则会出错

python操作Mongo的模块是pymongo,通过pip安装:

pip install pymongo

爬虫代码仍然使用上次的爬取糗事百科的代码,对其进行改造:

#-*- coding-8 -*-

import pymongo
import requests
import lxml
from bs4 import BeautifulSoup


def craw(url,page = '1'):
    user_agent = 'Mozilla/4.0 (compatible; MISE 5.5; Windows NT)'
    headers = {'User_Agent':user_agent}
     
    url_text = requests.get(url,headers = headers)
    if url_text.status_code != 200:
        url_text.encoding = 'utf-8'
        print('ERROR')
        
    soup = BeautifulSoup(url_text.text,'lxml')

    contents = soup.select(r'.content')
    names = soup.find_all('h2')
    n = 1
    client = pymongo.MongoClient(host='localhost',port=27017)
    qiushi = client['qiushi']
    newsdata = qiushi['newsdata']
    
    for content,name in zip(contents,names):
        print('第%s趣事'%n)
        n += 1
        name = name.get_text()
        content = content.get_text()
        print('用户名:'+name+'内容:'+content)
        data = {
        'name':name,
        'content':content
                }
        newsdata.insert_one(data)
        
    for i in newsdata.find():
        print(i)

if __name__ == '__main__':
    url = r'https://www.qiushibaike.com/'
    s1 = craw(url)
    

 

具体改动:

    client = pymongo.MongoClient(host='localhost',port=27017)
    qiushi = client['qiushi']
    newsdata = qiushi['newsdata']
    

连接Mongo,选择或创建一个数据库,选择或创建一个数据集合

    for content,name in zip(contents,names):
        print('第%s趣事'%n)
        n += 1
        name = name.get_text()
        content = content.get_text()
        print('用户名:'+name+'内容:'+content)
        data = {
        'name':name,
        'content':content
                }
        newsdata.insert_one(data)
        

创建一个字典,插入一行数据:

newsdata.insert_one(data)

输出数据:

    for i in newsdata.find():
        print(i)

结果如下:

164621_WfvZ_3629884.png

转载于:https://my.oschina.net/u/3629884/blog/1492901

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值