使用正则表达式获取想要的文本/链接

获取数据的链接:壹原侑子(《xxxHOLIC》主要角色)_百度百科

import  requests
import re
#打开当前项目的壹原侑子.html,如果没有则进行创建
xie = open('壹原侑子.html',mode='w',encoding='utf-8')
#网页url
url = 'https://baike.baidu.com/item/%E5%A3%B9%E5%8E%9F%E4%BE%91%E5%AD%90/9524050?fr=aladdin'
#设置UA伪装
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}
#变量baike获取网页源码
# <div class="lemma-summary" label-module="lemmaSummary">.*<div>
baike =requests.get(url=url,headers=headers).text
# 写入网页源码
xie.write(baike)
# print(type(baike))

# 使用正则表达式得到的数据是“列表”
a = re.findall('<div class="content">.*<div class="main-content J-content">(.*)</div></div>',baike,re.S)

# 查看得到数据是str字符串类型,但是下方再次使用正则表达式的时候它会无法查询不到任何数据
# 无法查询到任何数据
# print(type(a[0]))
# print(a[0])
# aa = re.findall('<div class="lemma-summary" label-module="lemmaSummary">.*?<div class="para" label-module="para">(.*?)</div></div>',a[0])
# print(aa)

if type(a[0]) == type(str(a)):
    print('两者相等')
else:
    print('两者不相等')
print(type(str(a)))

# 虽然两者同属字符串类型,但正则表达式 似乎 无法得到列表中的数据,可以通过格式化一次获取的数据来解决

# 可以查询到数据
aa = re.findall('<div class="lemma-summary" label-module="lemmaSummary">.*?<div class="para" label-module="para">(.*?)</div></div>',str(a))
print('原来的数据')
print(aa[0])
# 将<a……></a>全部替换未空
# 注意了,使用replace函数和re.sub进行了字符串替换,它们返回的数值是单一的,会单独的添加到列表里,不会像re.findall中完整的添加到列表中
aaa = re.sub('<.*?>','',aa[0])
print('去掉a标签后的文本')
print(aaa)
# 剩下剩余的换行符,建议使用字符串的replace函数进行替换,因为正则表达式中含有\n所对应的含义:代表第n个括号的内容
aaaa = str(aaa).replace("\\n",'')
aaaa = str(aaaa).replace("\\",'')
aaaa = str(aaaa).replace("[1-2]&nbsp;&nbsp;",'')
# print(aaaa[2])
print('最终得到想要的文本')
print(aaaa)

print('获取a标签中的链接')
print('获取a标签中的所有内容,可用于参考获取图片链接以及alt内的内容')
bbb = re.findall('<a target=_blank href="(.*?)">',aa[0])
print(bbb)
print('获取单独链接')
aaa =re.findall('<a target=_blank href="(.*?)"',aa[0])
for i in aaa:
    print('https://baike.baidu.com'+i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值