爬虫之cookie与代理

一, 基于requests模块的cookie操作

引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
if __name__ == "__main__":

    #张三人人网个人信息页面的url
    url = ‘http://www.renren.com/289676607/profile‘

   #伪装UA
    headers={
        ‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
    }
    #发送请求,获取响应对象
    response = requests.get(url=url,headers=headers)
    #将响应内容写入文件
    with open(‘./renren.html‘,‘w‘,encoding=‘utf-8‘) as fp:
        fp.write(response.text)

- 结果发现,写入到文件中的数据,不是张三个人页面的数据,而是人人网登陆的首页面,why?首先我们来回顾下cookie的相关概念及作用:

  - cookie概念:当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie。

  - cookie作用:我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面。我们经常会在此时设置30天内记住我,或者自动登录选项。那么它们是怎么记录信息的呢,答案就是今天的主                                   角cookie了,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链                                 接。就像我们去超市买东西,没有积分卡的情况下,我们买完东西之后,超市没有我们的任何消费信息,但我们办了积分卡之后,超市就有了我们的消费信息。cookie就像是积分卡,可以                                     保存积分,商品就是我们的信息,超市的系统就像服务器后台,http协议就是交易的过程。

- 经过cookie的相关介绍,其实你已经知道了为什么上述案例中爬取到的不是张三个人信息页,而是登录页面。那应该如何抓取到张三的个人信息页呢?

  思路:

    1.我们需要使用爬虫程序对人人网的登录时的请求进行一次抓取,获取请求中的cookie数据

    2.在使用个人信息页的url进行请求时,该请求需要携带 1 中的cookie,只有携带了cookie后,服务器才可识别这次请求的用户信息,方可响应回指定的用户信息页数据

import requests
from lxml import etree

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
}
# 1.进行登陆操作,服务器就会对当前用户 创建一个cookie对象(存储当前的用户状态信息,以及身份标识)
# 2. 进行个人主页的请求(携带步骤1中创建的cookie), 获取当前用户个人主页的页面数据

# 登陆
 #登录请求的url(通过抓包工具获取)
login_url = "http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018922053679 "
session = requests.session()  # #创建一个session对象,该对象会自动将请求中的cookie进行存储和携带
data = {
    "captcha_type":"web_login",
    "domain":"renren.com",
    "email":"18829037944",
    "f":"",
    "icode":"",
    "key_id":"1",
    "origURL":"http://www.renren.com/home",
    "password": "30f28dff42c847e99969e7e91f8356bcb80aa2e9993893add81b6ff76c899be3",
    "rkey": "f1ace095ea75f09850cbb28b87a04b9e",
}
session.post(url=login_url, data=data, headers=headers) #  使用session发送请求,目的是为了将session保存该次请求中的cookie

get_url = "http://www.renren.com/968520666/profile"
#  再次使用session进行请求的发送,该次请求中已经携带了cookie
response = session.get(url=get_url, headers=headers)
#设置响应内容的编码格式
response.encoding = ‘utf-8‘
page_text = response.text

#将响应内容写入文件
with open(‘./renren01.html‘,‘w‘, encoding="utf-8") as fp:
    fp.write(response.text)
    print("over")

