吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2783|回复: 22
收起左侧

[Python 原创] 一站式批量爬虫网页所有PPT

[复制链接]
w24 发表于 2023-11-30 11:26
本帖最后由 wushaominkk 于 2023-12-1 09:18 编辑

首先,我们先来看看这段代码是做什么的。这段代码是一个Python程序,它的主要目的是从一个网站上抓取一些文章链接,并下载这些文章的内容,最后保存为.zip格式的压缩文件。听起来有点复杂,但我会尽力用简单的语言来解释。
  • 导入需要的库
首先,我们需要导入三个库:requests、BeautifulSoup和time。
  • requests:这个库是用来发送HTTP请求的,就像你平时在浏览器中输入网址并按回车键一样,但这个库可以在程序中自动完成。
  • BeautifulSoup:这个库是用来解析HTML文档的,它可以帮你找到你感兴趣的数据,比如在这个程序中,它用来找到文章链接。
  • time:这个库用来控制程序的等待时间,避免网站因为被频繁访问而封锁你的IP地址。
  • 设置请求头
这一步是为了让网站认为你是一个真实的浏览器,而不是一个爬虫。你提供了一个常见的浏览器用户代{过}{滤}理字符串,这是你浏览器的身份标识,就像你的身份证一样。这样,网站就会认为你是一个真实的用户,而不是一个自动访问的程序。
3. 循环爬取链接这个程序要爬取多个页面的文章链接,所以它设置了一个循环来重复爬取1到5页面的链接。每爬取一个页面,它就会获取页面上所有的文章链接,并打印出来。
4. 解析链接并下载文章对于每个找到的文章链接,程序会发送一个GET请求来获取链接的内容。然后它用BeautifulSoup来解析获取到的HTML内容,找到下载链接,并下载文章的内容。
5. 保存文章为.zip文件最后,程序会将下载的内容保存为一个.zip格式的压缩文件。文件名会根据下载的顺序来编号,比如"1.zip"、"2.zip"等等。以上就是这段代码的基本解释。希望这个解释能够帮助你更好地理解这段代码。如果你还有其他问题,欢迎随时向我提问!这段代码的主要目的是从指定的网站(http://www.ypppt.com/moban/lunwen/)抓取一些文章链接,并下载这些文章的内容,保存为.zip格式的压缩文件。以下是详细的代码解析:
  • 导入所需的库:
    • requests: 用于发送HTTP请求,包括GET和POST请求。
    • BeautifulSoup: 用于解析HTML或XML文档,提供便捷的搜索、修改和导航功能。
    • time: 用于控制代码的运行速度和等待时间。
  • 设置请求头:
    • "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38"
    • 这是一个常见的浏览器用户代{过}{滤}理字符串,可以帮助模拟真实的浏览器行为,避免被网站识别为爬虫而进行限制。
  • 定义一个循环来爬取所有页面的链接:
    • 设定一个变量num用于记录当前下载文件的序号,初始化为1。
    • 设定一个变量page用于记录当前爬取的页面,初始化为1。
    • 通过循环爬取1到5页面的链接。
  • 根据当前页面的不同,构造请求的URL:
    • 如果当前页面是第一页,则直接构造URL为"http://www.ypppt.com/moban/lunwen/"。
    • 如果当前页面不是第一页,则构造URL为"http://www.ypppt.com/moban/lunwen/list-{}.html".format(page)。"
    • 使用列表推导式将URL字符串中的{}替换为page的值。
  • 发送GET请求获取网页内容:
    • 使用requests库发送GET请求获取网页内容。
    • 设置响应的编码为'utf-8'。
    • 使用BeautifulSoup库解析网页内容。
  • 查找并提取所需的数据:
    • 查找所有包含'class'属性值为'posts clear'的<ul>标签。
    • 在找到的<ul>标签中查找所有的<li>标签。
    • 对于每个<li>标签,提取其中的<a>标签的'href'属性值。
    • 使用print函数输出这些链接。
  • 对于每个提取到的链接,发送GET请求获取链接的内容:
    • 对于每个提取到的链接,使用requests库发送GET请求获取链接的内容。
    • 设置响应的编码为响应内容的实际编码。
    • 使用BeautifulSoup库解析网页内容。
  • 从解析的网页中查找并提取下载链接:
    • 在解析的网页中查找'class'属性值为'button'的<div>标签。
    • 在找到的<div>标签中查找'class'属性值为'a'的<a>标签的'href'属性值。
    • 使用requests库发送GET请求获取下载链接的内容。
    • 设置响应的编码为响应内容的实际编码。
    • 使用BeautifulSoup库解析网页内容。
    • 在解析的网页中查找'class'属性值为'down clear'的<ul>标签。
    • 在找到的<ul>标签中查找所有的<li>标签。
    • 在找到的<li>标签中查找'class'属性值为'a'的<a>标签的'href'属性值,这就是下载链接。
  • 下载并保存文件:
    • 对于每个提取到的下载链接,使用requests库发送GET请求获取下载内容。
    • 将下载内容保存为一个zip文件,文件名为"num.zip",其中"num"是当前下载文件的序号。



# http://www.ypppt.com/moban/lunwen/list-2.html
# http://www.ypppt.com/moban/lunwen/
# /html/body/div[2]/div/ul/li[1]/a

[Python] 纯文本查看 复制代码
from bs4 import BeautifulSoup
import requests
import time

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38"
}

