ohhiya 2023-10-20 00:36 采纳率: 0%
浏览 6

python爬虫运行后出现文字没有图片

运行后结果全是一串串的名字代码,这串代码哪出现问题了,有人帮忙看一下吗

import os

import requests
from bs4 import BeautifulSoup
headers = {
    'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
dirName = 'ImgLib'
if not os.path.exists(dirName):
    os.mkdir(dirName)
url = 'https://consumer.huawei.com/cn/'
response = requests.get(url,headers = headers)
#print(response.text)
content = response.text
page = BeautifulSoup(content,"html.parser")
#print(page)
name_list = page.select('div[class="laptops-main-product-card"]')
print(name_list)
#for name in list:
#   print(name.get_text())
img_url_list = page.select('div[class="products-display-box container init-normal"]')
#print(img_url_list)
for img in img_url_list:
    print(img)
for name in name_list:
    img_name = name.get_text().replace('/','_')+'.jpg'
    print(img_name)
    img_style = img.attrs.get("style").split('"')[1].strip('/')
    #
    print(img_style)
    img_src ='https://consumer.huawei.com/cn/phones/' + img_style
    print(img_src)
    img_content = requests.get(img_src,headrs = headers).content
    imgpath = dirName + '/' + img_name
    with open(imgpath,'wb')as fp:
        fp.write(img_content)

运行结果:

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-20 02:03
    关注

    【以下回答由 GPT 生成】

    问题分析: 根据代码和问题描述,可能存在以下几个问题导致只有文字没有图片显示: 1. 网络请求问题:爬虫可能未成功获取到图片的内容。 2. 路径问题:图片保存路径可能不正确。 3. HTML解析问题:可能未正确解析出图片的URL。

    解决方案: 1. 确认网络请求是否成功: - 可以添加异常处理,查看是否有网络请求失败的情况。 - 可以打印出获取到的response的状态码,确认请求是否成功。

    response = requests.get(img_src, headers=headers)
    if response.status_code == 200:
        img_content = response.content
    else:
        print("请求图片失败")
    
    1. 确认图片保存路径:
    2. 可以打印出imgpath,确认图片保存路径是否正确。
    3. 可以在打开图片文件之前先确认目录是否存在,不存在则创建目录。
    if not os.path.exists(dirName):
        os.makedirs(dirName)  # 递归创建目录
    
    1. 确认HTML解析是否正确:
    2. 可以打印出img_src,确认获取到的图片URL是否正确。
    3. 可以打印出img_style,确认获取到的图片style属性值是否正确。
    4. 可以打印出img_name,确认获取到的图片名称是否正确。
    for img in img_url_list:
        img_style = img.attrs.get("style").split('"')[1].strip('/')
        img_src ='https://consumer.huawei.com/cn/phones/' + img_style
        print(img_src)
    
    for name in name_list:
        img_name = name.get_text().replace('/', '_') + '.jpg'
        print(img_name)
    

    根据问题描述,可能性比较大的是第二个原因:路径问题,可以先尝试处理这个问题。

    优化后的代码如下所示:

    import os
    import requests
    from bs4 import BeautifulSoup
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    
    dirName = 'ImgLib'
    if not os.path.exists(dirName):
        os.mkdir(dirName)
    
    url = 'https://consumer.huawei.com/cn/'
    response = requests.get(url, headers=headers)
    content = response.text
    page = BeautifulSoup(content, "html.parser")
    name_list = page.select('div[class="laptops-main-product-card"]')
    img_url_list = page.select('div[class="products-display-box container init-normal"]')
    
    if not os.path.exists(dirName):
        os.makedirs(dirName)
    
    for img in img_url_list:
        img_style = img.attrs.get("style").split('"')[1].strip('/')
        img_src = 'https://consumer.huawei.com/cn/phones/' + img_style
        print(img_src)
    
    for name in name_list:
        img_name = name.get_text().replace('/', '_') + '.jpg'
        print(img_name)
        img_style = img.attrs.get("style").split('"')[1].strip('/')
        img_src = 'https://consumer.huawei.com/cn/phones/' + img_style
        print(img_src)
        img_content = requests.get(img_src, headers=headers).content
        imgpath = dirName + '/' + img_name
        with open(imgpath, 'wb') as fp:
            fp.write(img_content)
    

    这样优化后,应该可以正确保存图片。如果还有问题,可以进一步分析网络请求和HTML解析的问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月20日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大