二, 基于requests模块的代理操作

  • 什么是代理

    • 代理就是第三方代替本体处理相关事务。例如:生活中的代理:代购,中介,微商......
  • 爬虫中为什么需要使用代理
    • 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问。所以我们需要设置一些代理IP,每隔一段时间换一个代理IP,就算IP被禁止,依然可以换个IP继续爬取。
  • 代理的分类:
    • 正向代理:代理客户端获取数据。正向代理是为了保护客户端防止被追究责任。
    • 反向代理:代理服务器提供数据。反向代理是为了保护服务器或负责负载均衡。
  • 免费代理ip提供网站
    • http://www.goubanjia.com/
    • 西祠代理
    • 快代理
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import random
if __name__ == "__main__":
    #不同浏览器的UA
    header_list = [
        # 遨游
        {"user-agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)"},
        # 火狐
        {"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"},
        # 谷歌
        {
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
    ]
    #不同的代理IP
    proxy_list = [
        {"http": "112.115.57.20:3128"},
        {‘http‘: ‘121.41.171.223:3128‘}
    ]
    #随机获取UA和代理IP
    header = random.choice(header_list)
    proxy = random.choice(proxy_list)

    url = ‘http://www.baidu.com/s?ie=UTF-8&wd=ip‘
    #参数3:设置代理
    response = requests.get(url=url,headers=header,proxies=proxy)
    response.encoding = ‘utf-8‘

    with open(‘daili.html‘, ‘wb‘) as fp:
        fp.write(response.content)
    #切换成原来的IP
    requests.get(url, proxies={"http": ""})

原文地址:https://www.cnblogs.com/qq631243523/p/10454493.html

时间: 2024-11-05 23:20:51

爬虫之cookie与代理的相关文章

爬虫--用cookie访问任意网页

#!/usr/bin/env python # -*- coding: utf-8 -*- ############################################# # File : requestAnyURLWithCookie.py # Author : lucasysfeng # Revision : 2014-06-13 11:08:00 # Description : 用cookie访问任何网页(已经有cookie了,不需要登录等验证) # : cookie用浏览器查

爬虫之proxy(代理)

proxy简介 proxy即为代理,我们爬虫的时候肯定会有频繁访问某一网站的情况,这个时候有些服务器会识别到我们是非正常访问,就会把我们的IP禁掉,这个时候就需要用代理了. 就好比现实生活中,我需要向A借一件东西,但是我跟A是仇人,直接向他借的话他不会借给我,这个时候我就让B帮我像A借,就说他要用,然后B借到东西之后再把东西给我用,这时,B就是我的代理了. 常用的免费代理网站:http://www.goubanjia.com/. 爬虫应该选择什么样的代理? 针对不需要用户登录,cookie验证的

25-3 requests模块的cookie和代理操作

一.基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import requests 4 if __name__ == "__main__": 5 6 #张三人人网个人信息页面的url 7 url

Scrapy之Cookie和代理

cookie cookie: 获取百度翻译某个词条的结果 一定要对start_requests方法进行重写. 两种解决方案: 1. Request()方法中给method属性赋值成post2. FormRequest()进行post请求的发送 爬虫相关操作 # -*- coding: utf-8 -*- import scrapy # 需求:将百度翻译中指定词条对应的翻译结果进行获取 class PostdemoSpider(scrapy.Spider): name = 'postDemo' #

爬虫1 爬虫介绍, requests模块, 代理(正向代理,反向代理), 爬梨视频, 自动登录网站, HTTP协议复习

HTTP协议复习 参考:https://www.cnblogs.com/an-wen/p/11180076.html 1爬虫介绍 # 1 本质:模拟发送http请求(requests)---->解析返回数据(re,bs4,lxml,json)--->入库(redis,mysql,mongodb) # 2 app爬虫:本质一模一样 # 3 为什么python做爬虫最好:包多,爬虫框架:scrapy:性能很高的爬虫框架,爬虫界的django,大而全(爬虫相关的东西都集成了) # 4 百度,谷歌,就

python网络爬虫之cookie的使用方法汇总

在编写python网络爬虫时,除了要考虑到爬虫的异常处理问题,我们是否还会考虑到cookie的使用呢?在使用cookie时,有想过为什么要使用cookie吗?一起来看看吧. Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密)比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了. 在此之前呢,我们必须先介绍一个open

C#多线程爬虫抓取免费代理IP

这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推..........然后直接创建一个控制台应用,将我下面的代码COPY替换就可以运行,下面就来讲讲我两年前做爬虫经历,当时是给一家公司做,也是用的C#,不过当时遇到一个头痛的问题就是抓的图片有病毒,然后系统挂了几次.所以抓网站图片要注意安全,虽然我这里没涉及到图片,但是还是提醒下看文章的朋友. clas

2017.08.05 Python网络爬虫实战之获取代理

1.项目准备:爬取网站:http://www.proxy360.cn/Region/China,http://www.xicidaili.com/ 2.创建编辑Scrapy爬虫: scrapy startproject getProxy scrapy genspider proxy360Spider proxy360.cn 项目目录结构: 3.修改items.py: 4.修改Spider.py文件 proxy360Spider.py: (1)先使用scrapy shell命令查看一下连接网络返回

python爬虫简单的添加代理进行访问

在使用python对网页进行多次快速爬取的时候,访问次数过于频繁,服务器不会考虑User-Agent的信息,会直接把你视为爬虫,从而过滤掉,拒绝你的访问,在这种时候就需要设置代理,我们可以给proxies属性设置一个代理的IP地址,代码如下: 1 import requests 2 from lxml import etree 3 url = "https://www.ip.cn" 4 headers = {"User-Agent": "Mozilla/5