python练习题

两个python练习的小脚本,涉及正则表达式,网页爬虫及信息提取。

习题1:从文本中匹配英文单词

代码:

#!usr/bin/python
#coding=utf-8
'''
@author:w2n1ck

'''
import re
#载入正则表达式模块
f1 = open('from.txt')
data = f1.read()
f1.close()
#打开文件,读入文本
result = re.findall('[A-z]+', data)
#用正则表达式中的findall方法
#找出data中所有从A-Za-z的连续字符
result.sort()
#把得到的结果字符串list排序,默认为字典序
data = '\n'.join(result)
#把排序后的结果用换行符连接成一段文本
f2 = open('to.txt', 'w')
f2.write(data)
f2.close()
#输出到文件中

from.txt内容如下:

结果如下:

习题2: 查询热映电影

查询当前正在热映的电影。方法是,找一个电影网站(豆瓣电影、时光网、格瓦拉等等),把它的首页取过来,分析一下网页内容的结构,然后从中取出你要的信息。

因为一个网页上会包含很多内容,如何查找定位到你所需的内容,还是要费点功夫的。你可能会用到正则表达式、urllib,或者BeautifulSoup之类的。

首先安装第三方的网页分析模块:BeautifulSoup

代码:

#!usr/bin/python
#coding:utf-8
'''
@author:w2n1ck

'''
import urllib2
from bs4 import BeautifulSoup
print "豆瓣正在热映:"
url = "http://movie.douban.com"
html = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)
div_hot = soup.find('div',{"id":"screening"})
for i in div_hot.find_all('li', class_='title'):
    movie_title = i.a.get_text()
#   movie_title = movie_title.strip() #去除movie_title两边的空格
    print movie_title

print "\n豆瓣近期热门:"
div_new = soup.find('div',{"id":"hot-gallery"})
for i in div_new.find_all('li', class_='title'):
    movie_new = i.a.get_text()
    print movie_new

代码解析:

  • 7、8行分别导入了urllib2、beautifulsoup模块

  • 11行用urllib模块把豆瓣的网页抓下来

  • 12行用BeautifulSoup模块整理抓下来的html内容

  • 13行是重点,把我们需要的那一部分div截取下来(id=”screening”的那部分),需要分析html源码。

  • 接下来在上文的div中,寻找所有 class=”title” 的 li 元素,注意,由于 class_是python中的保留关键字,所以需要 class_='title'

  • 有些网页抓取出来的内容前后有很多空格,可以用.strip() 去除。

大爷,赏个铜板呗!