专栏名称: dwzb
目录
相关文章推荐
都市报道  ·  不要拔!不要拔!快住手 ·  18 小时前  
福州疾控  ·  “肺” 同小可!3 月 22 ... ·  昨天  
福州疾控  ·  “肺” 同小可!3 月 22 ... ·  昨天  
内蒙古掌上12348  ·  几点睡,几点起,睡多久?睡眠健康参考来了→ ·  昨天  
泗县人网上家园  ·  最适合补钙的春天,这几种菜建议多吃! ·  2 天前  
51好读  ›  专栏  ›  dwzb

xpath+mongodb抓取伯乐在线实战

dwzb  · 掘金  ·  · 2018-04-14 13:23

正文

使用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()

存到数据库的结果如下







请到「今天看啥」查看全文