python3获取html、js、图片等

本文详细介绍了如何使用Python3的requests和BeautifulSoup库爬取网页内容,包括HTML、JS、图片等资源。从配置Python环境到分析HTML结构,再到请求处理和内容下载,提供了一套完整的爬虫流程。注意避免死循环和服务器压力,适用于学习和讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为自己学习笔记,仅供大家讨论学习。请谨慎使用,避免出现死循环等bug,导致对应网站服务器宕机!

因审核问题,修改多次,
单独出现的 runoob 都表示"https://www.runoob.com"字符串,注意结尾没有斜杠/
可能是代码过多、或链接过多,删除了处理链接的代码、完整代码。若需要可私聊,回头有时间把代码放托管平台上(GitHub或gitee)

python配置

Python下载、环境变量配置、代码编辑器、py库下载等。
这里使用的Python3(3.10.5),和2.x有的内容并不兼容。


这里没用到请求参数、请求头、cookie、JSON数据等,这里不赘述。

开始

基础知识请查阅 Python3基础 语法

Python requests

使用urllib:

from urllib import request

if __name__ == '__main__':
    resp = request.urlopen('请求地址')
    print(resp.read())

或者requests:

import requests
url = "请求地址"  # 网页地址
res = requests.get(url)
print(res)	# response对象
print(res.text)	# 成功返回内容
print(res.status_code)  # status=200
print(res.headers)	# response headers

http请求

相关知识请查阅 http协议 相关。

  • 网页请求为get方法,请求参数(params)拼接在路径(url)中,路径与键值对以?分隔,属性和属性值(键值对)以=相连(空值可不填),不同属性之间用&相连。语法:url?key1=value1&key2=value2
  • 响应状态(200 <= response.status < 300)为2**时是成功,这里用200作判断。
  • 发送请求时,有些参数是放在请求头(request headers)中:有些表示登录信息,有些表示浏览器版本、尺寸、有的表示时区、语言等。有的网址不需要请求头(比如runoob.com不要是成功的,加其他网址的headers反而报错),有的网址必须要有正确的请求头(参考文章:网络资源获取工具requests库介绍)。
  • 设置请求头信息,并添加请求头。(这里设置浏览器信息、cookie都失败,不设反而成功,以后再研究)
    import requests
    	url = runoob+"/python3"  # 网页地址
    	headers = {
         
        	# 浏览器基本信息
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
        }
    	res = requests.get(url,headers)
    
  • 综合判断:
    try:
        res = requests.get(url, headers,cookie)
        if res.status_code == 200:
            print(res)
        else:
            print(f"失败:{
           url}")
            print(res.status_code)
            print(res.text)
    except:
        print(f"失败:{
           url}")
    

分析html

相关知识请查阅 前端html 相关

  1. 目前要爬的目标是:Python3教程 runoob+/python3(它会重定向到:runoob+/python3/python3-tutorial.html)
  2. 查看该网址的网页结构(右键检查或F12),可发现该网址结构清晰,没有压缩,没有隐藏乱七八糟的东西(如暗链、广告、模态窗等),解析爬取是比较简单的。
  3. 菜单是id="leftcolumn"的div,爬取其子节点的a标签,其hreftext拿来存储起来拿出来,遍历爬取子页面的内容。我这里是不用原布局,不爬取多余内容。把目录拿来自己写html页面。
  4. 根据菜单生成的list遍历,爬取其href子页面,每个页面都是相同结构,主体内容都是id="content"的节点中。将每个页面的content内容单独存储html文件里。名字和菜单href保持一致。
  5. content中,外链资源肯定有重复的,避免重复下载,浪费时间资源,统一存储目录规则,重复不保存。先说静态资源(image、js、css,其他媒体文件如视频音乐暂时没发现)。以当前Python脚本所在为根目录,如下存到./wp-content/themes/runoob/style.css
    <link rel="stylesheet" href="/wp-content/themes/runoob/style.css?v=1.169
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤卓杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值