爬虫(五):代理IP、Cookie

2019-12-20| 发布者: admin| 查看: |

署理ip这个功用呢,在urllib和requests中都存在,可是这个在大的爬虫项目中是十分重要的,所以我拿出来独自解说。

关于某些网站,假如同一个 ip 短时刻内发送很多恳求,则可能会将该 ip 判定为爬虫,进而对该 ip 进行封禁

所以咱们有必要运用随机的 ip 地址来绕开这一层查看。咱们能够去找那些供给免费ip地址的网站,可是这些网站的免费署理ip基本上是不稳定的,随时可能会更新,假如是自己小规模的爬取,能够运用免费署理ip。假如是那种大型的,就需求付费署理ip了。

import urllib.request
import random
ip_list = [
 {'http':'61.135.217.7:80'},
 {'http':'182.88.161.204:8123'}
proxy_handler = urllib.request.proxyhandler)
opener = urllib.request.build_opener
response = opener.open
print.decode)

成果:

 

运用requests增加署理也十分简略,只需在恳求的办法中传递proxies参数就能够了。 

import requests
url = 'https://httpbin.org/get'
headers = {
 'user-agent': 'mozilla/5.0  applewebkit/537.36  chrome/78.0.3904.108 safari/537.36'
proxy = {
 'http':'222.217.124.162:8118'
resp = requests.get
with open as fp:
 fp.write

成果:

ip.html:

{
 "args": {}, 
 "headers": {
 "accept": "*/*", 
 "accept-encoding": "gzip, deflate", 
 "host": "httpbin.org", 
 "user-agent": "mozilla/5.0  applewebkit/537.36  chrome/78.0.3904.108 safari/537.36"
 "origin": "183.14.76.230, 183.14.76.230", 
 "url": "https://httpbin.org/get"
}

我曾经学java的时分学过a7娱乐登录cookie了,一向认为自己博客中也写了,这儿就来弥补一下cookie基础知识了。

在网站中,http恳求是无状况的,也便是说即便第一次和服务器衔接后而且登录成功后,第2次恳求服务器仍然不能做到当时恳求的是哪个用户。cookie的呈现便是为了处理这个问题,第一次登录后服务器回来一些数据给浏览器,然后浏览器保存在本地,当该用户发送第二层恳求的时分,就会主动的把上一次恳求存储的cookie数据主动的带着给服务器,服务器经过浏览器带着的数据就能判别当时用户是谁了。cookie存储的数据量邮箱,不同的浏览器有不同的存储巨细,但一般不超越4kb,因而运用cookie只能存储少数的数据。

cookie的格局:

set-cookie: name=value; expires/max-age=date; path=path; domain=domain_name; secure

参数含义:

name:cookie的姓名。

value:cookie的值。

expires:cookie的过期时刻。

path:cookie效果的途径。

domain:cookie效果的域名。

secure:是否只在https协议下起效果。

一些需求登录的网站,实际上便是由于没有cookie信息。咱们想要用代码的方式拜访这种网站,就必须要有正确的cookie信息才干拜访。

最简略的办法便是先运用浏览器,然后用抓包软件将数据包中的cookie信息仿制下来,放到headers中。

from urllib import request
targeturl = 'http://www.baidu.com/'
headers = {
 "user-agent": "mozilla/5.0  applewebkit/537.36  chrome/74.0.3729.169 safari/537.36",
 "cookie": "baiduid=734868bb44acdce4fb2c49db3aa14669:fg=1 for .baidu.com,bidupsid=734868bb44acdce4fc561f4d84999535 for .baidu.com,h_ps_pssid=1429_21101_30211 for .baidu.com,pstm=1576550373 for .baidu.com,delper=0 for .baidu.com,bdsvrtm=0 for www.baidu.com,bd_home=0 for www.baidu.com"
reqobj = request.request
resp = request.urlopen
print.decode)