一、正则表达式
1、正则表达式:通用的字符串表达框架,简洁表达一组字符串的表达式。针对字符串表达“简洁”和“特征”思想的工具。判断某字符串的特征归属。主要应用在字符串匹配中
正则表达式在文本处理中常用:表达文本类型的特征(病毒、入侵等);同时查找或替换一组字符串;匹配字符串的全部或部分。
正则表达式的使用:
编译:将符合正则表达式语法的字符串转换成正则表达式特征。
正则表达式语法:正则表达式是由字符和操作符构成。
2、Re库介绍
Re库是Python的标准库,主要用于字符串匹配。import re
正则表达式的表示类型:
(1)raw string类型(原生字符串类型),不包含转义符的字符串
re库采用raw string类型表示正则表达式,表示为:r’text’
r'[1-9'\d{5} 中国大陆地区邮政编码
r'\d{3}-\d{8}|d{4}-\d{7}' 国内电话号码
(2)string类型,更繁琐。
2、Re库的主要功能函数
函数 | 说明 |
---|---|
re.search() | 在一个字符串中搜索匹配正则表达式的第一个未知,返回match对象 |
re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
re.findall() | 搜索字符串,以列表类型返回全部能匹配的自串 |
re.split() | 将字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
Re库的match对象:
二、爬取豆瓣Top250电影内容
每个页面有25部电影,前25部电影对应的url:https://movie.douban.com/top250?start=0&filter=
每往后翻一页,url对应的start增加25。
import csv
import requests
from bs4 import BeautifulSoup
import codecs
def get_info(link):
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
titles = soup.findAll(class_='hd')
nums = soup.findAll('em')
scores = soup.findAll(class_='rating_num')
for num, title, score in zip(nums, titles, scores):
data.append((num.text, title.find(class_='title').text, score.text))
print('Done one page')
if __name__ == '__main__':
urls = ['https://movie.douban.com/top250?start={}&filter='.format(i) for i in range(0, 226, 25)]
csvfile = codecs.open('top250.csv', 'w+', 'utf_8_sig')
writer = csv.writer(csvfile)
data = []
for url in urls:
get_info(url)
for i in data:
writer.writerow(i)
csvfile.close()