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

目录
相关文章
|
4月前
|
Python
"揭秘!Python如何运用神秘的正则表达式,轻松穿梭于网页迷宫,一键抓取隐藏链接?"
【8月更文挑战第21天】Python凭借其强大的编程能力,在数据抓取和网页解析领域表现出高效与灵活。通过结合requests库进行网页请求及正则表达式进行复杂文本模式匹配,可轻松提取网页信息。本示例展示如何使用Python和正则表达式解析网页链接。首先确保已安装requests库,可通过`pip install requests`安装。接着,利用requests获取网页内容,并使用正则表达式提取所有`<a>`标签的`href`属性。
48 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
2月前
|
数据采集 Python
python爬虫抓取91处理网
本人是个爬虫小萌新,看了网上教程学着做爬虫爬取91处理网www.91chuli.com,如果有什么问题请大佬们反馈,谢谢。
28 4
|
2月前
|
数据采集 Java Python
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
在信息化时代,实时数据的获取对体育赛事爱好者、数据分析师和投注行业至关重要。本文介绍了如何使用Python的`ThreadPoolExecutor`结合代理IP和请求头设置,高效稳定地抓取五大足球联赛的实时比赛信息。通过多线程并发处理,解决了抓取效率低、请求限制等问题,提供了详细的代码示例和解析方法。
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
|
3月前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
4月前
|
数据采集 Python
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
本文介绍了使用Python Selenium和WebDriver库抓取LinkedIn数据的方法。首先,安装Selenium库和对应的WebDriver,然后配置爬虫代理IP以避免频繁请求被检测。接下来,设置user-agent和cookies以模拟真实用户行为,实现登录并保持状态。登录后,使用WebDriver抓取目标页面数据,如用户名、年龄、性别和简历信息。最后,强调了优化代码、处理异常和遵守使用条款的重要性,以提高效率并避免账号被封禁。
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
|
3月前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
4月前
|
Python
【python】python抓取古诗文内容保存(源码)【独一无二】
【python】python抓取古诗文内容保存(源码)【独一无二】
|
4月前
|
数据采集 JavaScript 前端开发
构建你的第一个Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字时代,数据是新的石油。本文将引导初学者通过简单的步骤,使用Python编程语言创建一个基础的网络爬虫程序。我们将探索如何从网络上提取信息,并理解背后的原理。无论你是编程新手还是想要扩展你的技术工具箱,这篇文章都将为你提供一条清晰的道路,让你学会编写能够自动获取网络数据的脚本。准备好开始你的网络数据抓取之旅了吗?让我们现在就开始吧!
|
4月前
|
数据采集 JavaScript 前端开发
Python 爬虫实战:抓取和解析网页数据
【8月更文挑战第31天】本文将引导你通过Python编写一个简单的网络爬虫,从网页中抓取并解析数据。我们将使用requests库获取网页内容,然后利用BeautifulSoup进行解析。通过本教程,你不仅能够学习到如何自动化地从网站收集信息,还能理解数据处理的基本概念。无论你是编程新手还是希望扩展你的技术工具箱,这篇文章都将为你提供有价值的见解。