Scrapy设置headers、cookies三种方法

方法一:start_requests方法中添加cookies与headers:

1、重写spider中的start_requests方法

浏览器中cookies是这样的

Cookie:_T_WM=98075578786; WEIBOCN_WM=3349; H5_wentry=H5; backURL=https%3A%2F%2Fm.weibo.cn%2Fdetail%2F4396824548695177; ALF=1568417075; SCF=Ap5VqXy_BfNHBEUteiYtYDRa04jqF4QPJBULzWo7c1c_noO0GpnJW3BqhIkH7JXJSwWhL0qSg69_Vici5P7NbmY.; SUB=_2A25wUOt6DeRhGeFM41AT9y3LyDSIHXVTuvUyrDV6PUJbktANLVXzkW1NQL_2tT4ZmobAs5b6HbIQwSRXHjjiRkzj; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFWyDsTszIBJPBJ6gn7ccSM5JpX5K-hUgL.FoME1hzES0eNe0n2dJLoI0YLxK-L1K.L1KMLxK-L1KzLBoeLxK-L12BLBK2LxK-LBK-LB.BLxK-LBK-LB.BLxKnLB-qLBoBLxKnLB-qLBoBt; SUHB=0S7CWHWuRz1aWf; SSOLoginState=1565825835

需要转换为字典格式

转换代码:

def transform(self,cookies):
    cookie_dict = {}
    cookies = cookies.replace(' ','')
    list = cookies.split(';')
    for i in list:
        keys = i.split('=')[0]
        values = i.split('=')[1]
        cookie_dict[keys] = values
    return cookie_dict

在start_request中新增

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like         
    Gecko) Chrome/75.0.3770.100 Safari/537.36'
    }
cookies = {'_T_WM': '98075578786', 'WEIBOCN_WM': '3349', 'H5_wentry': 'H5', 'backURL': 'https%3A%2F%2Fm.weibo.cn%2Fdetail%2F4396824548695177', 'ALF': '1568417075', 'SCF': 'Ap5VqXy_BfNHBEUteiYtYDRa04jqF4QPJBULzWo7c1c_noO0GpnJW3BqhIkH7JXJSwWhL0qSg69_Vici5P7NbmY.', 'SUB': '_2A25wUOt6DeRhGeFM41AT9y3LyDSIHXVTuvUyrDV6PUJbktANLVXzkW1NQL_2tT4ZmobAs5b6HbIQwSRXHjjiRkzj', 'SUBP': '0033WrSXqPxfM725Ws9jqgMF55529P9D9WFWyDsTszIBJPBJ6gn7ccSM5JpX5K-hUgL.FoME1hzES0eNe0n2dJLoI0YLxK-L1K.L1KMLxK-L1KzLBoeLxK-L12BLBK2LxK-LBK-LB.BLxK-LBK-LB.BLxKnLB-qLBoBLxKnLB-qLBoBt', 'SUHB': '0S7CWHWuRz1aWf', 'SSOLoginState': '1565825835'}

2、修改方法返回值

yield scrapy.Request(url=url, headers=headers, cookies=cookies, callback=self.parse)​​

样例:

3、修改COOKIES_ENABLED

  • 当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie
  • 当COOKIES_ENABLED没有注释设置为False的时候scrapy默认使用了settings里面的cookie
  • 当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie

所以需要在settings.py文件中设置COOKIES_ENABLED = True​

并且在settings.py文件中设置ROBOTSTXT_OBEY = False​ #不遵守robotstxt协议

方法二:在setting.py文件中添加cookies与headers   --- 最简单的方法

  1. settings文件中给Cookies_enabled=False和DEFAULT_REQUEST_HEADERS解注释
  2. 在settings的DEFAULT_REQUEST_HEADERS配置的cookie就可以使用了

推荐使用这种方法,因为可以用shell进行调试

样例:

方法三:激活DownloadMiddleware(下载器中间件)

  1. settings.py中给DOWNLOADER_MIDDLEWARES解注释
  2. 去中间件文件中找DownloaderMiddleware这个类,修改process_request,添加request.cookies={}

参考链接:https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/downloader-middleware.html

### 推荐工具 对于生成 HTTP HeadersCookies 的需求,以下是几种常用的工具: #### 1. **Postman** Postman 是一种强大的 API 测试工具,支持手动配置和自动生成 HeadersCookies。它允许用户模拟各种 HTTP 请求,并能自动捕获响应中的 Set-Cookie 字段以便后续使用[^1]。 #### 2. **cURL 命令行工具** Curl 是命令行环境下的 URL 处理程序,广泛用于测试网络协议。通过 `--cookie` 参数可指定 Cookie 文件路径;利用 `-H` 或 `--header` 参数则可以轻松定义任意 Header 内容[^3]。 ```bash curl -X GET https://example.com \ -H "User-Agent: Mozilla/5.0" \ -b "sessionid=abcde; username=john" ``` 此示例展示了如何向目标站点发送带特定 User-Agent 和预设 Cookie 的 GET 请求。 #### 3. **Scrapy 框架** 作为 Python 编写的爬虫框架之一,Scrapy 提供灵活的方式来管理和传递 Headers/Cookies。除了全局 settings.py 配置外,在 Spider 类里也可以动态调整这些参数。 ```python import scrapy class ExampleSpider(scrapy.Spider): name = 'example' def start_requests(self): yield scrapy.Request( url='https://www.example.com', headers={'Referer': 'https://secure-origin'}, cookies={ 'auth_token': 'validtokenvalue', 'lang': 'en-US' } ) ``` 上述代码片段说明了怎样在发起请求前定制 Referer Header 并附加多个 Cookies[^4]。 #### 4. **Selenium WebDriver** 当面对 JavaScript 渲染后的网页或者更复杂的交互逻辑时,可以选择 Selenium 来控制真实浏览器实例完成操作。其内置方法使得注入自定义 Headers 较难实现,但对于 Cookies 却相对简单许多。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('http://somesite.com') # 添加新的 cookie driver.add_cookie({'name':'foo','value':'bar'}) print(driver.page_source) driver.quit() ``` 这段脚本演示了启动 Chrome 浏览器访问某网址之后再加入名为 foo 值为 bar 的新 Cookie 过程。 --- ### 注意事项 如果当前请求页面采用的是非安全协议 (HTTP),而来源页面采用了 HTTPS,则可能因为混合内容策略而导致某些敏感信息比如 Referrer 不会被传输出去[^2]。因此建议尽可能保持整个流程都在相同的安全级别之下运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值