两个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() 去除。