python3 简单爬虫入门 抓取男神图

主要目的 为 快速爬虫入门
参考:https://blog.csdn.net/c406495762/article/details/72597755

注意编写日期:2023-3-9

如果时间过久,则代码可能会失效,如果失效,可以根据下面的解析过程,手动更新代码。

页面解析

1.主页面解析,进入网站,往下滚动,找到有很多图像的区域,该区域为主要内容区;
2.任意右键一个主要图像打开菜单,选中审查元素,打开 DOM树分析器。
3.观察DOM树,找到需要的标签的位置,记下它的特征,如本文:ul 标签 和 属性class="g-gxlist-imgbox " 就是主要内容区的特征
4.继续右键其他主要图像,选中审查元素,观察规律,可知:a 标签,带有 title 属性的即为入口区的特征
在这里插入图片描述
5.任意选一个图像进入子页面
6.往下滚动,随便右键一张大图,使用审查元素,打开DOM树解析器。
7.观察DOM树,找到主内容区域的特征:div 标签,包含属性 id=“zoom” class=“m_qmview”
8.往下看,找到评论标签的特征:p 标签,它的子标签不包含任何 img 标签
9.继续看,找到图像标签的特征:p 标签,子标签里面有一个 img 标签
在这里插入图片描述
10.根据以上特征,把链接提取出来,与站点链接拼接在一起,使用requests下载和保存/

完整代码和使用方法

首次安装python3后,使用请使用以下命令安装依赖库

pip install -U beautifulsoup4 requests

以下为完整代码,保存以下代码 到一个记事本文件中。
例如保存到 get.txt 里面
然后改名 get.txt 到 get.py
然后执行 python get.py 即可启动程序

#导入需要的库
import os
import time
import requests
from bs4 import BeautifulSoup
import urllib.parse

# 切换到当前文件夹
os.chdir(os.path.dirname(__file__))

# 要爬取的页面
url = 'http://www.shuaia.net/tp/shuaigetp/'
print('要爬取的链接:' + url)

# 获得页面的主站链接
url_parse = urllib.parse.urlparse(url)
base_url = url_parse.scheme + '://' + url_parse.netloc
print('主站链接:' + base_url)

# 设定请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

# 下载主页面
req = requests.get(url=url, headers=headers)
req.encoding = 'utf8'
 # 解析主页面
soup = BeautifulSoup(req.text, 'lxml')
 

# 通过 class 属性获得主要内容区域
main_page = soup.find_all(class_='g-gxlist-imgbox')[0]


# 获得每一个子页面入口的url
sub_pages = []

# 通过 a 标签搜索入口标签
for sub_page_entry in main_page.find_all('a'):
    # 如果入口标签有 title 属性,则认为是有效入口点
    if 'title' in sub_page_entry.attrs:
        # 获得子页面的标题
        new_title = sub_page_entry['title']
        # 获得子页面的url,并组装起来
        new_url = base_url + sub_page_entry['href']
        # 保存子页面的标题和链接到 sub_pages 列表中
        sub_pages.append([new_title, new_url])


# 循环下载解析每一个子页面,同时下载图像
for sub_title, sub_url in sub_pages:
    print('正在扫描子页面', sub_title, sub_url)
    print('子页面标题:'+sub_title)
    print('子页面链接:'+sub_url)

    # 生成一个文件夹
    os.makedirs(sub_title, exist_ok=True)

    # 打开一个文本文件,用来记录评论
    info_file = open(sub_title+'/info.txt', 'w', encoding='utf8')
    # 下载子页面
    sub_req = requests.get(url=sub_url, headers=headers)
    sub_req.encoding = 'utf8'
    # 解析子页面
    sub_soup = BeautifulSoup(sub_req.text, 'lxml')
    # 获得子页面主要内容区域
    sub_img_list = sub_soup.find_all('div', id='zoom', class_="m_qmview")[0]

    # 使用 p 标签搜索主要内容区域的图像
    for each_idx, each_img in enumerate(sub_img_list.find_all('p')):
        img_contents = each_img.find_all('img')

        # 如果该标签没有图像,那么该标签是一个评论标签
        if len(img_contents) == 0:
            info_file.write(each_img.text)

        else:
            # 获得子图像部分链接
            image_url = img_contents[0]['src']
            # 拼接为完整的子图像链接
            image_url = base_url + image_url

            # 拼接输出图像的路径
            out_image_path = f'{sub_title}/{each_idx}.jpg'
            if os.path.isfile(out_image_path):
                print('目标图像已下载,跳过')
                continue
            
            # 下载目标图像
            im_req = requests.get(url=image_url, headers=headers)
            if im_req.status_code != 200:
                print('下载失败,跳过')
                continue
            else:
                print('下载成功')
                open(out_image_path, 'wb').write(im_req.content)

        # 避免服务器过载        
        time.sleep(2)

    # 关闭评论文件
    info_file.close()

效果演示

终端输出
在这里插入图片描述
文件夹视图
在这里插入图片描述
内容+评论
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值