爬虫日记(4)—定向爬虫与mongdb和redis的集合

定向爬虫最重要的我个人认为是xpath语句的书写,其他的都比较容易理解
关于mongodb和redis的基本语法,这里就不在赘述,有很多关于这方面的博客,可以看一下。
直接上代码吧,注释写的也比较清晰容易理解
import requests
import lxml.etree
import redis
import pymongo


# 初始化redis数据库
client = redis.StrictRedis()
# 初始化mongodb数据库
db = pymongo.MongoClient()
database = db.chapter_5
handle = database.book


def get_url():
# 这个函数主要是请求书本主页,为了获取每一章节的详细地址
    url = 'http://dongyeguiwu.zuopinj.com/5525/'
    html = requests.get(url).content.decode('utf-8')
    # HTML方法构造xpath对象
    source = lxml.etree.HTML(html)
    url_list = source.xpath('/html/body/div[2]/div[2]/div/ul/li/a/@href')
    print(url_list)
    # 将获取到的网址存入redis数据库
    for url in url_list:
        client.lpush('url_queue',url)


def req():
    content_list = []
    # 从redis数据库中获取url标识码,用request库中的函数循环请求获取网页源码
    while client.llen('url_queue')>0:
        url = client.lpop('url_queue').decode()
        source = requests.get(url).content
        selector = lxml.etree.HTML(source)
        chapter_name = selector.xpath('/html/body/div[2]/div/div[2]/div[1]/h1/text()')[0]
        content = selector.xpath('/html/body/div[2]/div/div[2]/div[3]/p/text()')
        content_list.append({'title':chapter_name,'content':'\n'.join(content)})
    # 将爬取到的数据写入mongodb数据库
    handle.insert(content_list)

if __name__ == '__main__':
    get_url()
    req()

写在文末:
本来用list【】其实就已经足够日常的定向爬虫使用,当基于mongdb数据库的特性,不适于经常更新,所以将其暂存于redis数据库中,redis是基于内存的软件,读写速度更快,然后集成的写入mongdb数据库便于长期保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值