欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

py爬虫

程序员文章站 2022-05-14 18:16:13
...
from urllib import request
import re
urlopen = request.urlopen('https://docs.oracle.com/javase/8/docs/api/index.html')
data = urlopen.read()
html = data.decode('utf-8')
# 零宽断言一共分为正向和反向两类,每类又分为预测先行和回顾后发两种:
#   §零宽度正预测先行断言,简称正向先行断言,语法是(?=exp),它断言此位置的后面能匹配表达式exp。
#   §零宽度正回顾后发断言,简称正向后发断言,语法是(?<=exp),它断言此位置的前面能匹配表达式exp。
#   §零宽度负预测先行断言,简称反向先行断言,语法是(?!exp),它断言此位置的后面不能匹配表达式exp。
#   §零宽度负回顾后发断言,简称反向后发断言,语法是(?<!exp),它断言此位置的前面不能匹配表达式exp。
# ret = re.search('(?<=<p>).*(?=</p>)', html)

# if ret:
#     print(ret.group())
# else:
#     print('null')
# with open('test.html', 'w') as f:
#     f.write(data.decode('utf-8'))
# 后边多一个?表示懒惰模式。
# .表示除\n之外的任意字符
# *表示匹配0-无穷
# +表示匹配1-无穷
# 表达式 .* 的意思很好理解,就是单个字符匹配任意次,即贪婪匹配。
# 表达式 .*? 是满足条件的情况只匹配一次,即懒惰匹配
fd = re.findall('<script src=".*">.*</script>', html, re.M)
for x in fd:
    print(x)
    print('\n')

fd = re.search('<script src=".*">.*</script>', html, re.M)
print(fd.group())