爬虫之re块解析
一.re
这个去匹配比较麻烦,以后也比较少用,简单看一个案例就行
''' 爬取数据流程: 1.指定url 2.发起请求 3.获取页面数据 4.数据解析 5.持久化存储 ''' import requests import re import os headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } url = 'https://www.qiushibaike.com/pic/' #获取一整张页面数据源码 page_text = requests.get(url=url,headers=headers).text #解析数据(将所有的图片链接获取) ''' <div class="thumb"> <a href="/article/121534421" target="_blank"> <img src="//pic.qiushibaike.com/system/pictures/12153/121534421/medium/R0ZJYJDN8THHM0RS.jpg" alt="image"> </a> </div> ''' if not os.path.exists('qiubai'): os.mkdir('qiubai') ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>' img_url_list = re.findall(ex,page_text,re.S)#re.S单行匹配 for url in img_url_list: url = 'https:'+url img_data = requests.get(url=url,headers=headers).content img_name = url.split('/')[-1] img_path = 'qiubai/'+img_name with open(img_path,'wb') as fp: fp.write(img_data) print(img_name+'下载成功!!!')
二.使用re的注意点
1.Windows转义符
2.避免出错
在正则表达式中尽量使用原始字符串,在待匹配字符中看到什么就在正则表达式中写什么,不容易出问题
原始字符串的查看,可以借助ipython去查看,不要使用print
3.
re.findall('a(.*?)b','str')能返额回括号中的内容,括号前后的内容能起到一个定位的效果
原始字符串,待匹配字符串出现反斜杠的时候,可以使用r来忽略反斜杠带来的转义效果
点号默认匹配不到'\n'
'/s'能匹配空白字符,不仅仅包括空格,还有'/t|\r\n'