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()
如果使用贪心算法,则中间的标签都会包含在内