time.sleep(4)
num = 1
page = 1
for page in range(1, 6):
    if page == 1:
        new_url = 'http://www.ypppt.com/moban/lunwen/'
    else:
        new_url = ['http://www.ypppt.com/moban/lunwen/list-{}.html'.format(page)]
        new_url = new_url[0]    #列表(被称为打了激素的数组):可以存储任意数据类型的集合(一个变量中可以存储多个信息),相当于数组
    #   new_url = 'http://www.ypppt.com/moban/lunwen/list-{}.html'.format(page)
    print("正在爬取" + new_url)
    response = requests.get(new_url, headers=headers)
    response.encoding = 'utf-8'
    jx = BeautifulSoup(response.content, 'lxml')
    mains = jx.find('ul', {'class': 'posts clear'})
    main_ppts = mains.find_all('li')
    for i in main_ppts:
        a = i.a.attrs['href']
        print('http://www.ypppt.com' + a)
        b = requests.get('http://www.ypppt.com' + a)
        b.encoding = b.apparent_encoding

        c = BeautifulSoup(b.content, 'lxml')
        down = c.find('div', {'class': 'button'})
        down1 = down.a.attrs['href']
        down_1 = requests.get('http://www.ypppt.com' + down1)
        down_1.encoding = down_1.apparent_encoding

        down_2 = BeautifulSoup(down_1.content, 'lxml')
        e = down_2.find('ul', {'class': 'down clear'})
        f = e.find('li')
        downlaod_url = f.a.attrs['href']
        download = requests.get(url=downlaod_url, headers=headers).content

        with open(str(num) + '.zip', 'wb') as f:
            f.write(download)
        print(str(num) + '下载成功')
        num += 1


屏幕截图 2023-11-30 111323.png
屏幕截图 2023-11-30 111338.png

免费评分

参与人数 7吾爱币 +11 热心值 +7 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
www52pjzk + 1 谢谢@Thanks!
Bob5230 + 1 + 1 我很赞同!
NoahA + 1 我很赞同!
JSakura94 + 1 + 1 谢谢@Thanks!
XFF1 + 1 + 1 思路逻辑很清晰
shiys8 + 1 + 1 没有成品吗?没python环境

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

亡屿歌 发表于 2023-11-30 17:53
阅读起来怪怪的,是Ai写的文章吧
vethenc 发表于 2023-11-30 19:11
再帮大佬排个版
from bs4 import BeautifulSoup
import requests
import time

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38"
}

time.sleep(4)
num = 1
page = 1
for page in range(1, 6):
    if page == 1:
        new_url = 'http://www.ypppt.com/moban/lunwen/'
    else:
        new_url = ['http://www.ypppt.com/moban/lunwen/list-{}.html'.format(page)]
        new_url = new_url[0]    #列表(被称为打了激素的数组):可以存储任意数据类型的集合(一个变量中可以存储多个信息),相当于数组
    #   new_url = 'http://www.ypppt.com/moban/lunwen/list-{}.html'.format(page)
    print("正在爬取" + new_url)
    response = requests.get(new_url, headers=headers)
    response.encoding = 'utf-8'
    jx = BeautifulSoup(response.content, 'lxml')
    mains = jx.find('ul', {'class': 'posts clear'})
    main_ppts = mains.find_all('li')
    for i in main_ppts:
        a = i.a.attrs['href']
        print('http://www.ypppt.com' + a)
        b = requests.get('http://www.ypppt.com' + a)
        b.encoding = b.apparent_encoding

        c = BeautifulSoup(b.content, 'lxml')
        down = c.find('div', {'class': 'button'})
        down1 = down.a.attrs['href']
        down_1 = requests.get('http://www.ypppt.com' + down1)
        down_1.encoding = down_1.apparent_encoding

        down_2 = BeautifulSoup(down_1.content, 'lxml')
        e = down_2.find('ul', {'class': 'down clear'})
        f = e.find('li')
        downlaod_url = f.a.attrs['href']
        download = requests.get(url=downlaod_url, headers=headers).content

        with open(str(num) + '.zip', 'wb') as f:
            f.write(download)
        print(str(num) + '下载成功')
        num += 1
苏紫方璇 发表于 2023-11-30 13:53
代码插入可以参考这个帖子
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
zrz444 发表于 2023-11-30 15:50
只想成品。。。
Kls673M 发表于 2023-11-30 16:35
感谢分享, 这么规范怎么感觉像AI的
soughing 发表于 2023-11-30 16:43
确实牛,能看懂一点
zesi111 发表于 2023-11-30 17:03
啥也不说了,楼主就是给力!
Bob5230 发表于 2023-11-30 17:51
谢谢分享,学习学习
13590220552 发表于 2023-11-30 17:56
谢谢分析啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表