Scrapy爬虫框架使用时设置User-agent和Cookies(包含scrapy shell)

学习用scrapy写爬虫时遇到了网站的反爬,需要自定义下用户代理和Cookies,改掉Scrapy工程里的设置后发现Scrapy Shell并没有跟着被设置,需要单独修改,这里记录在一起。

包括两部分的设置,一个是Scrapy工程本身,一个是Scrapy shell的设置。

Pycharm Scrapy工程

  1. 打开settings.py

  2. 设置USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36’
    (这个是最基础的修改方法,如果想要有一个代理池,每次请求网页都随机一个可以参考文章Scrapy学习篇(十一)之设置随机User-Agent

  3. 设置COOKIES_ENABLED = False

  4. DEFAULT_REQUEST_HEADERS中加入'cookies': 'cookies的值'

    注意:这三个参数本来是被注释掉的,需要解开注释

    USER_AGENT这个参数Scrapy会给一个默认的代理,会被限制代理的网站反爬,这里只需要在网上随便搜索一个浏览器的代理换掉默认的就可以,我这里用的我自己mac chrome的代理,直接复制粘贴。
    COOKIES_ENABLED这个参数设置为False就是使用Scrapy默认的Cookie,这个设置好后再修改一下默认的Cookies就好了。
    cookies这个值主要是针对需要登陆才能爬取的网站,具体获取方法为如下

    1. 手动登陆该网站的账号 2.F12打开调试 3.随便找一个network请求,查看请求头,找到里面的Cookies 4.复制粘贴(如图所示)

    在这里插入图片描述
    这样之后Scrapy工程就可以正常爬取网页内容了,接下来是Scrapy Shell的修改方法

Scrapy Shell

在terminal中:

  1. 进入爬虫的虚拟环境

  2. 下载安装ipython
    pip install ipython

  3. 输入以下命令

    scrapy shell  # 进入scrapy shell
    url = 'www.baidu.com'  # 要爬取的网页地址
    headers = {'User-Agent': '你的代理'}
    cookies = {'key1': 'value1', 'key2': 'value2'} # 将cookie变为键值对的字典模式
    req = scrapy.Request(url, cookies=cookies, headers=headers)  # 设置请求头和cookie
    fetch(req)  # 执行请求
    # 至此Scrapy Shell应该已经成功请求到了网页源码,使用以下代码可以查看请求到的页面
    view(response)
    

补充:在浏览器中复制粘贴的cookies不是键值对,是类似于以下的字段:_ga=GA1.2.1546398633.1612486847; __gads=ID=38e84e9507ee99d7:T=1612486847:S=ALNI_MZ7YnywlkO2yMq7OpO1BY0hPsHfLw; UM_distinctid=17770e96e5079f-0367ea4cd548b3-33647309-168000-17770e96e51888;

可以用以下python代码处理为键值对:

cookie_str = 'ga=GA1.2.1546398633.1612486847; __gads=ID=38e84e9507ee99d7:T=1612486847:S=ALNI_MZ7YnywlkO2yMq7OpO1BY0hPsHfLw; UM_distinctid=17770e96e5079f-0367ea4cd548b3-33647309-168000-17770e96e51888;'

cookie = {}

for line in cookie_str.split(';'):
    key, value = line.split('=', 1)
    cookie[key] = value

print(cookie)

再复制粘贴到shell

如果fetch后结果显示如下,就应该已经成功请求网页了。在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫中的cookies是用来在网络请求中存储和传递用户身份认证信息的一种机制。通过设置cookies爬虫可以模拟用户的登录状态,从而访问需要登录才能获取的页面或数据。在爬虫使用cookies有两种常见的方法。 首先,可以通过在请求头中添加cookies的方式来模拟登录状态。这可以通过使用urllib库中的request模块来实现。我们可以通过在请求头中设置"cookie"字段来传递cookies信息。例如,在使用urlopen函数发送请求,可以使用Request类来设置请求头,其中的"cookie"字段可以设置为一个字符串,包含了所有需要传递的cookies信息。 其次,可以通过使用cookiejar来管理cookiescookiejar是一个用于存储和管理cookies的对象,可以将cookies保存在文件中,以便在爬虫程序中使用。在使用cookiejar,可以通过调用cookiejar对象的load方法来加载已经保存的cookies信息,或者通过调用save方法来保存当前的cookies信息。 需要注意的是,如果浏览器已经关闭或程序已经结束,则需要设置"ignore_discard=True"参数来加载过期的cookies信息,或在save方法中添加"ignore_discard=True"参数来保存即将过期的cookies信息。 综上所述,通过以上方法,可以在爬虫中有效地管理和使用cookies来模拟用户的登录状态。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [爬虫之——初识cookie](https://blog.csdn.net/m0_47172421/article/details/105758213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值