xpath+mongodb抓取伯乐在线实战

790 阅读1分钟
原文链接: zhuanlan.zhihu.com

使用lxml库的xpath语法抓取伯乐在线的python爬虫部分文章,将数据存储到mongodb。本文主要练习xpath语法的使用和存储mongodb数据库的方式。

关于xpath的使用可以参考这篇文章xpath全面总结

import requests # 导入网页请求库
from lxml import etree # 导入网页解析库
from pymongo import MongoClient

def start_requests(url):
    r = requests.get(url)
    return r.content

def parse(text):
    html = etree.HTML(text)
    divs = html.xpath('//div[@id="archive"]//div[@class="post-meta"]')
    for div in divs:
        # 一个中间变量
        comment = div.xpath('./p/a[3]/text()')

        # 使用生成器返回字典
        yield {
        'title': div.xpath('./p/a[1]/text()')[0],
        'url': div.xpath('./p/a[1]/@href')[0],
        'time': div.xpath('./p//text()')[2].strip('· \r\n'),
        'type':div.xpath('./p/a[2]/text()')[0],
        'typeurl':div.xpath('./p/a[2]/@href')[0],
        'comment':comment[0] if comment else None,
        'excerpt': div.xpath('./span[@class="excerpt"]/p/text()')[0]
        }

def get_all(): # 抓取所有页面,返回包含所有信息的生成器
    for i in range(1, 6): # 循环抓取所有页
        url = 'http://python.jobbole.com/tag/%E7%88%AC%E8%99%AB/page/{}/'.format(i)
        text = start_requests(url)
        yield from parse(text)

def main():
    client = MongoClient() # 连接数据库
    db = client.bole # 创建名为bole的数据库
    boledb = db.bole # 在bole数据库中创建表
    for item in get_all():
        boledb.insert_one(item) # 插入文档
    client.close() # 断开连接

if __name__ == '__main__':
    main()

存到数据库的结果如下

阅读上面代码需要下面的基础知识

1.爬虫基本原理

2.mongodb的安装和使用,看这两篇文章

3.xpath语法

xpath全面总结

4.在爬虫中使用生成器

爬虫代码改进(三)

专栏信息

专栏主页:python编程

专栏目录:目录

爬虫目录:爬虫系列目录

版本说明:软件及包版本说明