Python爬虫实战:运用re模块抓取Top250电影数据

需积分: 10 2 下载量 95 浏览量 更新于2024-09-05 收藏 11KB MD 举报
##<fontcolor=#0000CDsize=5>正则表达式基本语法</font> 在Python中,正则表达式通常与`re`模块一起使用。`re`模块提供了许多函数,如`search()`、`match()`、`findall()`、`sub()`等,用于执行不同的正则操作。 ###<fontcolor=#0000CDsize=5>匹配模式</font> - `.`:匹配任意单个字符,除了换行符。 - `\d`:匹配任何数字,等同于`[0-9]`。 - `\D`:匹配任何非数字字符,等同于`[^0-9]`。 - `\s`:匹配任何空白字符,包括空格、制表符、换页符等,等同于`[\t\n\x0b\x0c\r]`。 - `\S`:匹配任何非空白字符,等同于`[^ \t\n\x0b\x0c\r]`。 - `\w`:匹配字母、数字、下划线,等同于`[a-zA-Z0-9_]`。 - `\W`:匹配任何非单词字符,等同于`[^a-zA-Z0-9_]`。 ###<fontcolor=#0000CDsize=5>量词</font> 量词用来指定前面的原子出现的次数。 - `{n}`:精确匹配n次。 - `{n,}`:至少匹配n次。 - `{n,m}`:匹配n到m次。 - `*`:匹配前面的原子零次或多次,等同于`{0,}`。 - `+`:匹配前面的原子一次或多次,等同于`{1,}`。 - `?`:匹配前面的原子零次或一次,等同于`{0,1}`。 ###<fontcolor=#0000CDsize=5>分组与选择</font> - `(pattern)`:创建一个分组,可以捕获匹配的部分。 - `(pattern1|pattern2)`:选择匹配`pattern1`或`pattern2`。 ###<fontcolor=#0000CDsize=5>断言与边界匹配</font> - `^`:匹配输入字符串的开始位置。 - `$`:匹配输入字符串的结束位置。 - `\b`:匹配一个单词边界,即单词和空格间的位置。 - `\B`:匹配非单词边界。 ###<fontcolor=#0000CDsize=5>修饰符</font> - `re.I`:使匹配对大小写不敏感。 - `re.M`:多行模式,使`^`和`$`也能匹配行首和行尾。 - `re.S`:使`.`能匹配包括换行符在内的所有字符。 - `re.U`:根据Unicode字符集解析字符串。 - `re.X`:忽略正则表达式中的空白字符,便于阅读。 ##<fontcolor=#0000CDsize=5>正则表达式在爬虫中的应用</font> 在爬虫中,正则表达式常用于从HTML或XML文档中提取所需数据。例如,你可以使用它来查找特定的标签、属性值,或者根据某种模式提取文本。下面是一个简单的爬虫实战例子: ```python import re import requests # 获取网页内容 url = 'http://example.com/top250_movies' response = requests.get(url) html = response.text # 使用正则表达式提取电影标题 pattern = r'<h3><a href="/movie/(\d+)">(.*?)</a></h3>' movies = re.findall(pattern, html) # 打印电影标题 for title in movies: print(title[1]) ``` 在这个例子中,我们首先使用`requests`库获取网页内容,然后使用正则表达式从HTML中查找电影标题。`r'<h3><a href="/movie/(\d+)">(.*?)</a></h3>'`这个正则表达式匹配的是包含电影ID和电影名的`<a>`标签。 ##<fontcolor=#0000CDsize=5>总结</font> 虽然正则表达式有时可能显得复杂,但它是一个强大的工具,特别是在数据提取和文本处理方面。Python的`re`模块提供了丰富的功能,让开发者能够灵活地处理字符串。不过,对于更复杂的结构,如HTML和XML,可能需要使用更专业的解析库,如`BeautifulSoup`和`lxml`。对于初学者来说,掌握正则表达式的基本概念和常用语法是至关重要的,这将极大地提高处理文本数据的效率。 在实际爬虫项目中,结合使用正则表达式和其他网络请求库(如`requests`)以及HTML解析库,可以构建出功能强大的数据抓取系统。同时,需要注意合法性和道德性,避免非法爬取或侵犯他人隐私。