使用bs4对海投网内容信息进行提取并存入mongodb数据库

example:    http://xyzp.haitou.cc/article/722427.html

首先是直接下载好每个页面,可以使用 os.system( "wget "+str(url))  或者urllib2.urlopen(url) ,很简单不赘述。

然后,重头戏,进行信息抽取:

#!/usr/bin/env python
# coding=utf-8

from bs4 import BeautifulSoup
import codecs
import sys
import os
reload(sys)
sys.setdefaultencoding("utf-8")
import re

from pymongo import MongoClient

def get_jdstr(fname):
    soup = ""
    retdict = {}
    with open(fname) as fr:
        soup = BeautifulSoup(fr.read().replace(‘""‘,‘"‘))

    jdstr = soup.get_text()

    retdict["inc_name"] = soup.title.string.split()[0]
    retdict["page_content"] = soup.find_all("div","panel-body panel-body-text")[0].get_text()
    retdict["index_url"] = re.search("http://xyzp.haitou.cc/article/\d+.html",jdstr).group()
    retdict["info_from"] = soup.find_all("p","text-ellipsis")[0].contents[1].get_text()
    retdict["workplace"] = soup.find_all("p","text-ellipsis")[1].contents[1].get_text()
    retdict["info_tag"] = soup.find_all("p","text-ellipsis")[2].contents[1].get_text()
    retdict["pub_time"] = soup.find_all("p","text-ellipsis")[3].contents[1].get_text()

    return retdict

def JD_extr():
    fnames = [ fname  for fname in os.listdir("./") if fname.endswith(".html") ]
    fw = codecs.open("tmp_jd_haitou_clean.csv","w","utf-8")
    res = []
    for fname in fnames[1:500]:
        tmp = []
        retdict =  get_jdstr(fname)
        res.append(retdict)
        for k,v in retdict.iteritems():
            tmp.append(v)
        fw.write(" , ".join(tmp)+"\n")
        fw.write("==="*20+"\n")
    print fname,"done!"
    return res

def change2html():
    fnames = [ fname for fname in os.listdir("./") if fname.endswith(".txt") ]
    for fname in fnames:
        cmd = "mv "+str(fname) +" "+fname[:-3]+"html"
        print cmd
        os.system(cmd)

def store2mongodb():
    client = MongoClient("localhost",27017)
    db = client.JD_Haitou

    documents = JD_extr()
    for d in documents:
        db.haitouJD.insert(d)

    mycol = db["haitouJD"]
    print mycol.count()

def split_jd_test_data(fname=‘./tmp_jd_haitou_clean.csv‘):
    fw = codecs.open(‘./split_jd_res.csv‘,‘w‘,‘utf-8‘)
    fr = codecs.open(fname,‘r‘,‘utf-8‘)
    indexurl = re.compile("http://xyzp.haitou.cc/article/\d+.html")
    for line in fr:
        if indexurl.search(line):
            url = indexurl.search(line).group()
            cnt = ‘1‘  #默认为1
            fw.write(url+"\t"+cnt+"\n")
    fr.close()
    fw.close()

if __name__ == "__main__":
   JD_extr()  # 抽取后存入文件
    store2mongodb()
    split_jd_test_data()
    print "done"
时间: 2024-10-24 17:41:36

使用bs4对海投网内容信息进行提取并存入mongodb数据库的相关文章

Scrapy爬取慕课网(imooc)所有课程数据并存入MySQL数据库

爬取目标:使用scrapy爬取所有课程数据,分别为 1.课程名 2.课程简介 3.课程等级 4.学习人数 并存入MySQL数据库  (目标网址  http://www.imooc.com/course/list) 一.导出数据文件到本地 1.新建imooc项目 1 scrapy startproject imooc 2.修改 items.py,添加项目item 1 from scrapy import Item,Field 2 class ImoocItem(Item): 3 Course_na

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

裸辞两个月,海投一个月,从Android转战Web前端的求职之路

前言 看到这个标题的童鞋,可能会产生两种想法: 想法一:这篇文章是标题党 想法二:Android开发越来越不景气了吗?前端越来越火了吗? 我一向不喜欢标题党,标题中的内容是我的亲身经历.我是2016年6月份毕业,第一份工作是做Android开发.2018年1月初,我辞掉了工作,从零开始,在家自学了两个月的Web前端开发,3月份开始找Web前端的工作,3月底找到工作. Android开发并非不景气,我加入了刘欣老师的知识星球「码农翻身」,他在里面说过: 如今,手机人手一部,肯定是需要APP开发,但

Python爬虫项目--爬取自如网房源信息

本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http://hz.ziroom.com/z/nl/z3.html?p=2 的p参数控制分页 2. get请求 2.获取单页源码 1 # -*- coding: utf-8 -*- 2 import requests 3 import time 4 from requests.exceptions import

211渣硕,海投200+家Java岗(面40,过7),收获多份offer!

面对众多的面试我也做了很多的准备,更是从朋友哪里哪里搜集到了最新BAT等大厂的面试真题,在这里我也给大家分享下我准备的资料,资料获取方式: 加Java高级互联网架构:964357187 点击链接加入群聊[Java高级互联网架构]:https://jq.qq.com/?_wv=1027&k=5zsfjUq 背景: 211渣硕,电气专业转JAVA后台,看书很少多数是在刷面经,能找到工作实属侥幸,现献上自己的面经,希望能帮助到别人 部分面试结果: 先上总结: 如果实力不够硬建议还是海投,会很累,但机会

Sharepoint2013搜索学习笔记之设置外网内容源(四)

第一步,进入管理中心,点击管理应用程序,点击search service 应用程序进入到搜索管理配置页面,选择内容源 第二步,点击新建内容源,给内容源命名,在爬网内容类型中选网站,在爬网设置中选中仅对每个开始地址的第一个页面进行爬网,在这一步需要注意爬网设置的选择,如果选择自定义,服务器越距配置过大可能会造成对全网进行爬网,让你的服务器资源急剧耗尽. 第三步,爬网计划点启用增量爬网,创建增量爬网计划,注意,完全爬网会对所有内容源重新进行爬网,增量爬网只访问上次爬网之后被更新的内容.新建的内容源就

在同一个页面上要使用多个百度分享,控件人分享的内容信息

在同一个页面上要使用多个百度分享,控件人分享的内容信息, 需要在分享前做一个小操作. "onBeforeClick":function(cmd,config){  return { "bdUrl": $("#shareContent_url").val(), "bdText": $("#shareContent_text").val(), "bdDesc":$("#shareC

MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具

转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. MediaInfo 是自由软件 (免费使用.免费获得源代码,许可协议:GNU GPL/LGPL) 下载地址: windows版: http://mediainfo.sourceforge.net/zh-CN ubuntu版: http://mediainfo.sourceforge.net/zh-CN

查看oracle rac 各节点公网,私网ip信息

-----集群私网连接信息: select * from gv$cluster_interconnects; INST_ID NAME  IP_ADDRESS           IS_PUBLIC SOURCE ---------- ----- -------------------- --------- ------------------------------ 1 eth1  192.168.94.11        NO        Oracle Cluster Repository