使用urllib进行网页爬取
# coding=gbk
# 抓取开奖号码
# url:http://datachart.500.com/dlt/zoushi/jbzs_foreback.shtml
'''
对网页逐行迭代,找到目标行时在往下读一行,两行提取一期开奖号码
'''
import re
from urllib import urlopen # winnumbers = {} # 期数:中奖号码
f = open('中奖号码.txt','w')
webpage = urlopen('http://datachart.500.com/dlt/zoushi/inc/jbzs_foreback.php') for line in webpage:
if re.search(r'^<td align="center">[\d\s]*</td>$',line.strip()):
index = line.split('>')[1].split()[0]
nextline = webpage.readline()
numbers = re.findall(r'<td class="chartBall0[1,2]">([\d]+)',nextline)
# winnumbers[index] = numbers
print index,numbers
f.write(index)
for i in range(len(numbers)):
f.write('\t')
f.write(numbers[i])
f.write('\n')
f.close()
结果如下:

首先用Chrome打开网页,利用审查元素功能找到真正的数据来源 http://datachart.500.com/dlt/zoushi/inc/jbzs_foreback.php
然后逐行迭代网页内容,利用正则表达式'<td align="center">[\d\s]*</td>'定位开奖期号:

然后使用 numbers = re.findall(r'<td class="chartBall0[1,2]">[\d]+',nextline) 找到开奖号码,对字符串处理一下得到开奖号码,存入列表。
这个时候 打印出来、存入字典、存入文件都可以。
这个方法不太好,可以直接把整个网页弄下来在本地处理。那样的话,写的正则就要复杂一点。鄙人刚刚学习正则,正在尝试中。
###################### 10月21日的分割线 ######################
按照上次最后提供的思路,把整个网页提取下来进行正则分析,代码如下
# coding=gbk
# 抓取开奖号码
# url:http://datachart.500.com/dlt/zoushi/jbzs_foreback.shtml
'''
把整个网页爬取下来,然后使用re.findall定位目标数据
'''
import re
from urllib import urlopen # winnumbers = {} # 期数:中奖号码
webpage = urlopen('http://datachart.500.com/dlt/zoushi/inc/jbzs_foreback.php')
text = webpage.read()
pattern = re.compile(r'<tr>\s*<td align="center">([\d\s]{6,})</td>\s*((?:<td class="(?:yl01|yl02|chartBall01|chartBall02)">\d+</td>){47})\s+</tr>')
local = re.findall(pattern,text)
for item in local:
numbers = re.findall(r'<td class="chartBall0[1,2]">([\d]+)</td>',item[1])
print item[0].strip(), numbers
# winnumbers[item[0]] = numbers
重点在于正则表达式的编写,我们需要一个正则表达式能够定位所有形如上图结构的html代码段。
最后测试得到了这样一段正则:
<tr>\s*<td align="center">([\d\s]{6,})</td>\s*((?:<td class="(?:yl01|yl02|chartBall01|chartBall02)">\d+</td>){47})\s+</tr>
它可以匹配到目标代码,编写遇到主要的困难在于提取,有两点很关键:
- 小括号表示要提取的内容,所以我们把[\d\s]{6,}括起来
- 但是有些小括号只表示整体,并非要提取的内容,这个时候就要在相应的表达式前面加上"?:",表示不提取这个括号中的内容
关于正则表达式中的括号,我们可以简单总结一下:
- 小括号:代表一个整体,例如(abc),它仅匹配字符串“abc”
- 中括号:表示取其中之一,例如[abc],它匹配“a”、“b”、“c”
- 大括号:表示重复次数,例如\d{1,3},它匹配一位到三位的数字
使用urllib进行网页爬取的更多相关文章
- 爬虫系列(六) 用urllib和re爬取百度贴吧
这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...
- WebFetch 是无依赖极简网页爬取组件
WebFetch 是无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫. WebFetch 要达到的目标: 没有第三方依赖jar包 减少内存使用 提高CPU利用率 加快网络爬取速度 简洁明了的api ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...
- Python和BeautifulSoup进行网页爬取
在大数据.人工智能时代,我们通常需要从网站中收集我们所需的数据,网络信息的爬取技术已经成为多个行业所需的技能之一.而Python则是目前数据科学项目中最常用的编程语言之一.使用Python与Beaut ...
- Node.js 动态网页爬取 PhantomJS 使用入门(转)
Node.js 动态网页爬取 PhantomJS 使用入门 原创NeverSettle101 发布于2017-03-24 09:34:45 阅读数 8309 收藏 展开 版权声明:本文为 winte ...
- 12月4日学习爬虫007.使用Urllib模块进行简单网页爬取
笔记如下: 1.https是http加强版协议(安全协议)http(普通网络通信协议) 爬数据 如果爬https发现和理想中的数据不同,可以改为http 直接去掉s即可 2.使用Urllib爬取简单网 ...
- python利用urllib实现的爬取京东网站商品图片的爬虫
本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...
- 爬虫入门(三)——动态网页爬取:爬取pexel上的图片
Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...
- python学习(三)--跟着例子写的贴吧网页爬取
from urllib import requestimport urllib #爬贴吧网页文件到本地.首先在本地打开百度贴吧 搜索 java吧#第一页的内容是:http://tieba.baidu. ...
随机推荐
- wuzhicms 模块开发
首先,模块开发需要了解五指cms的目录结构: 然后,我们需要新增加一个模块目录: 再app下面创建 如:content 下面包含文件: 前台文件的创建: 看下 index.php 的内容: <? ...
- Codeforces 603A Alternative Thinking
题意:给你一个01串,必须替换一次,且替换的为子串.问换完后,最大01串长度. #include <bits/stdc++.h> typedef long long ll; using n ...
- mapreduce学习指导及疑难解惑汇总
原文链接http://www.aboutyun.com/thread-7091-1-1.html 1.思想起源: 我们在学习mapreduce,首先我们从思想上来认识.其实任何的奇思妙想,抽象的,好的 ...
- 基于samba实现win7与linux之间共享文件_阳仔_新浪博客
基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.
- [C++]VS2010功能设置
VS2010快捷键设置 工具->选项->环境->键盘->[显示命令包含] 下面输入“对齐”关键字->窗口显示关于“对齐”的所有操作命令->选中“某一个”->[ ...
- 起底多线程同步锁(iOS)
iOS/MacOS为多线程.共享内存(变量)提供了多种的同步解决方案(即同步锁),对于这些方案的比较,大都讨论了锁的用法以及锁操作的开销,然后就开销表现排个序.春哥以为,最优方案的选用还是看应用场景, ...
- [一位菜鸟的COCOS-2D编程之路]打飞机中机种敌机和战机损毁时的爆炸效果
1.第一步,添加爆炸动画 //添加玩家飞机飞行动画 id _playerFlyAction; id _playerBlowupAnimation; //战机爆炸动画 id _enemyBlowupAn ...
- C# 条形码 生成函数 (Code 128 标准
C# 条形码 生成函数 (Code 128 标准参考:GB/T 18347-2001) 最近在做单据打印,发现客户要求用到条形码,在网上找了,发现只有一些条形码的标准,但打出来发现根本不能扫,还要加某 ...
- JavaScript 要点(十六)RegExp 对象
RegExp:是正则表达式(regular expression)的简写. RegExp 对象 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大 ...
- eclispe搭建android平台
1.不推荐在线安装android ADT,因为需要FQ.可以在网上下载ADT,然后离线安装. 离线安装方式:help->Install ->点击add然后选择你的安装包(不需要解压),一直 ...