python爬虫之正则表达式练习

这段代码展示了如何使用Python的urllib和re库爬取糗事百科网站上的图片链接,并下载图片。通过设置请求头伪装浏览器,遍历指定页码范围内的网页,正则表达式匹配图片URL,然后下载图片并保存在本地tt文件夹内。虽然示例仅爬取了一页,但可以扩展为多线程爬取以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬取糗图图片

代码如下:

import re
import urllib.request
import urllib.parse
import uuid

from tqdm import tqdm  # 只是显示进度条用的

url_list = []  # 所有的地址列表
dowload_url = []  # 所有的下载地址

# 得到每个页面
def get_page(start_page,end_page):
    # 糗图的地址
    url = 'https://www.qiushibaike.com/imgrank/page/'
    for i in range(start_page,end_page+1):
        url_address = url + str(i)  # 拼接是哪一页
        url_list.append(url_address)  # 把得到的具体页面地址加入到地址列表中
    return url_list  # 返回地址列表


# 设置请求头
def request_obj():
    headers = {
        # 这里改成自己的user-agent
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54',
    }
    return headers


# 得到图片下载地址
def get_img_url(urllist):
    for url in urllist:
        request = urllib.request.Request(headers=request_obj(),url=url)
        # 得到每个地址的响应对象
        response = urllib.request.urlopen(request)
        # 正则匹配到的所有图片地址,findall返回的是一个列表
        partner = re.findall(r'<img src="(.*?)" alt=".*?" class="illustration" width="100%" height="auto">',response.read().decode())
        dowload_url = partner.copy()
    return dowload_url


# 下载图片
def download_img(uulist):
    for url in tqdm(uulist):
        # 拼接图片下载地址
        url = "https:"+url
        uu = str(uuid.uuid4())  # 使用uuid给图片命名
        img_url = uu[:8] + '.' + url.rsplit('.')[-1]
        # 这里在当前目录下建立了一个tt文件夹存放图片,必须建文件夹
        urllib.request.urlretrieve(url,filename='tt/'+img_url)


def main():
	# 这里的get_page两个参数可以更改,这里只爬取一页
    download_img(get_img_url(get_page(1, 1)))


if __name__ == '__main__':
   main()

这里也可以用多线程爬取,多线程爬取以前已经写了,需要的可以看看我以前的爬虫文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值