爬虫之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'

 

posted @ 2019-02-26 21:09  阿布_alone  阅读(307)  评论(0编辑  收藏  举报
TOP