爬虫之User-Agent和Cookies

User-Agent

什么是User-Agent

  User-Agent 是一个HTTP请求头,它向服务器发送信息以标识发出请求的客户端软件及其版本。这个信息可以包括浏览器类型、操作系统等。对于爬虫来说,设置 User-Agent 可以帮助你模拟真实的浏览器行为,避免被目标网站识别为自动化程序而封锁。同时,通过在 User-Agent 字符串中添加联系信息,可以让网站管理员知道你的爬虫来源,有助于沟通和问题解决。

例如:

headers = {
    'User-Agent': 'MyCustomWebScraper/1.0 (+http://www.yourwebsite.com/contact)'
}

为什么在使用 Requests + Beautiful Soup 抓取静态页面时需要复制开发者模式里的内容?

当你使用 requests 库进行网页抓取时,默认情况下,requests 不会像真实浏览器那样发送完整的请求头(如 User-Agent、Cookies 等),这可能导致目标网站返回不同的响应内容或者拒绝服务。为了更准确地模仿浏览器行为,通常需要手动设置这些请求头。

从开发者工具中复制的原因:

    User-Agent:某些网站可能会根据 User-Agent 来决定是否提供特定的内容或如何处理请求。如果缺少正确的 User-Agent,网站可能认为这是一个非浏览器请求并作出相应的限制。
    Cookies:有些网站要求用户登录后才能访问特定内容,这时就需要带上有效的 Cookies。你可以通过浏览器的开发者工具查看并复制当前会话的 Cookies。
    其他请求头:如 Referer, Accept-Language, Accept-Encoding 等也可能影响到服务器的响应。

请求头是自己写还是去网页复制?

    简单场景:如果你只是想要获取公开且不需要认证的静态页面,通常只需要设置基本的 User-Agent 即可。这时,你可以构造一个简单的 User-Agent 字符串来模拟常见的浏览器。

    示例:

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

复杂场景:如果目标网站有严格的反爬措施(如需要登录、检查 Cookies 或者特定的请求头),则你需要从浏览器的开发者工具(通常按 F12 打开)中复制相关的请求头和 Cookies。这样可以确保你的请求尽可能接近真实浏览器的行为,减少被检测的风险。

复制步骤一般如下:

    在浏览器中打开目标网页,并按 F12 打开开发者工具。
    切换到“网络”标签,然后刷新页面。
    找到你要模拟的请求(通常是第一个GET请求),点击该请求查看详细信息。
    在“标头”部分,可以找到所有发送的请求头和 Cookies,将它们复制到你的代码中。

总结来说,是否需要从网页复制请求头取决于具体的需求和目标网站的安全策略。对于大多数简单的静态页面抓取任务,手动设置基本的 User-Agent 就足够了;而对于复杂的动态页面或需要身份验证的情况,则建议从浏览器开发者工具中精确复制相关参数。

 Cookies

什么是cookies

  Cookies 是存储在用户浏览器中的小型文本文件,用于保存状态信息或记录用户活动的数据。它们由服务器通过 HTTP 响应发送给浏览器,并且在随后的请求中,浏览器会自动将这些 Cookies 发送到服务器。Cookies 主要用于以下几个方面:

    保持用户会话:例如,在登录网站后,服务器可能会设置一个 Cookie 来识别用户的会话,这样当用户浏览网站的不同页面时,不需要每次都重新登录。
    个性化体验:如记住用户的偏好设置(如语言选择、主题颜色等)。
    跟踪用户行为:用于分析用户的行为模式,以便优化网站内容或投放针对性广告。

Cookies 的结构

一个典型的 Cookie 包含以下几部分:

    Name: Cookie 的名称。
    Value: Cookie 的值。
    Domain: Cookie 所属的域名。
    Path: 在该域名下的哪些路径可以访问这个 Cookie。
    Expires/Max-Age: Cookie 的过期时间,超过此时间后,Cookie 将被删除。
    Secure: 如果设置为 true,则只允许通过 HTTPS 协议传输。
    HttpOnly: 如果设置为 true,则 JavaScript 无法访问该 Cookie,以防止 XSS 攻击。

例如:

Set-Cookie: sessionId=abc123; Domain=.example.com; Path=/; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Secure; HttpOnly

在爬虫中使用 Cookies

  当你需要抓取那些要求登录或者有特定会话状态的网页时,通常需要带上相应的 Cookies。这是因为许多网站依赖于 Cookies 来维护用户的会话状态,如果你不提供正确的 Cookies,网站可能会返回登录页面或其他未授权的响应。
  如何获取和使用 Cookies,获取同上user-Agent。 在 Python 中使用 Requests 库发送带有 Cookies 的请求

import requests

# 示例 Cookies
cookies = {
    'session': 'abc123',
    'user': '12345'
}

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

response = requests.get('https://example.com/somepage', cookies=cookies, headers=headers)

print(response.text)
自动化登录流程以获取 Cookies

对于一些需要登录才能访问的内容,你可以编写脚本模拟登录过程,从而自动获取有效的 Cookies。

    import requests

    login_url = 'https://example.com/login'
    payload = {
        'username': 'your_username',
        'password': 'your_password'
    }

    session = requests.Session()
    response = session.post(login_url, data=payload)

    # 现在 session 对象中包含了登录后的 Cookies
    response = session.get('https://example.com/somepage')
    print(response.text)

总结

    Cookies 是一种在客户端(通常是浏览器)和服务器之间传递状态信息的方式。
    在爬虫开发中,特别是当你需要访问那些需要登录或者具有复杂会话管理的网站时,正确地处理 Cookies 是非常重要的。
    可以手动从浏览器开发者工具中复制 Cookies,也可以通过编程方式模拟登录过程来自动获取和管理 Cookies。这有助于更准确地模拟真实用户的行为,避免因缺少必要的身份验证信息而导致的访问限制。

猜你喜欢

转载自blog.csdn.net/yzcaiaxiu/article/details/145659510
今日推荐