用正则re库爬取糗事百科网图片

正则表达
单字符:
. 除了换行以外的所有字符

[aoe] a或者o或者e [a-e] —>abcde中的任意一个

\d 数字0-9

\D 非数字

\w 数字或者字母或者下划线、中文

\W 非w

\s 所有的空白字符

\S 所有的非空白字符

数量修饰:
*任意多次

+至少一次

?可可有可无,0或者1次

{m} 固定m次

{m,} 至少m次

{m,n} 大于m小于n次

边界:
\b

\B

$ 以 什么结尾

^ 以什么开头

分组:
() 这种小括号,视为一个整体 —> (ab){3} 意思是ab至少三次

() 确定优先级 子模式

patton.match\search\findall

match 从开始找

search任意位置找

findall找所有

re.sub(正则表达式,替换内容,字符串)

在这里插入图片描述
在这里插入图片描述

re.I不区分大小写

re.S

re.M 多行匹配
用正则爬取糗事百科网实例

#  
# made by 杨庆华
import urllib.parse
import urllib.request
import re
import os
def handle_request(url,page):
	headers = {
		'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
	}
	url = url+str(page)+'/'
	request = urllib.request.Request(url,headers=headers)
	return request
def download_image(content):
	pattern = re.compile(r'<div class="thumb">.*?<img src="(.*?)" .*?>.*?</div>',re.S)
	ret = pattern.findall(content)
	#ret是存放src的一个数组
	#遍历列表依次下载图片
	for imageSrc in ret:
		#图片路径url
		url = 'https:'+imageSrc
		print("每一个图片url是%s"%url)
		#如果不存在就创建文件夹
		dirName = 'qiutu'
		if os.path.exists(dirName):
			pass
		else:
			os.mkdir(dirName)
		fileName = imageSrc.split('/')[-1]
		filePath = dirName+'/'+fileName
		print('%s图片开始下载.....' % fileName)
		urllib.request.urlretrieve(url,filePath)
		print('%s图片下载完毕.....' % fileName)
def main():
	url = "https://www.qiushibaike.com/imgrank/page/"
	start_page = int(input("请输入起始页"))
	end_page = int(input("请输入结束页"))
	for page in range(start_page,end_page+1):
		print('第%s页开始下载.....'%page)
		# 构建请求对象
		request = handle_request(url,page)
		#发送请求对象,获取响应内容
		content = urllib.request.urlopen(request).read().decode()
		download_image(content)
	print("一共下载了%s个页面"% page)



if __name__ == '__main__':
	main()

在这里插入图片描述
可运行!亲测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值