python中urllib2与BeautifulSoup爬取数据保存MongoDB

   Beautiful Soup是一个用来解析HTML和XML的python库,它可以按照你喜欢的方式去解析文件,查找并修改解析树。它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。

  如图使用urllib2与BS4模块爬取html页面数据,分别为标题、内容、股票名称、股票ID、发布时间、围观人数。


  Example:

 代码如下  

##-coding:utf-8-##
import time
from bs4 import BeautifulSoup
import urllib2
import pymongo
import re
import datetime

def update():
    datas = {}
    connection = pymongo.Connection('192.168.1.2', 27017)
 #连接mongodb
    db = connection.test_hq
 #创建或连接test_hq库
    for i in soup.find_all("div", class_="item"):
        datas['_id'] = str(i.h2.a['href']).split('/')[-1].split('.')[0]
 #获取html页面名称为id号
        datas['title'] = i.h2.get_text()
 #获取标题
        url2 = i.h2.a['href']
 #获取标题内容url地址
        html2 = urllib2.urlopen(url2)
        html_doc2 = html2.read()
        soup2 = BeautifulSoup(html_doc2)
        datas['content'] = soup2.find(attrs={"name":"description"})['content']
 #获取文章内容
        stock_name = []
        stock_id = []
        for name in re.findall(u"[u4e00-u9fa5]+",i.find(class_="stocks").get_text()):
            stock_name.append(name)
 #获取影响股票名称,已数组方式保存对应股票id号,mongo支持数组插入
        datas['stock_name'] = stock_name
        for id in re.findall("d+",i.find(class_="stocks").get_text()):
            stock_id.append(id)
 #获取影响股票id
        datas['stock_id'] = stock_id       
        datas['update_time'] = datetime.datetime.strptime(re.search("w+.*w+", i.find(class_="fl date").span.get_text()).group(), '%Y-%m-%d %H:%M') - datetime.timedelta(hours=8)
 #获取发布时间,转换为mongo时间格式
        datas['onlooker'] = int(re.search("d+",i.find(class_="icons ic-wg").get_text()).group())
 #获取围观数
        db.test.save(datas)
 #插入数据库

def get_data():
    
    title = str(soup.h2.a['href']).split('/')[-1].split('.')[0]
    #获取html页面名称做更新判断
    with open('update.txt', 'r') as f:
        time = f.readline()
    if  title == time:
        print 'currently no update', title
    else:
        with open('update.txt', 'w') as f:
            f.write(title)
        update()
      
while True:
    if __name__ == '__main__':
        url = 'http://www.ipython.me/qingbao/'
        html = urllib2.urlopen(url)
        html_doc = html.read()
        soup = BeautifulSoup(html_doc)
        get_data()
        time.sleep(30)
 #每30秒刷新一次

时间: 2024-08-27 19:52:14

python中urllib2与BeautifulSoup爬取数据保存MongoDB的相关文章

Python爬虫:用BeautifulSoup进行NBA数据爬取

爬虫主要就是要过滤掉网页中无用的信息,抓取网页中有用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解,如网页的标签,网页的语言等知识,推荐去W3School: W3school链接进行了解 在进行爬虫之前还要有一些工具: 1.首先Python 的开发环境:这里我选择了python2.7,开发的IDE为了安装调试方便选择了用VS2013上的python插件,在VS上进行开发(python程序的调试与c的调试差不多较为熟悉): 2.网页源代码的查看工具:虽然每一个浏

谁知道python中urllib2与socket区别

问题描述 谁知道python中urllib2与socket区别 请问一下python中urllib2与socket的区别?我知道他们分别怎么用,也明白URLlib2用于网络,socket套接字用于服务器与客服端,但是他们俩分别都有什么区别和共同点呢?是否可以相互替换 解决方案 urllib2主要用来进行HTTP相关的web请求等socket则更底层,可以支持tcp,udp数据包发送.

爬虫 数据挖掘-用web-harvest爬取数据,爬取结果为空

问题描述 用web-harvest爬取数据,爬取结果为空 本人初次使用爬虫软件web-harvest ,写好了配置文件,运行的时候语法没报错 但是就是读取不到内容 <![CDATA[ ]]> <![CDATA[ declare variable $item as node() external; let $url := data($item/a) return {normalize-space($tittle)}{normalize-space($href)} ]]></xq

node.js-Node.js + request + cheerio 爬取数据出现问题

问题描述 Node.js + request + cheerio 爬取数据出现问题 我在用node爬取数据,用了request模块和cheerio模块,我在获取到了一个url后,用数组获取到了该url下的分页(假设为1-10),但是当打印数据后,发现只获取到了分页1下的数据 for (var i = data.start; i <= data.end; i++) { var newUrl; if ( i == 1 ) { newUrl = data.url; } else { newUrl =

java请教新浪微博验证码问题,解决爬取数据出现验证码问题

问题描述 请教新浪微博验证码问题,解决爬取数据出现验证码问题验证码如图:1.试过Tesseract-OCR没有用2.通过切换ip也无法操作,用的是公司网,无法实现拨号切换IP 解决方案 解决方案二:联系新浪微博:客服电话:4000960960(个人)4000980980(企业)

Java通过UrlConnection和Httpclient实现爬取并保存至本地实例

下面是我简单实现爬取指定网页,并且保存的简单实现,其实有几种方式可以实现,这里慢慢添加该功能的几种实现方式. UrlConnection爬取实现 package html; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.I

关于使用java从http接口取数据保存到本地文件的中文乱码处理

关于使用java从http接口取数据保存到本地文件的中文乱码处理 要做到如下几点: 1. 取接口数据,要注意加入编码设置与接口文件本身的编码设置一致,才能取得正确的数据   注意如下的: ins =new InputStreamReader(connection.getInputStream(),"GBK"):   必须加入第二个编码格式参数:参数的值与接口返回的数据的编码格式一致         /**   * 从某个接口取返回数据内容   * @param url   * @ret

在Python中利用Pandas库处理大数据的简单介绍_python

在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章<别老扯什么Hadoop了,你的数据根本不够大>指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择.这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python来处理数据:     硬件环境         CPU:3.5 GHz Intel Core i7         内存:32 GB HDDR 3 1600 MHz      

Python中使用socket发送HTTP请求数据接收不完整问题解决方法_python

由于工作的需求,需要用python做一个类似网络爬虫的采集器.虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需求,如手动设定User-Agent,Referer等,所以选择了直接用socket进行设计.当然,这样的话,需要对HTTP协议比较熟悉,HTTP协议这里就不做讲解了.整个python的代码如下: #!/usr/bin env python import socket host="www.baidu.com" se=socket.socket(soc