# 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>

它可以匹配到目标代码,编写遇到主要的困难在于提取,有两点很关键:

  1. 小括号表示要提取的内容,所以我们把[\d\s]{6,}括起来
  2. 但是有些小括号只表示整体,并非要提取的内容,这个时候就要在相应的表达式前面加上"?:",表示不提取这个括号中的内容

关于正则表达式中的括号,我们可以简单总结一下:

  • 小括号:代表一个整体,例如(abc),它仅匹配字符串“abc”
  • 中括号:表示取其中之一,例如[abc],它匹配“a”、“b”、“c”
  • 大括号:表示重复次数,例如\d{1,3},它匹配一位到三位的数字

使用urllib进行网页爬取的更多相关文章

  1. 爬虫系列(六) 用urllib和re爬取百度贴吧

    这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...

  2. WebFetch 是无依赖极简网页爬取组件

    WebFetch 是无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫. WebFetch 要达到的目标: 没有第三方依赖jar包 减少内存使用 提高CPU利用率 加快网络爬取速度 简洁明了的api ...

  3. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  4. Python和BeautifulSoup进行网页爬取

    在大数据.人工智能时代,我们通常需要从网站中收集我们所需的数据,网络信息的爬取技术已经成为多个行业所需的技能之一.而Python则是目前数据科学项目中最常用的编程语言之一.使用Python与Beaut ...

  5. Node.js 动态网页爬取 PhantomJS 使用入门(转)

    Node.js 动态网页爬取 PhantomJS 使用入门 原创NeverSettle101 发布于2017-03-24 09:34:45 阅读数 8309  收藏 展开 版权声明:本文为 winte ...

  6. 12月4日学习爬虫007.使用Urllib模块进行简单网页爬取

    笔记如下: 1.https是http加强版协议(安全协议)http(普通网络通信协议) 爬数据 如果爬https发现和理想中的数据不同,可以改为http 直接去掉s即可 2.使用Urllib爬取简单网 ...

  7. python利用urllib实现的爬取京东网站商品图片的爬虫

    本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...

  8. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片

    Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...

  9. python学习(三)--跟着例子写的贴吧网页爬取

    from urllib import requestimport urllib #爬贴吧网页文件到本地.首先在本地打开百度贴吧 搜索 java吧#第一页的内容是:http://tieba.baidu. ...

随机推荐

  1. redis-3.0.0集群的安装及使用

    redis集群需要至少6个节点(偶数节点),3个主节点,3个从节点.注意:集群模式最好不要keys *查询数据. 1 下载redis,官网下载3.0.0版本,之前2.几的版本不支持集群模式.下载地址: ...

  2. .net 禁止远程查看应用程序错误的详细信息,服务器上出现应用程序错误

    打开页面时出现以下错误   "/"应用程序中的服务器错误. 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全 ...

  3. 树莓pi快速ssh【校园网】

    校园网是NAT后的,没有显示器,我把路由器的DHCP服务关了,这样的情况下怎么ssh到树莓pi? 把树莓pi 连到路由器上(已经关闭DHCP),手机安装FING https://play.google ...

  4. Linux Add a Swap File

    http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/ Procedure To Add a Swap File Under Linux Y ...

  5. css定位方式

    CSS表达式 匹配元素说明 xpath * 匹配任何元素 //* div 标签 //div div#eleID by ID //div[@id='eleID']  div.class  by clas ...

  6. 在windows xp 平台上安装mvc4失败

    使用web 平台安装程序,在windows xp上安装mvc4 出现失败,需要主要是windows powershell 2.0安装失败,需要先卸载power shell 1.0或者 winowrm ...

  7. 2016"百度之星" - 复赛(Astar Round3) 1003 拍照

    拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...

  8. 5.1 CUDA atomic原子操作

    和许多多线程并行问题一样,CUDA也存在互斥访问的问题,即当一个线程改变变量X,而另外一个线程在读取变量X的值,执行原子操作类似于有一个自旋锁,只有等X的变量在改变完成之后,才能执行读操作,这样可以保 ...

  9. Anipang2反推文档

    此文档主要用于一个开发同学尝试学习描述一个产品的基本设计.也许工程师都应该有类似能力. 反推的基础,目前是自己玩过的一些关卡和youtube上的一些关卡通关视频,主要是前120关.(120关后面应该是 ...

  10. Read Asia Embedded fell

    first and foremost, 很久没写了,心痒了,手贱了,于是乎在这一刻心静时,积攒的思绪开始回放了,惊世Copy-on-write之文随之面世了; 臭毛孩子拉的 屎 特臭,小毛孩子前途黯淡 ...