ly_better 2021-11-27 22:00 采纳率: 50%
浏览 97
已结题

关于#python#的问题:python爬虫爬取百度图片

 ###### 问题遇到的现象和发生背景
想要爬取百度上的图片,爬取不出来
 ###### 问题相关代码,请勿粘贴截图

import requests
import urllib.request
from bs4 import BeautifulSoup
import os
import time

url = 'https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C6%A4%BF%A8%C7%F0'
headers = {'User-Agent': 'Mozilla/5.0(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KETTLE, like '
                         'Gecko) Chrome/34.0.1847.137 Safari/537.36 LOBBERS'}
response = requests.get(url, headers=headers)  # 使用headers避免访问受限
soup = BeautifulSoup(response.content, 'html.parser')
items = soup.find_all('img')
folder_path = './photo/'
if not os.path.exists(folder_path):  # 判断文件夹是否已经存在
    os.makedirs(folder_path)  # 创建文件夹

for index, item in enumerate(items):
    if item:
        html = requests.get(item.get('src'))  # get函数获取图片链接地址,requests发送访问请求
        img_name = folder_path + str(index + 1) + '.png'
        with open(img_name, 'wb') as file:  # 以byte形式将图片数据写入
            file.write(html.content)
            file.flush()
        file.close()  # 关闭文件
        print('第%d张图片下载完成' % (index + 1))
        time.sleep(1)  # 自定义延时
print('抓取完成')

 ###### 运行结果及报错内容

img

  • 写回答

2条回答 默认 最新

  • 关注

    你检查下这个网页中的内容是不是通过js代码读取外部json数据来动态更新的。
    requests只能获取网页的静态源代码,动态更新的内容取不到。
    对于动态更新的内容要用selenium 来爬取。

    或者是通过F12控制台分析页面数据加载的链接,找到真正json数据的地址进行爬取。

    在页面上点击右键,右键菜单中选 "查看网页源代码"。

    img


    这样看到的才是网页的静态源代码。
    如果这个网页的静态源代码中有你需要爬取的内容,就说明该页面没有动态内容,可以用requests爬取。
    否则就说明该页面的内容是动态更新的,要用selenium 来爬取.

    你题目的解答代码如下:

    import requests
    import urllib.request
    from bs4 import BeautifulSoup
    import os
    import time
    url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=11169489735361612176&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E7%9A%AE%E5%8D%A1%E4%B8%98&queryWord=%E7%9A%AE%E5%8D%A1%E4%B8%98&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1638026359917='
    headers = {
    'Host': 'image.baidu.com',
    'Pragma': 'no-cache',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
    }
    response = requests.get(url, headers=headers)  # 使用headers避免访问受限
    print(response.json())
    items = response.json()['data']
    folder_path = './photo/'
    if not os.path.exists(folder_path):  # 判断文件夹是否已经存在
        os.makedirs(folder_path)  # 创建文件夹
    for index, item in enumerate(items):
        if item:
            print(item['middleURL'])
            html = requests.get(item['middleURL'])  # get函数获取图片链接地址,requests发送访问请求
            img_name = folder_path + str(index + 1) + '.png'
            with open(img_name, 'wb') as file:  # 以byte形式将图片数据写入
                file.write(html.content)
                file.flush()
            file.close()  # 关闭文件
            print('第%d张图片下载完成' % (index + 1))
            time.sleep(1)  # 自定义延时
    print('抓取完成')
    

    img

    如有帮助,望采纳!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月27日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题