我觉得爬虫所用到的正则表达式,只需熟练灵活的掌握 .*? 即可
无论你是解析单个数据,还是解析所有符合条件的数据,一般正则使用 .*? 配合着网页中的字符串就够用了
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)
tags.remove(tags[0])
for n,i in enumerate(tags):
tag_list = re.findall('">(.*?)</a><b',i,re.S)
tag_dict[tag_title[n]] = tag_list
for i in tag_dict:
print(i,tag_dict[i])
文学 ['小说', '外国文学', '文学', '随笔', '中国文学', '经典', '日本文学', '散文', '村上春树', '诗歌', '童话', '儿童文学', '古典文学', '王小波', '名著', '杂文', '余华', '张爱玲', '当代文学', '钱钟书', '外国名著', '鲁迅', '诗词', '茨威格', '米兰·昆德拉', '杜拉斯', '港台']
流行 ['漫画', '推理', '绘本', '青春', '东野圭吾', '科幻', '言情', '悬疑', '奇幻', '武侠', '日本漫画', '韩寒', '推理小说', '耽美', '亦舒', '网络小说', '三毛', '安妮宝贝', '阿加莎·克里斯蒂', '郭敬明', '穿越', '金庸', '科幻小说', '轻小说', '青春文学', '魔幻', '几米', '幾米', '张小娴', 'J.K.罗琳', '古龙', '高木直子', '沧月', '校园', '落落', '张悦然']
文化 ['历史', '心理学', '哲学', '传记', '文化', '社会学', '艺术', '设计', '社会', '政治', '建筑', '宗教', '电影', '政治学', '数学', '中国历史', '回忆录', '思想', '国学', '人文', '人物传记', '音乐', '艺术史', '绘画', '戏剧', '西方哲学', '二战', '军事', '佛教', '近代史', '考古', '自由主义', '美术']
生活 ['爱情', '旅行', '生活', '成长', '心理', '励志', '女性', '摄影', '职场', '教育', '美食', '游记', '灵修', '健康', '情感', '两性', '人际关系', '手工', '养生', '家居', '自助游']
经管 ['经济学', '管理', '经济', '商业', '金融', '投资', '营销', '理财', '创业', '广告', '股票', '企业史', '策划']
科技 ['科普', '互联网', '编程', '科学', '交互设计', '用户体验', '算法', '科技', 'web', 'UE', '交互', '通信', 'UCD', '神经网络', '程序']