网络爬虫入门(学习笔记)

news2024/9/20 18:51:59

爬取网页源代码

        抓取百度首页的HTML源代码,并将其保存到一个名为baidu.html的文件中。打开这个文件,可以看到一个和百度首页一模一样的页面。

from urllib.request import urlopen

# 发送请求并获取响应
response = urlopen("http://www.baidu.com")

# 读取响应内容并解码为字符串
web_content = response.read().decode("utf-8")

# 将抓取到的网页内容保存到文件中
with open("baidu.html", mode="w", encoding="utf-8") as file:
    file.write(web_content)

网页请求过程

F12的使用、HTTP协议

        可以使用Chrome浏览器,按下F12打开开发者工具。

Elments:JavaScript代码以及用户操作之后显示的页面效果
Console:运行JavaScript代码片段,显示网页运行时的日志、错误和警告信息

Sources:查看和调试网页的源代码文件

Network:查看网页的所有网络请求

         HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本(如HTML)的应用层协议,是现代Web通信的基础。它定义了客户端(如Web浏览器)和服务器之间如何请求和传递数据。
        HTTP协议把一条消息分为三大块内容,无论是请求还是响应都是三块内容。 

  • 请求行:请求方式(get/post),请求url地址,协议版本
  • 请求头:提供了附加信息,帮助服务器处理请求
  • 请求体 :一般放一些请求参数
  • 状态行 :协议版本,状态码,状态文本 
  • 响应头:提供了一些附加信息,帮助客户端处理响应
  • 响应体 :服务器返回的真正客户端要用的内容(HTML,json)等

求头的重要内容

  • User-Agent:标识请求的来源,告诉服务器客户端的身份
  • Referer:指示当前请求的来源页面URL,用于防盗链和反爬虫,服务器可以通过Referer头判断请求是否合

  • Cookie:存储和传递会话信息和用户信息,通常用于身份验证和跟踪用户状态。在爬虫中,通过设置合适的Cookie,可以模拟登录后的状态,访问需要身份验证的页面。

响应头的重要内容

  • cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
  • 各种字符串,防止攻击和反爬

请求方式

  • GET

    • 作用:请求从服务器获取资源。
    • 特点:参数包含在URL中,适合请求静态资源或查询操作。
    • 用途:爬取网页内容,获取数据。
  • POST

    • 作用:向服务器提交数据。
    • 特点:参数包含在请求体中,适合提交表单、上传文件等操作。
    • 用途:模拟用户登录,提交表单数据。

requests入门

案例1:搜狗搜索——保存搜索内容的页面 

import requests
import time
import random

# 提示用户输入搜索关键字
search_query = input("请输入你要搜索的内容:")

# 构造请求URL
url = f"https://www.sogou.com/web?query={search_query}"

# 定义请求头,模拟浏览器请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 "
                  "Edg/126.0.0.0 ",
    "Referer": "https://www.sogou.com/",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "Accept-Encoding": "gzip, deflate, br, zstd"
}

# 使用会话对象来管理Cookies和保持状态
session = requests.Session()

# 发送GET请求并获取响应
response = session.get(url, headers=headers)

# 检查响应状态码,确保请求成功
if response.status_code == 200:
    # 打开一个文件,用于保存响应内容
    with open("sogou_search_results.html", mode="w", encoding="utf-8") as file:
        # 将响应内容写入文件
        file.write(response.text)
    print("搜索结果已保存到sogou_search_results.html文件中。")
else:
    # 如果请求失败,打印错误信息
    print(f"请求失败,状态码: {response.status_code}")

# 增加请求间隔,模拟真实用户行为
time.sleep(random.uniform(1, 3))

请输入你要搜索的内容:你好
搜索结果已保存到sogou_search_results.html文件中。 

案例2:百度翻译——获取翻译后的内容

import requests

# 提示用户输入要翻译的英语单词
english_word = input("请输入你要翻译的英语单词:")

# 准备POST请求的数据
data = {
    "kw": english_word  # 请求参数,与抓包工具里的参数一致
}

# 发送POST请求到百度翻译的sug接口
response = requests.post("https://fanyi.baidu.com/sug", data=data)

