Spider_Python 抓取:华尔街见闻-阿里云开发者社区

开发者社区> dasein58> 正文

Spider_Python 抓取:华尔街见闻

简介:   #!/usr/bin/env python   # -*- coding:utf-8 -*-   import sys   import re   import urllib, urllib2   import requests   import pymongo   import datetime
+关注继续查看

  #!/usr/bin/env python

  # -- coding:utf-8 --

  import sys

  import re

  import urllib, urllib2

  import requests

  import pymongo

  import datetime

  import multiprocessing as mp

  Category_Map={

  "1":u"外汇",

  "2":u"股市",

  "3":u"商品",

  "4":u"债市",

  "5":u"央行",

  "9":u"中国",

  "10":u"美国",

  "11":u"欧元区",

  "12":u"日本",

  "13":u"英国",

  "14":u"澳洲",

  "15":u"加拿大",

  "16":u"瑞士",

  "17":u"其他地区"

  }

  def num2name(category_num):

  if Category_Map.has_key(category_num):

  return Category_Map[category_num]

  else:

  return ""

  class MongoDBIO:

  # 申明相关的属性

  def __init__(self, host, port, name, password, database, collection):

  self=host

  self.port=port

  self.name=name

  self.password=password

  self.database=database

  self.collection=collection

  # 连接数据库,db和posts为数据库和集合的游标

  def Connection(self):

  # connection=pymongo.Connection() # 连接二手游戏账号卖号本地数据库

  connection=pymongo.Connection(host=self, port=self.port)

  # db=connection.datas

  db=connection[self.database]

  if self.name or self.password:

  db.authenticate(name=self.name, password=self.password) # 验证用户名密码

  # print "Database:", db.name

  # posts=db_live_news

  posts=db[self.collection]

  # print "Collection:", posts.name

  return posts

  # 保存操作

  def ResultSave(save_host, save_port, save_name, save_password, save_database, save_collection, save_content):

  posts=MongoDBIO(save_host, save_port, save_name, save_password, save_database, save_collection).Connection()

  posts.save(save_content)

  def Spider(url, data):

  # # 方法1:requests get

  content=requests.get(url=url, params=data).content # GET请求发送

  # # 方法2:urllib2 get

  # data=urllib.urlencode(data) # 编码工作,由dict转为string

  # full_url=url+'?'+data

  # print full_url

  # content=urllib2.urlopen(full_url).read() # GET请求发送

  # # content=requests.get(full_url).content # GET请求发送

  # print type(content) # str

  return content

  def ContentSave(item):

  # 保存配置

  save_host="localhost"

  save_port=27017

  save_name=""

  save_password=""

  save_database="textclassify"

  save_collection="WallstreetcnSave"

  source="wallstreetcn"

  createdtime=datetime.datetime.now()

  type=item[0]

  content=item[1].decode("unicode_escape") # json格式数据中,需从'?'形式的unicode_escape编码转换成u'?'的unicode编码

  content=content.encode("utf-8")

  # district的筛选

  categorySet=item[2]

  category_num=categorySet.split(",")

  category_name=map(num2name, category_num)

  districtset=set(category_name)&{u"中国", u"美国", u"欧元区", u"日本", u"英国", u"澳洲", u"加拿大", u"瑞士", u"其他地区"}

  district=",".join(districtset)

  propertyset=set(category_name)&{u"外汇", u"股市", u"商品", u"债市"}

  property=",".join(propertyset)

  centralbankset=set(category_name)&{u"央行"}

  centralbank=",".join(centralbankset)

  save_content={

  "source":source,

  "createdtime":createdtime,

  "content":content,

  "type":type,

  "district":district,

  "property":property,

  "centralbank":centralbank

  }

  ResultSave(save_host, save_port, save_name, save_password, save_database, save_collection, save_content)

  def func(page):

  url="api.wallstreetcn/v2/livenews"

  # get参数

  data={

  "page":page

  }

  content=Spider(url, data)

  items=re.findall(r'"type":"(.?)","codeType".?"contentHtml":"(.?)","data".?"categorySet":"(.*?)","hasMore"', content) # 正则匹配

  if len(items)==0:

  print "The End Page:", page

  data=urllib.urlencode(data) # 编码工作,由dict转为string

  full_url=url+'?'+data

  print full_url

  sys.exit(0) # 无错误退出

  else:

  print "The Page:", page, "Downloading..."

  for item in items:

  ContentSave(item)

  if __name__=='__main__':

  start=datetime.datetime.now()

  start_page=1

  end_page=3300

  # 多进程抓取

  pages=[i for i in range(start_page, end_page)]

  p=mp.Pool()

  p.map_async(func, pages)

  p.close()

  p.join()

  # 单进程抓取

  page=end_page

  while 1:

  url="api.wallstreetcn/v2/livenews"

  # get参数

  data={

  "page":page

  }

  content=Spider(url, data)

  items=re.findall(r'"type":"(.?)","codeType".?"contentHtml":"(.?)","data".?"categorySet":"(.*?)","hasMore"', content) # 正则匹配

  if len(items)==0:

  print "The End Page:", page

  data=urllib.urlencode(data) # 编码工作,由dict转为string

  full_url=url+'?'+data

  print full_url

  break

  else:

  print "The Page:", page, "Downloading..."

  for item in items:

  ContentSave(item)

  page +=1

  end=datetime.datetime.now()

  print "last time: ", end-start

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2753 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
10830 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10192 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11825 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8661 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
7222 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21566 0
+关注
735
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载