[分章:代码知识]python 爬虫,正则表达式解析数据

 代码思路

  1. 从网站获取完整网页数据
  2. 数据转换成string,查找指定字符串:
    1. findall、.*?搭配使用,查找出所有目标数据list
    2. for循环遍历list,提取目标url
    3. 根据url从网站获取图片数据
    4. 保存数据

完整源码

# 爬虫实战3,正则表达式解析数据
pass # 这是分隔符
# 1、导入库
import os
import requests
import time
import re
t1 = time.thread_time()     # 测试开始时间

# 2、爬取数据
url = "https://pic.sogou.com/"
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
}
if not os.path.exists("./img"):
    os.mkdir("./img")   # 创建图片存储路径
page_Text = requests.get(url,headers=headers)
with open('123.html','wb') as f:
    f.write(page_Text.content)  # 保存html log
str1 = page_Text.text
# str1 = ('<img src="//img04.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/80/crop/xy/ai/t/0/w/562/h/752?appid=122&amp;url=https://img01.sogoucdn.com/app/a/100520020/8ff759f66f5e475579bb7083f6f958e6" alt style="object-fit: cover; height: 100%">'
#         '<img src="//img05.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/80/crop/xy/ai/t/0/w/562/h/752?appid=122&amp;url=https://img01.sogoucdn.com/app/a/100520020/8ff759f66f5e475579bb7083f6f958e6" alt style="object-fit: cover; height: 100%">'
#         '<img src="//img06.sogoucdn.com/v2/thumb/retype_exclude_gif/ext/auto/q/80/crop/xy/ai/t/0/w/562/h/752?appid=122&amp;url=https://img01.sogoucdn.com/app/a/100520020/8ff759f66f5e475579bb7083f6f958e6" alt style="object-fit: cover; height: 100%">')

# 3、提取数据
ex = '<img src=.*? alt style=.*?>'  # .*?为缺省数据代表符号,意思为省略一下数据,以便于批量性查找开头相同,但是中间内容不同的数据
img_src_list = re.findall(ex,str1)
print(f"找到了{len(img_src_list)}个数据")
# 提取完整url,属于分析数据的一环
for i in range(len(img_src_list)):
    ex2 = 'https.*?"'   # 查找https开头的url数据
    img2 = re.findall(ex2,img_src_list[i])
    str2 = img2[0].replace('"','')      # 把不需要的字符串替换成空字符串
    img_data = requests.get(url=str2,headers=headers).content    # 在取得完整的image url后,获取图片数据
    
# 4、保存数据
    img_name = str2.split('/')[-1]   # 获取image名称
    imgPath = 'img\\'+img_name+".png"   # image存储路径
    with open(imgPath,'wb') as f:
        f.write(img_data)
    time.sleep(0.001)   # 不要太频繁提取数据,否则会被认为是在攻击网站
    print(str2)
print(f"use time : {0}",time.thread_time() - t1)    # 打印测试耗时
pass # 这是分隔符

相关推荐

  1. Python表达式

    2024-01-13 10:56:02       48 阅读
  2. Python 表达式

    2024-01-13 10:56:02       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 10:56:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 10:56:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 10:56:02       82 阅读
  4. Python语言-面向对象

    2024-01-13 10:56:02       91 阅读

热门阅读

  1. 数据结构之基本数据类型(Python)

    2024-01-13 10:56:02       62 阅读
  2. Vue模板的理解和使用

    2024-01-13 10:56:02       57 阅读
  3. 【C】struct 、struct 指针

    2024-01-13 10:56:02       51 阅读
  4. svn - 配置账号、自动更新、配置log权限

    2024-01-13 10:56:02       49 阅读
  5. PostgreSQL 清理空间命令

    2024-01-13 10:56:02       48 阅读
  6. spring boot 返回文件流

    2024-01-13 10:56:02       47 阅读
  7. 将抖音视频转成MP3并下载

    2024-01-13 10:56:02       110 阅读