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返 ...
随机推荐
- java cmd 命令
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...
- OC基础(18)
Category基本概念 Category注意事项 *:first-child { margin-top: 0 !important; } body > *:last-child { margi ...
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public ...
- MySQL常用命令(待更新)
1.登录到mysql:mysql -hlocalhost -uroot -p2.创建数据库:create database:3.使用数据库:use database:4.创建表:人员:qacreate ...
- MATLAB 实用函数
MATLAB个人工具箱(MATLAB) mymail.m 可以利用MATLAB发送邮件(支持附件和群发),非常实用的函数,适用于:耗时很长的脚本完成后通知作者:外加定时器后用于信息推送:家庭监视器紧急 ...
- redis学习(3)redis.conf配置文件详解
# Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb ...
- 在 mvc 中使用下拉列表
在mvc中经常会使用到下拉列表,以下以两种方式来实现,一种是以 @Html.DropDownList 扩展方法,一种是以 <select><option></optio ...
- SQL增加,删除,更改表中字段
1. 向表中添加新的字段 alter table table_name add column_name varchar2(20) not null 2. 删除表中的一个字段 delete t ...
- Windows应用替代方案接龙
使开源软件的优势: 开源安全产品的开发.测试和发布过程完全是透明的,同时提供产品的源代码及部分的文档.通过阅读源代码,大家可以清楚地了解开源安全技术的工作原理和实现方法,在选择开源安全技术时更有把握, ...
- gson转换带有objectId的问题
/** * * @Description: objectid 转换成string 不然就会objectid对象序列化了 * @param @param obj * @param @return * @ ...