python爬虫基础(3:数据提取之正则)

正则几乎可以提取任何数据,但是特别难写,一般其他解析库不能提取的时候才使用正则

正则还可以用于数据清洗,本文案例的正则只用于简单的数据清洗

正则介绍链接:https://cuiqingcai.com/977.html

案例是上一篇(https://blog.csdn.net/jeeson_z/article/details/81279249)的 豆瓣电影Top250

上次得到的结果:

其中 '电影介绍(intro)' 的内容中包含空格、换行等,使阅读难度增大

为了阅读方便,将用正则使多行显示为一行

使用正则

findall() 方法查找,'\S' 表示提取所有的非空白字符,re.S表示换行提取

# 用正则提取所有的可见字符
    intro = re.findall('\S', intro, re.S)

findall() 返回的是一个列表

使用 ' '.join() 方法将列表转换为字符串

 # 将列表转化为字符串
    intro = ''.join(intro)

结果展示:

全部代码

# 导入requests模块
import requests
# 导入BeautifulSoup模块
from bs4 import BeautifulSoup
# 导入正则re模块
import re


# 获取要爬取的网页的url
url = 'https://movie.douban.com/top250'
# 用get()方法请求下载网页
rsp = requests.get(url)
# text属性返回网页源码的内容
text = rsp.text
# 用BeautifulSoup()方法将源码内容生成能用BeautifulSoup解析的lxml格式文件
BS = BeautifulSoup(text, 'lxml')
# 用find_all()方法找到包含电影的所有标签
movies = BS.find_all(name='div', attrs={'class': 'item'})
# 遍历每一个电影信息
for movie in movies:
    # 提取图片的地址信息
    img = movie.find(name='img', attrs={'width': '100'}).attrs['src']
    # 提取电影名字信息
    name = movie.find(name='span', attrs={'class': 'title'}).string
    # 提取电影介绍信息
    # 注意:get_text()能提取包含有内嵌标签的信息
    intro = movie.find(name='p', attrs={'class': ''}).get_text()
    # 用正则提取所有的可见字符
    intro = re.findall('\S', intro, re.S)
    # 将列表转化为字符串
    intro = ''.join(intro)
    # 提取评价信息
    # 注意:评价信息分别在在多个<span>里面,所以用findall()方法
    star = movie.find(name='div', attrs={'class': 'star'}).find_all(name='span')
    # 获取评分
    score = star[1].string
    # 获取评价人数
    fans_num = star[3].string
    # 获取引语
    quote = movie.find(name='span', attrs={'class': 'inq'}).string
    # 用open()方法创建一个名为‘Top250’的‘txt’文件
    with open('Top250.txt', 'a', encoding='utf-8') as f:
        # 用write()方法写入内容
        f.write('img:'+img+'     name:'+name+'     intro:'+intro+'     score:'+score+'     fans_num:'+fans_num+'     quote:'+quote + '\n')

猜你喜欢

转载自blog.csdn.net/jeeson_z/article/details/81281770