Python爬虫入门(2)---正则表达式匹配,json与python数据互相转换

一、正则表达式

1.1 简单匹配

# 导入正则表达式模块
import re
'''
findall方法:
    re.findall(pattern,string,flag=0)
        pattern:正则表达式
        string:要查找的字符串
        flag:匹配模式
        返回值:返回string中与pattern匹配的结果列表
'''
# 字符匹配
# 从后面的参数中找是否有前面正则表达式的匹配对象
rs = re.findall('abc','askdjhakjdhabcasldkjasdh')
# ['abc']
print(rs)
# .号匹配除\n外的其它字符
rs = re.findall('a.c','askdhaksjhdadckajdhkajcdksjfha\ndhd')
# ['adc', 'ajc']
print(rs)
# 匹配a.x,使用\.即可
rs = re.findall('a\.x','askdhasjkdha.xakjfkhskjdhfkh')
# ['a.x']
print(rs)
# []的匹配
rs = re.findall('a[bcd]e','abeaksjdhkajhaceakjshdadesfkhhlaee')
# ['abe', 'ace', 'ade']
print(rs)
# 匹配预定义的字符
# \d匹配单个字符
rs = re.findall('\d','skdjfhdkjh3akfjh2sdkjfh')
# ['3', '2']
print(rs)
# \w匹配字母,数字,下划线和中文
rs = re.findall('\w','sds123中%$^')
# ['s', 'd', 's', '1', '2', '3', '中']
print(rs)
# *的使用,允许\d出现0次或无数次
rs = re.findall('a\d*','a213')
# ['a213']
print(rs)
# 允许出现0次,可以匹配上
rs = re.findall('a\d*','a')
# ['a']
print(rs)
# +号要求至少有一个
rs = re.findall('a\d+','a')
# []
print(rs)
# ?只匹配一个或0个
rs = re.findall('a\d?','a123')
# ['a1']
print(rs)
# 用花括号指定匹配个数
rs = re.findall('a\d{2}','a13798')
# ['a13']
print(rs)

1.2 匹配模式和分组

import re
'''
指定re.findall方法的匹配模式
'''
# 使点号能匹配\n
rs = re.findall('a.c','a\nc',re.DOTALL)
# ['a\nc']
print(rs)
rs = re.findall('a.c','a\nc',re.S)
# ['a\nc']
print(rs)

'''
findall方法中分组的使用
'''
rs = re.findall('a.+c','a\nc',re.DOTALL)
# ['a\nc']
print(rs)
# 使用()进行分组,则只返回括号里的查找到的内容
rs = re.findall('a(.+)c','a\nc',re.DOTALL)
# ['\n']
print(rs)

1.3 r原串

# 在正则表达式中使用r原串
import re
'''
正则中使用r原串,能忽略转移字符带来的影响
待匹配的字符串中有几个'\',就在r原串中加上几个'\'
'''
# 匹配不出来,需要写四个转义符才行
rs = re.findall('a\\nbc','a\\nbc')
# []
print(rs)
rs = re.findall('a\\\\nbc','a\\nbc')
# ['a\\nbc']
print(rs)
# 使用r原串
rs = re.findall(r'a\\nbc','a\\nbc')
# ['a\\nbc']
print(rs)

1.4 提取丁香园疫情的json数据

import re
import requests
from bs4 import BeautifulSoup
response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia')
data = response.content.decode()
soup = BeautifulSoup(data, 'lxml')
script = soup.find(id='getListByCountryTypeService2true')
text = script.string
# 使用正则表达式提取json字符串
# 提取列表中的第一个元素
json = re.findall(r'\[.*]',text)[0]
print(json)

二、python与json数据的互相转换

2.1 json转python

import json
'''
python中的json模块
    json模块是python中自带的模块,用于json与python数据间的相互转换
本例演示json转换为python
'''
# 1.json字符串转换为python数据
json_str='''[{"provinceName":"美国","currentConfirmedCount":1179041,"confirmedCount":1643499},{"provinceName":"英国",
"currentConfirmedCount":222227,"confirmedCount":259559}]'''
rs = json.loads(json_str)
print(rs)
# 2.json格式文件转换为python类型数据
with open('test.json',encoding='utf-8') as file:
    rs = json.load(file)
    print(rs)

2.2 python转json

import json
'''
python类型的数据转为json
'''
# 1.python类型的数据转换为json
s = '''[{"provinceName":"美国","currentConfirmedCount":1179041,"confirmedCount":1643499},{"provinceName":"英国",
"currentConfirmedCount":222227,"confirmedCount":259559}]'''
rs = json.loads(s)
# 使其不按ASCII码呈现
s = json.dumps(rs,ensure_ascii=False)
print(s)
# 2.python类型的数据转换为json格式并存储到文件中
with open('test1.json','w',encoding='utf-8') as fp:
    json.dump(rs,fp,ensure_ascii=False)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值