Python学习之静态页面数据抓取
1 页面信息抓取
定义getPage函数,根据传入的页码get到整个页面的html内容
getContent函数,通过正则匹配把页面中的表格部分的html内容取出
最后定义getData函数,同样是通过正则匹配把getContent函数得到的具体表格内容取出,存储在dat[]数组中
class PC:
#初始化
def __init__(self,baseUrl):
self.baseURL = baseUrl
self.tool = Tool()
def getPage(self,pageNum):
try:
url = self.baseURL + str(pageNum)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
#print response.read()
return response.read().decode('utf-8')
except urllib2.URLError,e:
if hasattr(e,"reason"):
print e.reason
return None
def getContent(self,pageNum):
page = self.getPage(pageNum)
pattern = re.compile('<tr class="table-link.*?>(.*?)</tr>',re.S)
result = re.findall(pattern,page)
if result:
#x = self.tool.replace(result[0])
#print x.strip()
return result
else:
return None
def getData(self,result):
reLen = len(result)
pattern = re.compile('<td class="">(.*?)</td>',re.S)
k = 0
for i in range(0,reLen):
d = re.findall(pattern,result[i])
dat[k]={"Filing_Name":d[0],"Filing_Date":d[1],"District_Court":d[2],"Exchange":d[3],"Ticker":d[4]}
k += 1
num = k
return dat
2 将结果存储在scv文件
csvfile = file('aa.csv','wb')
writer = csv.writer(csvfile)
for i in range(1,214):
print i
res = pc.getContent(i)
da = pc.getData(res)
if (len(da)!=0):
for k in range(0,len(da)):
writer.writerow([(dat[k]["Filing_Name"]).strip(),(dat[k]["Filing_Date"]).strip(),(dat[k]["District_Court"]).strip(),(dat[k]['Exchange']).strip(),(dat[k]['Ticker']).strip()])
主要内容
1 获取页面内容
Python提供了强大的urllib2函数库获取网页内容,具体步骤如下
- 构建request请求,传入请求的url
- 通过urlopen(url, data, timeout)函数得到一个response对象,即返回的页面信息就存储在该对象中
- 通过read()方法读出页面信息
2 正则匹配
该页面抓取主要利用 re.compile(pattern[, flags])函数获得一个匹配模式,即一个正则表达式对象
flags定义包括:
re.I:忽略大小写
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M:多行模式
re.S:' . '并且包括换行符在内的任意字符(注意:' . '不包括换行符)
re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
然后通过 findall函数获得所有满足匹配模式的字符串
3 存入文件
- 定义file对象,即打开一个文件
- 定义一个writer进行写文件操作
- 通过writer的writerrow函数逐行写入文件
- 关闭文件
Python学习之静态页面数据抓取的更多相关文章
- 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析
Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...
- Python笔记(十一)——数据抓取例子
上班时候想看股票行情怎么办?试试这个小例子,5分钟拉去一次股票价格,预警: #coding=utf-8 import re import urllib2 import time import thre ...
- python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片
分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...
- delphi 用idhttp做web页面数据抓取 注意事项
这里不讨论webbrowse方式了 .直接采用indy的 idhttp Get post 可以很方便的获取网页数据. 但如果要抓取大量数据 程序稳定运行不崩溃就不那么容易了.这几年也做了不少类似工具 ...
- Python开发笔记:网络数据抓取
网络数据获取(爬取)分为两部分: 1.抓取(抓取网页) · urlib内建模块,特别是urlib.request · Requests第三方库(中小型网络爬虫的开发) · Scrapy框架(大型网络爬 ...
- Python爬虫之-动态网页数据抓取
什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意 ...
- python 入门实践之网页数据抓取
这个不错.正好入门学习使用. 1.其中用到 feedparser: 技巧:使用 Universal Feed Parser 驾驭 RSS http://www.ibm.com/developerwor ...
- Python 之有道翻译数据抓取
import requests import time def you_dao(): key = input("请输入要翻译的内容:") # key = "哈哈" ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
随机推荐
- springMVC之HelloWorld
一.总结 1.web项目一定要把引用的jar包放在WEB-INF/lib下(common-logging1.2,spring4.1.6所有包,其实不需要那么多,懒得筛选了,) 2.web.xml中要初 ...
- Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)
在Linux平台oracle rac的组建过程中,如果使用ASM+RAW的存储方式的话,由于asm不支持块设备,支持持字符访问设备,所以需要配置将Block Device Drive转变成Charac ...
- NSDictionary、NSMutableDictionary的基本用法
NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...
- KSImageNamed-Xcode-master 对项目中图片提供自动提示功能的插件
.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. 下载地址:http://yun.baidu.com/s/1qWNkvGK
- Spark History Server配置使用
Spark history Server产生背景 以standalone运行模式为例,在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息:但该WEB ...
- Java中List转数组,必须带个参数
public static void main(String[] args) { List<String> lst = new ArrayList(); lst.add("赵云 ...
- MFC创建非模态对话框并修改CStatic文字
//由IDD_STATUS_DIALOG创建一个对话框CDialog* pCheckNetStatusDlg = new CDialog(); pCheckNetStatusDlg->Creat ...
- 三种硬件平台运行Laxcus大数据系统的表现
从2.0版本开始,Laxcus大数据管理系统开始支持POWERPC.X86.ARM三种平台.其中X86和ARM又分为32位和64位两种,POWERPC是纯64位,所以实际上共有五种平台,操作系统统一使 ...
- springMVC导入excel案例poi
直接上代码: 第一步,controller 引入 private static final String CHECK_FILE = "checkExceFile"; /** * 对 ...
- cocos2dx 内存管理机制
持续更新吧. 刚开始看了一些. 一,CCObject 提供引用计数 1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1: new CCObje ...