爬虫——爬取网站上的图片

1. 利用python request库爬取网站图片

爬取网站:http://www.pes-stars.co.ua/?page1/

  1. 进入网站后,按F12,打开开发者模式,【元素】,通过鼠标移动的方式,查看要下载图片的信息,如下图:
    在这里插入图片描述
  2. 找User-Agent和Referer的信息,选择【网络】,一般在最下面一栏,点一下,滑倒最底下会出现一个【User-Agent】,复制下来作为Headers的一部分
  3. 代码:
import  requests
import time
from lxml import etree
url = 'http://www.pes-stars.co.ua/?page1/'

headers = {"Referer":"                    ",}

resq = requests.get(url,headers = headers)

print(resq)

html = etree.HTML(resq.text)
srcs = html.xpath(".//img/@src")

for i in srcs:
    imgname = i.split('/')[-1]
    img = requests.get(i,headers = headers)
    with open('imgs1/'+imgname,'wb') as file:
        file.write(img.content)
    print(i,imgname)

2. 报错

发现下载了网页前几个标题,到了真正要下载的正文部分的人脸图像时反而报错,查看每张图片的【src】,发现:
成功下载的图片的【src】:
在这里插入图片描述

报错的【src】:
在这里插入图片描述
发现报错的【src】连接是有问题的,少了http:的信息,手动加上去,代码变成下面这样:

import  requests
import time
from lxml import etree
url = 'http://www.pes-stars.co.ua/?page1/'

headers = {"Referer":"Referer: http://www.pes-stars.co.ua/?page1/",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70",}

resq = requests.get(url,headers = headers)

print(resq)

html = etree.HTML(resq.text)
srcs = html.xpath(".//img/@src")

for i in srcs:
    print('1---i:    ', i)
    imgname = i.split('/')[-1]
    j = 'http://www.pes-stars.co.ua' + i
    print('2---j:    ', j)
    try:
        img = requests.get(j, headers=headers)
        with open('imgs1/' + imgname, 'wb') as file:
            file.write(img.content)
        print(i, imgname)
    except requests.exceptions.ConnectionError:
        requests.status_code = "Connection refused"

成功下载。

3. 爬取多页图片

翻看每一页的url,可以发现只有最后的数字不一样:

http://www.pes-stars.co.ua/?page1
http://www.pes-stars.co.ua/?page2
http://www.pes-stars.co.ua/?page3
...

直接在url里加一个for循环,选择要下载的页数:


# -*- coding:utf-8 -*-
# Author: 自学小白菜
'''
既然选择了前进,那每一步都要认真的去做
'''

import  requests
import time
from lxml import etree


for m in range(1, 301):     # 爬取1-300页的图
    m += 1
    url = 'http://www.pes-stars.co.ua/?page' + str(m)
    print('url:  ', url)

    headers = {"Referer": "Referer: 'http://www.pes-stars.co.ua/?page",
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70",}

    resq = requests.get(url, headers=headers)

    print('resq:  ', resq)

    html = etree.HTML(resq.text)
    srcs = html.xpath(".//img/@src")

    for i in srcs:
        # print('1---i:    ', i, srcs)
        list1 = str(i)
        if list1[-3:] == 'jpg':
            imgname = i.split('/')[-1]
            j = 'http://www.pes-stars.co.ua' + i
            # print('2---j:    ', j, imgname)
            try:
                img = requests.get(j, headers=headers)
                with open('imgs1/' + imgname, 'wb') as file:
                    file.write(img.content)
                print(i, imgname)
            except requests.exceptions.ConnectionError:
                requests.status_code = "Connection refused"
### 使用Python编写爬虫抓取优酷视频 #### 抓取目标与工具准备 为了实现对优酷视频的数据获取,通常会涉及到网页请求、解析HTML文档以及处理API接口返回的内容。对于这类任务,`requests`库用于发起HTTP/HTTPS网络请求;而`BeautifulSoup`或`lxml`则适合于解析HTML/XML结构化数据。如果遇到JavaScript渲染的页面,则可能需要用到Selenium这样的浏览器自动化框架[^1]。 #### 处理登录验证机制 部分网站可能会设置较为严格的反扒措施,比如验证码识别或是基于Cookies的身份认证流程。针对这种情况,在开发初期就要考虑好应对策略,例如模拟真实用户的浏览行为模式,定期更换User-Agent字符串,甚至利用第三方服务绕过图形验证码挑战等问题[^2]。 #### 数据提取逻辑设计 当面对像优酷这样大型综合性媒体平台时,直接从公开可访问的部分入手往往是最简单有效的方式之一。具体来说就是先定位到含有目标资源列表页URL模板,再依据一定规则遍历每一页直至结束条件满足为止。与此同时还要注意观察详情页链接构造规律以便后续深入挖掘更多有价值的信息项[^3]。 ```python import requests from bs4 import BeautifulSoup def fetch_video_list(page_num=1): url = f"https://www.youku.com/v_olist/c_97_p_{page_num}.html" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") video_items = [] for item in soup.select('.v-link'): title = item['title'] href = item['href'] video_items.append({ 'title': title, 'url': href }) return video_items if __name__ == "__main__": videos = fetch_video_list() for v in videos[:5]: print(f"{v['title']}: {v['url']}") ``` 此段代码仅作为基础示范用途,请勿滥用本技术手段非法采集他人受版权保护的作品!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值