Python爬虫中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于匹配、查找、替换等操作。在Python中,我们通常使用`re`模块来处理正则表达式。本篇文章将深入探讨如何在Python爬虫中利用正则表达式解析网页数据。 了解几个常用的`re`模块中的标志位(Flag): 1. `re.I`:忽略大小写匹配。例如,使用`^i.*`可以匹配以'i'开头的任何单词,无论其是否大写。 2. `re.M`:多行匹配。这个标志使得`^`和`$`能够分别匹配每一行的开始和结束,而不仅仅是整个字符串的开始和结束。 3. `re.S`:单行匹配。它使`.`匹配任何字符,包括换行符,这样整个字符串会被视为单行处理。 以下是一个示例,展示了如何使用这些标志位: ```python string = '''fall in love with you i love you very much i love she i love her''' re.findall('^i.*', string, re.M) ``` 这将返回以'i'开头的所有行。 再看另一个例子,使用`re.S`标志: ```python string1 = """细思极恐 你的队友在看书 你的敌人在磨刀 你的闺蜜在减肥 隔壁老王在练腰""" re.findall('.*', string1, re.S) ``` 这会匹配并返回整个字符串,包括换行符。 接下来,我们将讨论如何使用正则表达式在Python爬虫中抓取网页中的图片。以下是一个爬取糗事百科中所有图片的例子: ```python import requests import re import urllib import os url = 'https://www.qiushibaike.com/pic/page/%d/?s=5170552' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' } # 创建名为qiutu的文件夹来存储图片 if not os.path.exists('./qiutu'): os.mkdir('./qiutu') # 输入开始页和结束页 start_page = int(input('start>>>')) end_page = int(input('end>>>')) for page in range(start_page, end_page + 1): new_url = url % page response = requests.get(url=new_url, headers=headers) page_text = response.text # 使用正则表达式找到所有图片URL img_url_list = re.findall('<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>', page_text, re.S) # 添加HTTPS协议,并保存图片 for img_url in img_url_list: img_url = 'https:' + img_url img_name = img_url.split('/')[-1] img_path = 'qiutu/' + img_name urllib.request.urlretrieve(url=img_url, filename=img_path) print(img_path, '下载成功') print('over') ``` 在这个示例中,我们首先定义了目标URL模板和请求头,然后根据用户输入的页码范围发起HTTP请求。使用正则表达式`<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>`匹配包含图片URL的HTML代码段。接着,为每个找到的图片URL添加HTTPS协议,并将图片保存到本地。 正则表达式在Python爬虫中扮演着至关重要的角色,它可以帮助我们有效地提取和解析网页数据。通过理解正则表达式的模式和标志位,我们可以更灵活地处理各种复杂的数据结构。在实际的网络爬虫项目中,掌握正则表达式的使用技巧是提高效率的关键。希望这个例子能帮助你更好地理解和应用正则表达式在Python爬虫中的实践。
- 粉丝: 7
- 资源: 960
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助