爬虫用到的正则

我觉得爬虫所用到的正则表达式,只需熟练灵活的掌握 .*? 即可

无论你是解析单个数据,还是解析所有符合条件的数据,一般正则使用 .*? 配合着网页中的字符串就够用了


Some exercises

import re

html = '''<div id="songs-list">
    <h2 class="title">经典老歌</h2>
    <p class="introduction">
        经典老歌列表
    </p>
    <ul id="list" class="list-group">
        <li data-view="2">一路上有你</li>
        <li data-view="7">
            <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
        </li>
        <li data-view="4" class="active">
            <a href="/3.mp3" singer="齐秦">往事随风</a>
        </li>
        <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
        <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
        <li data-view="5">
            <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
        </li>
    </ul>
</div>'''
#前三个
print(re.search('<li.*?2">(.*?)<',html,re.S).groups())
print(re.search('<li.*?2.mp3.*?singer="(.*?)">(.*?)<',html,re.S).groups())
print(re.search('<li.*?active.*?singer="(.*?)">(.*?)<',html,re.S).groups())
#('一路上有你',)
#('任贤齐', '沧海一声笑')
#('齐秦', '往事随风')

#找到所有歌手和歌曲以及歌曲的链接
all = re.findall('href="(.*?)".*?er="(.*?)">(.*?)</a>',html,re.S)
print(all)
#[('/2.mp3', '任贤齐', '沧海一声笑'), ('/3.mp3', '齐秦', '往事随风'), ('/4.mp3', 'beyond', '光辉岁月'), ('/5.mp3', '陈慧琳', '记事本'), ('/6.mp3', '邓丽君', '但愿人长久')]

实战,豆瓣读书所有标签

import requests
import re

url = 'https://book.douban.com/tag/?view=type'
tag_dict = {}

def get_dict():             #接口,提供这个标签字典
    return tag_dict

r = requests.get(url).text
tag_title = re.findall('<a name="(.*?)".*?tag-title-wrapper', r, re.S)  #直接找到类别
tags = re.findall('table.*?tbody>(.*?)</tbody',r,re.S)  #找到每个div里tbody的内容
tags.remove(tags[0])
for n,i in enumerate(tags):
    tag_list = re.findall('">(.*?)</a><b',i,re.S)   #在tbody里找到每个a标签的内容
    tag_dict[tag_title[n]] = tag_list

for i in tag_dict:
    print(i,tag_dict[i])
#---------------------------------------------------------------------------------
文学 ['小说', '外国文学', '文学', '随笔', '中国文学', '经典', '日本文学', '散文', '村上春树', '诗歌', '童话', '儿童文学', '古典文学', '王小波', '名著', '杂文', '余华', '张爱玲', '当代文学', '钱钟书', '外国名著', '鲁迅', '诗词', '茨威格', '米兰·昆德拉', '杜拉斯', '港台']
流行 ['漫画', '推理', '绘本', '青春', '东野圭吾', '科幻', '言情', '悬疑', '奇幻', '武侠', '日本漫画', '韩寒', '推理小说', '耽美', '亦舒', '网络小说', '三毛', '安妮宝贝', '阿加莎·克里斯蒂', '郭敬明', '穿越', '金庸', '科幻小说', '轻小说', '青春文学', '魔幻', '几米', '幾米', '张小娴', 'J.K.罗琳', '古龙', '高木直子', '沧月', '校园', '落落', '张悦然']
文化 ['历史', '心理学', '哲学', '传记', '文化', '社会学', '艺术', '设计', '社会', '政治', '建筑', '宗教', '电影', '政治学', '数学', '中国历史', '回忆录', '思想', '国学', '人文', '人物传记', '音乐', '艺术史', '绘画', '戏剧', '西方哲学', '二战', '军事', '佛教', '近代史', '考古', '自由主义', '美术']
生活 ['爱情', '旅行', '生活', '成长', '心理', '励志', '女性', '摄影', '职场', '教育', '美食', '游记', '灵修', '健康', '情感', '两性', '人际关系', '手工', '养生', '家居', '自助游']
经管 ['经济学', '管理', '经济', '商业', '金融', '投资', '营销', '理财', '创业', '广告', '股票', '企业史', '策划']
科技 ['科普', '互联网', '编程', '科学', '交互设计', '用户体验', '算法', '科技', 'web', 'UE', '交互', '通信', 'UCD', '神经网络', '程序']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值