# 解析返回的JSON数据
response_json = response.json()

# 打印返回字典中第一个数据的翻译内容
if response.status_code == 200:
    if 'data' in response_json:
        first_translation = response_json['data'][0]['v']
        print(f"翻译结果: {first_translation}")
    else:
        print("未找到相关翻译结果。")
else:
    print(f"请求失败,状态码: {response.status_code}")

请输入你要翻译的英语单词:hello
翻译结果: int. 打招呼; 哈喽,喂; 你好,您好; 表示问候 n. “喂”的招呼声或问候声 vi. 喊“喂

案例3:豆瓣电影——保存豆瓣电影分类排行榜(剧情片 )的top100

import csv
import requests

# 请求URL和参数
url = 'https://movie.douban.com/j/chart/top_list'
params = {
    'type': '11',        # 类型,这里是剧情片类型
    'interval_id': '100:90',  # 评分区间,表示评分在90到100之间
    'action': '',        # 动作参数,此处为空
    'start': '0',        # 开始取数据的索引,从第一部电影开始取
    'limit': '100',       # 每次取出的电影数量
}

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}

# 发送GET请求并获取响应
response = requests.get(url=url, params=params, headers=headers)

# 将响应内容保存为JSON文件
if response.status_code == 200:
    data = response.json()
    with open('./douban_movies.csv', 'w', encoding='utf-8', newline='') as csvfile:
        fieldnames = ['rank', 'title', 'score', 'types', 'regions', 'release_date', 'actors']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        writer.writeheader()
        for movie in data:
            writer.writerow({
                'rank': movie['rank'],
                'title': movie['title'],
                'score': movie['score'],
                'types': '/'.join(movie['types']),
                'regions': '/'.join(movie['regions']),
                'release_date': movie['release_date'],
                'actors': '/'.join(movie['actors']),
            })

    print('电影数据已保存到 douban_movies.csv 文件中。')
else:
    print(f'请求失败,状态码: {response.status_code}')


电影数据已保存到 douban_movies.csv 文件中。

案例4:下载图片——从豆瓣电影网站中下载一张海报 

import requests


def download_image(url, file_name):
    try:
        # 发送GET请求获取图片数据
        response = requests.get(url)
        if response.status_code == 200:
            # 从URL中提取文件名作为保存的文件名,将图片内容写入文件
            with open(file_name, mode="wb") as f:
                f.write(response.content)    # 字节
            print(f"图片已保存为 {file_name}")
        else:
            print(f"请求失败,状态码: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"请求异常: {e}")


# 示例:从豆瓣中下载一张电影海报
image_url = "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg"
file_name = "Example.jpg"

download_image(image_url, file_name)

图片已保存为 Example.jpg 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows中使用Jenkins打包,部署vue项目完整操作流程

文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…

【游戏/社交】BFS算法评价用户核心程度or人群扩量(基于SparkGraphX)

【游戏/社交】BFS算法评价用户核心程度or人群扩量(基于SparkGraphX) 在游戏和社交网络领域,评估用户的核心程度或进行人群扩量是提升用户粘性和拓展社交圈的关键。广度优先搜索(BFS)算法以其在图结构中评估节点重要性…

WebRTC通话原理(SDP、STUN、 TURN、 信令服务器)

文章目录 1.媒体协商SDP简介 2.网络协商STUN的工作原理TURN工作原理 3.信令服务器信令服务器的主要功能信令服务器的实现方式 1.媒体协商 比如下面这个例子 A端与B端要想通信 A端视频采用VP8做解码,然后发送给B端,B端怎么解码? B端视频采用…

使用vscode搜索打开的文件夹下的文件

右键空白处打开命令面板 摁一次删除键,删除掉图中的大于号 这样就能够找到例化的模块,文件具体在哪个位置,然后打开了

pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)

pdf怎么压缩的小一点?首先,PDF文件可以进行压缩。职场文档传阅还是比较建议PDF压缩,PDF文件可以无障碍访问,保持原始文本、图像和表格,无需担心展示效果差异等等优势,成为我们日常工作中不可或缺的一部分。…

