python3写360图库爬虫

前言

要求:进行搜索并且保存360图库图片
图库地址360图库

基本思路

简单分析以后,发现360图库使用动态渲染,并且采用下拉反式加载图片,那么解决问题就出现3种常用方法,操作js模拟浏览器Ajax。如果使用模拟的反式代码量较高,速度慢(当然也更加稳定),但是经过简单分析以后发现图片是使用ajax加载的。那么就直接使用ajax。

分析该请求
在这里插入图片描述
查看请求的response
经过json.cn处理
发现请求的结果是一个json字符串,并且在字符串中找到了"img":“http://image2.sina.com.cn/ty/k/2007-02-28/U1830P6T12D2772429F44DT20070228124853.jpg”,这样一个字段,这不就是要爬取的图片地址吗。
那么问题就简单了,我们可以通过requsets模拟请求后,直接解析json提取图片地址,保存就完成工作了。

我们分析请求头有
在这里插入图片描述
在这里插入图片描述
这样几个重要字段
q:搜索关键词
ps-sn:爬取图片的标记(每次增加60)
pn:爬取图片的页数
简单分析以后就开始写代码

import requests
from urllib.request import urlretrieve
import time


def image_spider(key_q, key_ps, key_sn):  # 请求函数
    url = "http://image.so.com/j?q=nba&src=srp&correct=nba&pn=60&ch=&sn=208&ps=201&pc=60&pd=1&prevsn=148" \
          "&sid=39b8dabeae51031efce5a8d8b1fc6957&ran=0&ras=6&cn=0&gn=0&kn=8&comm=1"
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                      "(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        'Referer': "http://image.so.com/i?q=nba&src=srp"
    }
    params = {
        'q': key_q,
        'src': 'srp',
        'pn': '60',
        'ch': '',
        'sn': key_sn,
        'ps': key_ps,
        'pc': '60',
        'pd': '1',
        'prevsn': '0',
        'sid': 'd34ad660320d853f00ea2d476ba2eaa5',
        'ran': '0',
        'ras': '6',
        'cn': '0',
        'gn': '0',
        'kn': '8',
        'comm': '1'
    }

    response = requests.get(url, headers=headers, params=params).json()  # 转json
    lists = response.get('list')  # 提取list件,值为一个列表

    for lis in lists:
        open_image(lis.get('img'))  # 遍历列表,提取其中img字符串(图片url)
    time.sleep(2)


def open_image(image_url):
    image_name = hash(image_url)  # 图片名字(为图片地址的url值)
    path = 'image/%s.jpg' % str(image_name)  # 图片地址
    urlretrieve(image_url, path)  # 保存图片
    print(image_url, '下载成功')
    time.sleep(1)


def main():
    key_q = input("输入要爬取的图片关键词")
    ps = 81
    sn = 88

    for i in range(0, 10):  # 爬取多少图片
        key_ps = ps+i*60
        key_sn = sn+i*60
        image_spider(key_q, key_ps, key_sn)


if __name__ == '__main__':
    main()

总结

360图库爬虫并不困难,实际上只要认真分析ajax,和返回的json就可以找到结果。

Python中爬取360图片通常会涉及使用网络请求库如requests和解析HTML的BeautifulSoup库。以下是一个简单的步骤概述: 1. **安装依赖库**: 首先需要安装`requests`、`beautifulsoup4`和可能需要处理JSON数据的`json`库。可以使用pip进行安装: ``` pip install requests beautifulsoup4 json ``` 2. **获取网页源码**: 使用requests.get()函数发送HTTP请求到360图片的URL,并获取响应内容: ```python import requests url = "https://www.360img.com/search/" # 这里填实际搜索关键词对应的链接 response = requests.get(url) page_content = response.text ``` 3. **解析HTML**: 然后使用BeautifulSoup解析HTML内容,找到包含图片链接的部分。例如,可能会查找`<img>`标签并提取src属性: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(page_content, &#39;html.parser&#39;) img_tags = soup.find_all(&#39;img&#39;, src=True) ``` 4. **提取图片链接**: 对于每个找到的`<img>`标签,提取出src属性作为图片链接: ```python image_links = [img[&#39;src&#39;] for img in img_tags] ``` 5. **保存图片**: 最后,可以使用`requests`下载图片并存储到本地: ```python import os for link in image_links: response = requests.get(link) filename = os.path.join(os.getcwd(), &#39;images&#39;, os.path.basename(link)) with open(filename, &#39;wb&#39;) as f: f.write(response.content) ``` 注意:在实际操作时,你需要遵守网站的robots.txt规则以及可能存在的反爬机制。同时,频繁的抓取可能会导致IP被封禁,所以建议设置合理的延迟和使用代理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值