正则表达式的运用

re模块(集中了正则表达式所有的功能)

¨邮箱地址

[A~Za~z0-9\._+]+@[A~Za~z]+\.(com|edu|net)

其中[A~Za~z0-9\._+]+表示一个字符要满足中括号里的范围,字符可以是A~Z或者a~z或者0-9或者“."(¨元字符包括:. * ? + ^ $ | \,所以需要匹配元字符时需要加上反斜线\ ),可以出现1到n次

接着加上“@”字符

[A~Za~z]+表示匹配中括号的字符

接着加上“."

最后加上圆括号里选择的一个内容

注:\d匹配任意数字字符[0-9]

\w匹配任何包含下划线的字符[A~Za~z0-9_]

 

只想抓取礼物图像的相关信息

例如:

¨<img src="../img/gifts/logo.jpg" style="float:left;">

¨<img src="../img/gifts/img1.jpg">

¨<img src="../img/gifts/img2.jpg">

对应正则表达式:\.\.\/img\/gifts\/img.*\.jpg

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

html=urlopen('http://www.pythonscraping.com/pages/page3.html')
bs=BeautifulSoup(html,'html.parser')
images=bs.find_all('img',{'src':re.compile('\.\.\/img\/gifts/img.*\.jpg')})
for image in images:
    print(image['src'])
//上一句可以换成
imageSRC=image.get("src")
    print(imageSRC)

结果:
../img/gifts/img1.jpg
../img/gifts/img2.jpg
../img/gifts/img3.jpg
../img/gifts/img4.jpg
../img/gifts/img6.jpg

获取标签的属性信息 可以是href

 

表达式 .* 就是单个字符匹配任意次,即贪婪匹配。 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配.

比如:<H1>Chapter 1 - 介绍正则表达式</H1>

使用/<.*>/匹配的结果为:H1>Chapter 1 - 介绍正则表达式</H1。

使用/<.*?>/匹配结果为:H1。

查找括号里的内容
import  re
a='gasfxxlxsdhfkjhfbdxxll45xx'
info=re.findall('xx(.*?)x',a)
print(info)
结果:
['l', 'll45']

贪心法(尽可能大的去匹配字符)

import  re
a='gasfxxlxsdhfkjhfbdxxll45xx'
info=re.findall('xx(.*)x',a)
print(info)

结果:
['lxsdhfkjhfbdxxll45x']

爬取小说:

import requests
import re
import time
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
         }
f=open('E:/aa.txt','a+')
def get_info(url):
    res=requests.get(url,headers=headers)
    if res.status_code==200://表示http请求成功
        contents=re.findall('<p>(.*?)</p>',res.content.decode('utf-8'),re.S)
        for content in contents:
            f.write(content+'\n')
    else:
        pass
if __name__== '__main__':      //这里一定记得需要每一边的双下划线
    urls=['http://www.doupoxs.com/doupocangqiong/{}.html'.format(str(i)) for i in range(2,9)]
    for url in urls:
        get_info(url)
        time.sleep(1)
        f.close()
如果使用贪心算法,则中间的标签都会包含在内

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值