Grid Search:解锁模型优化新境界

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

8、添加第三方包

目录 1、安装Django Debug Toolbar Django的一个优势就是有丰富的第三方包生态系统。这些由社区开发的包,可以用来快速扩展应用程序的功能集 1、安装Django Debug Toolbar Django Debug Toolbar位于名列前三的第三方包之一 这是一个用于调试Debug Web应用程序的有…

win_vscode_wsl_ubuntu教程

文章目录 win_vscode_wsl_ubuntu教程 win_vscode_wsl_ubuntu教程 在启用或关闭Windows功能处开启适用于Linux的Windows子系统和虚拟机平台,可能会需要重启电脑 设置wsl # 将wsl2设置为默认版本 C:\Users\Administrator>wsl --set-default-version 2 有关与 WS…

PhantomJs将html生成img|pdf

PhantomJS PhantomJS是一个可编程的无头浏览器,‌它基于WebKit内核,‌通过JavaScript API进行脚本化操作,它对各种web标准有快速和原生化的支持,包括DOM处理、CSS选择器、JSON、Canvas和SVG。‌无头浏览器指的是一个完整的浏览器内…

QT反射内存读写操作

反射内存技术适用于通过以太网、光纤通道或其他串行网络连接计算机或可编程逻辑控制器的应用,尤其在实时交互和高通信要求的系统中表现突出。虽然价格较高,但其易用性和性能优势带来了显著回报。反射内存能够在微秒级内将计算机的内存副本分发到整个网络…

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…

QT获取电脑网卡IP等信息

文章目录 一、背景信息二、代码实现 一、背景信息 电脑有一个或者多个网卡&#xff0c;如下图所示&#xff1a; 一个网卡又可以配有多个IP地址&#xff0c;包括 IPv4 和 IPv6 地址&#xff1a; 二、代码实现 以下代码实现了查找电脑所有网卡&#xff0c;并获取某个网卡的 IP …

苹果电脑crossover怎么下载 苹果电脑下载crossover对电脑有影响吗 MacBook下载crossover软件

CodeWeavers 发布了 CrossOver 24 版本更新&#xff0c;不仅兼容更多应用和游戏&#xff0c;得益于 Wine 9.0 带来的 7000 多项改进&#xff0c;CrossOver 还可以在 64 位系统上运行Windows应用的软件&#xff0c;使得用户可以在Mac系统中轻松安装使用仅支持Windows系统运营环境…

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式&#xff0c;除了我最爱用的 apt-get install&#xff0c;我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作&#xff0c;理论上在ubuntu14.04之后都可以用此操作。 …

uniapp 小程序 嵌套 webview 返回需要点击两次

uniapp 小程序 嵌套 webview 返回需要点击两次 先 上图 小程序也监听不到 返回事件在网上找了一圈 都没有理想的答案&#xff0c;猜测 是因为嵌入的页面中有问题果然 小程序中嵌入的代码 <view><web-view :src"urlSrc" ></web-view></view>…

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…

使用github actions构建多平台electron应用

1. 创建electron项目 使用pnpm创建项目 pnpm create quick-start/electron 2. 修改electron-builder.yml文件 修改mac的target mac:target:- target: dmgarch: universal 3. 添加workflow 创建 .github/workflows/main.yml 文件 name: Build/release Electron appon:work…

excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 easypoi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款更优秀的 excel 工具库&#xff1a;easyexcel 。 二、easyexcel easyexcel 是阿里巴巴开源的一款 excel 解析工具&#xff0c;底层逻辑也是基于 apache p…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说&#xff0c;外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎&#xff1a;“这个网站的内容是有价值的&#xff0c;值得推荐。”因此&#xff0c;外链的数量和质量直接影响你的网站在搜索引擎中的排…

对称加密与非对称加密

对称加密 对称加密指的是加密和解密使用同一个秘钥,所以叫对称加密。对称加密只有一个秘钥,称为私钥。 优点:算法公开、计算量小、加密速度快、效率高 缺点:数据传输前,发送方和接收方必须确定好秘钥,双方也必须要保存好秘钥。 常见对称加密算法: DES、3DES、AES、3…