一个案例:TXT文本存储爬虫数据

目标

1. 获取 https://ssr1.scrape.center/ 页面的电影信息(共10条)

2. 信息包括 名称,类别,上映时间,评分

3. 结果保存到movies.txt

代码

import requests
import re

url = 'https://ssr1.scrape.center/'

# 获取页面内容content content为需要解析的内容 
content = requests.get(url).text 

# re.findall('<h2.*?>(.*?)', content)获取括号表达式中的内容 结果是一个列表 
names = re.findall('<h2.*?>(.*?)', content, re.S)

#三个空列表存储数据
categories = []
published_at = []
scores = []

for name in names:
    # 正则语法 用来匹配包含categories, published_at, score的字符串
    regular_expression = '>{}.*?p>'.format(name)
    
    # 找到包含categories,published_at,score的字符串   
    string = re.search(regular_expression, content, re.S).group() print(string)   
    
    # 找到categories 形成列表   
    categories.append(re.findall('(.*?)', string))   

    # 找到published_at 形成列表 注意某些电影的上映日期为空 进行判断 否则程序出错   
    pub_date = re.search('\\d{4}-\\d{2}-\\d{2}', string).group() \
        if re.search('\\d{4}-\\d{2}-\\d{2}', string) else None                       
    published_at.append(pub_date)   
    
    # 找到score 形成列表   
    scores.append(re.search('\\d\\.\\d', string).group())   

# 数据保存到txt文件   
fp = open('movies.txt', 'w', encoding='utf-8')   
for i in range(len(names)):     
    fp.write(f'名称: {names[i]}\n类别: {categories[i]}\n \
        上映时间: {published_at[i]}\n评分: {scores[i]}\n')
    fp.write('=='*30) fp.write('\n')

总结

1.正则匹配非常容易出错 主要是匹配的范围比预想的大

2.匹配 "." 需要转义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值