17-图片下载以及正则在爬虫的简单应用

一、正则在爬虫中的应用

请求数据部分大同小异,都是向网站发送请求然后获取数据,然后正则主要是对获取的数据进行操作;

对于我们想要获取的内容,利用正则表达式匹配我们想要的内容,其他不变的内容原样写

示例如下:

import csv

import requests
from re import findall
from bs4 import BeautifulSoup
resp=requests.get('https://cd.zu.ke.com/zufang')
if resp.status_code==200:
    print('请求成功')
result=resp.text
print(result)
# 解析数据
names=findall(r'(?s)<a class="twoline".+?>(.+?)</a>',result)
names=[x.strip() for x in names]

prices=findall(r'<span class="content__list--item-price"><em>(\d+)</em>',result)
# print(prices)

# 使用map()将名称和价格合并
house=map(lambda i,j:(i,j),names,prices)
# 写入文件
with open('file/租房信息.csv','a',encoding='utf-8',newline='') as f:
    writer=csv.writer(f)
    writer.writerow(['名称','价格'])
    writer.writerows(list(house))
二、图片下载
单个图片下载

获取指定图片的地址,然后向地址发送请求-获取图片数据-将数据写入到文件中

示例如下:

imimport requests
from re import findall
def download_image(url:str):
    # 1对图片地址发送请求
    response=requests.get(url)    # 2获取图片数据
    data=response.content
    # 3将数据写入到图片文件中
    with open('file/宝儿姐.jpeg','wb') as f:
        f.write(data)
if __name__ == '__main__':
    download_image('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fblog%2F202010%2F30%2F20201030203647_xonrv.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662863010&t=c71b4927e303ff5b5cf31eb68f2f7fcb')

图片批量下载

图片批量下载的时候存在一个问题,那就是下载的每个图片名字的命名,这个地方就会用到一个模块

from uuid import uuid1

与单个图片下载有所不同的是获取图片地址和存储文件的时候,获取的时候可以用select,这样就得到一个列表,通过循环遍历得到每个图片地址,在存储图片文件的时候利用uuid给每个图片取一个不一样的名字

示例如下:

from uuid import uuid1  #每次创建一个不一样的id值
import requests
from  re import findall
# 1 获取整个页面的数据
response=requests.get('https://cd.zu.ke.com/zufang')
content=response.text
# 2 解析数据获取所有房屋的图片地址
all_image=findall(r'(?s)<a\s+class="content__list--item--aside".+?>\s+<img.+?data-src="(.+?)"',content)
# print(all_image)

for i in all_image:
    # 3 对图片地址发送请求
    resp = requests.get(i)
    content=resp.content
    # 4 将数据写入到图片文件中
    with open(f'file/image/{uuid1()}.jpeg','wb') as f:
        f.write(content)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兮知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值