接下来给大家分享一下常用的正则表达式抓取网络数据的一些技巧。
抓取标签间的内容
我们前几篇文章给大家分享了urllib模块和requests模块是用来获取网络资源的两个模块,而我们获取的网络资源出了json的之外,都是跟HTML标签打交道。我们往往要做的就是获取标签的内容。比如我们获取一下百度的title标题:
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 此处使用findall结合正则表达式完成
title = re.findall(r'', content)
print(title[0])
抓取超链接标签间的内容
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 定义正则表达式获取所有网页的超链接
res = r"<a.*?href=.*?<\ a="">"
urls = re.findall(res, content)
for u in urls:
print(u)
当然如果想获取超链接中的内容我们也可以使用正则表达式,只不过使用了分组的内容就是()
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
#获取超链接和之间内容
res = r'(.*?)'
texts = re.findall(res, content, re.S|re.M)
for t in texts:
print(t)
观察结果:
抓取标签中的参数
HTML超链接的基本格式为“链接内容”,现在需要获取其中的URL链接地址,方法如下:
import re
import requests
url = "http://www.baidu.com/"
response = requests.get(url)
response.encoding='utf-8'
content = response.text
# 定义正则表达式获取所有网页的超链接
res = r"<a.*?href=.*?<\ a="">"
urls = re.findall(res, content)
# 将所有的超级链接拼接成字符串
all_urls = '\n'.join(urls)
# 定义正则表达式
res = r"(?<=href=)http:.+?(?=\>)|(?<=href=)http:.+?(?=\s)"
# 查找符合规则的超级链接
urls = re.findall(res, content, re.I|re.S|re.M)
for url in urls:
print(url)
抓取图片超链接标签的URL
HTML插入图片使用标签的基本格式为“”,则需要获取图片URL链接地址,下面���案例不仅获取的图片链接而且将图片保存到了本地。
import re
import requests
# 从网络获取一张图片的html标签
# 使用正则表达式获取src后面的内容
m = re.match(r'
print(m.group(1))
image_path = m.group(1)
# 如果想下载获取的图片链接我们结合requests和文件保存完成
response = requests.get(image_path)
# 获取响应信息的内容
result = response.content
# 获取图片名称
filename = image_path[image_path.rfind('%')+1:]
path = os.path.join(r'images', filename)
# 保存到本地将图片
with open(path, 'wb') as wstream:
wstream.write(result)
print('文件下载结束!')