小白Vayne 2023-11-17 21:46 采纳率: 33.3%
浏览 7

Python爬虫xpath是正确的但是不起作用


import urllib.request
from lxml import etree
#https://sc.chinaz.com/tupian/meinvtupian.html
#https://sc.chinaz.com/tupian/meinvtupian_2.html
def creat_request(page):
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/meinvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/meinvtupian_'+str(page)+'.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    request = urllib.request.Request(url=url, headers=headers)
    print(url)
    return request
def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content
def down_load(content):
#   下载图片
    #urllib.request.urlretrieve('图片地址','文件名字')
    tree = etree.HTML(content)
    name_list = tree.xpath('//div[@class="item masonry-brick"]/img/@alt')
#设计图片的网站会进行懒加载
    src_list = tree.xpath('//div[@class="item masonry-brick"]/img/@src2')

    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:'+src
        print(name,url)
        urllib.request.urlretrieve(url=url, filename=name+'.jpg')


if __name__ == '__main__':
    start_page = int(input("起始页码"))
    end_page = int(input("结束页码"))
    for page in range(start_page,end_page+1):
        #请求对象的定制
        request = creat_request(page)
        #获取源码
        content = get_content(request)
        #下载
        down_load(content)

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-18 08:47
    关注

    【以下回答由 GPT 生成】

    import requests
    from bs4 import BeautifulSoup
    import os
    
    def download_images(url, folder):
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        img_tags = soup.find_all('img')
    
        for img in img_tags:
            img_url = img['src']
            img_name = img['alt']
            full_img_url = 'https:' + img_url
            img_data = requests.get(full_img_url).content
            with open(os.path.join(folder, img_name + '.jpg'), 'wb') as f:
                f.write(img_data)
    
    if __name__ == '__main__':
        start_page = int(input("起始页码"))
        end_page = int(input("结束页码"))
        folder_name = input("请输入文件夹名称:")
    
        if not os.path.exists(folder_name):
            os.makedirs(folder_name)
    
        for page in range(start_page, end_page + 1):
            if page == 1:
                url = 'https://sc.chinaz.com/tupian/meinvtupian.html'
            else:
                url = f'https://sc.chinaz.com/tupian/meinvtupian_{page}.html'
            download_images(url, folder_name)
    

    通过上述代码,我对你的Python代码进行了修改,首先使用requests库和BeautifulSoup库替代了urllib库和lxml库,因为这两个库在处理网页爬取和解析的时候更加方便和有效。接着通过对每个图片的src和alt属性进行解析,将图片下载到指定的文件夹中。最后,通过输入起始页码、结束页码和文件夹名称,运行爬虫并下载图片。

    希望我的回答能够解决你的问题,如果还有其他疑问,欢迎继续提问。



    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 11月17日

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振