当前位置: 首页 > article >正文

如何设置请求头模拟浏览器访问?

在Python中使用requests库发送HTTP请求时,可以通过设置请求头(Headers)来模拟浏览器访问。这有助于避免被目标网站识别为爬虫而被阻止访问。以下是如何在代码示例中设置请求头的详细步骤和解释。

一、设置请求头

请求头(Headers)是HTTP请求的一部分,包含了关于请求的元数据,如客户端信息、请求来源、接受的数据类型等。通过设置合适的请求头,可以模拟不同的浏览器访问行为。

常见的请求头字段

  • User-Agent:标识客户端的软件版本和操作系统信息。

  • Accept:告知服务器客户端可接受的MIME类型。

  • Accept-Language:告知服务器客户端可接受的语言。

  • Accept-Encoding:告知服务器客户端可接受的编码方式。

  • Referer:告知服务器当前请求是从哪个页面链接过来的。

二、代码示例中的请求头设置

在之前的代码示例中,我们已经设置了User-Agent请求头来模拟浏览器访问。为了更全面地模拟浏览器行为,可以添加更多的请求头字段。以下是完整的示例代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 目标搜索URL
base_url = 'https://s.1688.com/selloffer/offer_search.htm'
keyword = '女装'
params = {
    'keywords': keyword,
    'n': 'y',
    'netType': '1',
    'spm': 'a2605.q4826858.1998416437.1'
}

# 设置请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',
    'Accept-Encoding': 'gzip, deflate, sdch, br',
    'Referer': 'https://www.1688.com/'
}

# 发送GET请求
response = requests.get(base_url, params=params, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # 解析HTML页面
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取商品信息
    products = []
    items = soup.find_all('div', class_='sm-offer-item')
    for item in items:
        title = item.find('a', class_='offer-title').text.strip()
        price = item.find('span', class_='price').text.strip()
        description = item.find('div', class_='desc').text.strip()
        sales = item.find('span', class_='sales').text.strip()
        
        products.append({
            '标题': title,
            '价格': price,
            '描述': description,
            '销量': sales
        })
    
    # 保存到DataFrame
    df = pd.DataFrame(products)
    df.to_csv('alibaba_search_results.csv', index=False, encoding='utf-8-sig')
    print('数据已保存到CSV文件中。')
else:
    print('请求失败,状态码:', response.status_code)

详细解释

  1. User-Agent:这是最常用的请求头字段,用于标识客户端的软件版本和操作系统信息。通过设置一个常见的浏览器User-Agent,可以模拟浏览器访问。

  2. Accept:告知服务器客户端可接受的MIME类型。设置为text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,表示客户端可以接受多种类型的响应。

  3. Accept-Language:告知服务器客户端可接受的语言。设置为zh-CN,zh;q=0.8,en;q=0.6,表示客户端优先接受中文内容,其次为英文。

  4. Accept-Encoding:告知服务器客户端可接受的编码方式。设置为gzip, deflate, sdch, br,表示客户端支持多种压缩编码方式。

  5. Referer:告知服务器当前请求是从哪个页面链接过来的。设置为https://www.1688.com/,表示请求是从阿里巴巴首页发起的。

三、注意事项

(一)请求头的合法性

确保设置的请求头字段和值是合法的,避免使用虚假或恶意的请求头,这可能会导致请求被拒绝或引发安全问题。

(二)动态请求头

有些网站可能会根据客户端的行为动态调整请求头的要求。如果发现请求被拒绝,可以尝试调整请求头中的某些字段,或使用浏览器开发者工具(F12)查看实际发送的请求头,进行相应的调整。

(三)代理和请求头

如果使用代理服务器,确保代理服务器支持设置请求头。有些代理服务器可能会修改或删除请求头中的某些字段,导致请求失败。

四、结语

通过设置请求头,可以有效地模拟浏览器访问,提高爬虫的稳定性和成功率。在实际应用中,根据目标网站的要求和行为,灵活调整请求头字段,确保爬虫的正常运行。希望这些方法对你有所帮助,祝你在数据抓取和分析工作中取得更大的成功!


http://www.kler.cn/a/506762.html

相关文章:

  • STM32网络通讯之CubeMX实现LWIP项目设计(十五)
  • IEC103 转 ModbusTCP 网关
  • 解决报错:未定义标识符 “M_PI“
  • Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
  • Redis--21--大Key问题解决方案
  • Redis哨兵(Sentinel)
  • HTML标签笔记
  • 【Golang 面试题】每日 3 题(三十三)
  • 【React】JSX底层处理机制
  • Git 版本控制:.gitignore 文件完全指南
  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • 【进程与线程】进程的状态
  • AI与药学:大语言模型赋能药物推荐
  • 为什么我喜欢在 CSS 中使用 RegEx
  • npm发布组件(vue3+webpack)
  • Vue学习之旅:从生命周期到工程化开发与组件实践(生命周期+工程化开发)
  • @Query(org.springframework.data.jpa.repository.Query)
  • HTTP 到 HTTPS – 以下是操作步骤
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • 海太长江隧道:科技防水筑就跨江新通道
  • 卷积神经04-TensorFlow环境安装
  • Dexie.js 的批量操作与索引优化
  • 《深度学习神经网络训练:数据集下载资源列表》
  • 使用Eclipse将Springboot项目打jar包
  • GPU算力平台|在GPU算力平台部署轻量级中文OCR项目(chineseocr_lite)
  • 机器学习-学习算法