1.get传参

(1)汉字报错 :解释器器ascii没有汉字 url汉字转码

urllib.parse.quote safe="string.printtable"

(2)字典传参

urllib.parse.urlencode()

post:

urlib.request.openurl(url,data = "服务器器接受的数据")

handler:处理理器器的⾃自定义:

User-Agent:

(1)模拟真实的浏览器器发送请求:(1)百度批量量搜索(2)检查元素(百度搜索useragent⼤大全)

(2)request.add_header(动态添加head数据)

(3)响应头 response.header

(4)创建request:urlib.request.Request(url)

2.IP代理理:

(1)免费的IP:时效性差,错误率⾼高

(2)付费的IP:贵花钱,也有失效不不能⽤用的

IP分类:

透明:对⽅方知道我们真实的ip

匿匿名:对⽅方不不知道我们真实的ip,知道了了你使⽤用了了代理理

⾼高匿匿:对⽅方不不知道我们真是的IP.也不不知道我们使⽤用了了代理理

handler:

(1)系统的urlopen()不不⽀支持代理理的添加

创建对应的处理理器器(handler)

1.代理理处理理器器:ProxyHandler

2.拿着ProxyHandler创建opener:bulid_opener()

3.opener.open(url)就可以请求数据

auth认证handler

Cookieshandler

URLError

requests(第三⽅方模块):简单易易⽤用

数据解析:

数据存储:json csv MongDB resdis mysql

import urllib.request
import urllib.parse
import string def get_params():
url = "http://www.baidu.com/s?" params = {
"wd":"中文",
"key":"zhang",
"value":"san" }
str_params = urllib.parse.urlencode(params)
print(str_params)
final_url = url + str_params #将带有中文的url 转译成计算机可以识别的url
end_url = urllib.parse.quote(final_url,safe=string.printable) response = urllib.request.urlopen(end_url) data = response.read().decode("utf-8")
print(data) get_params()
import urllib.request

def load_baidu():
url= "https://www.baidu.com"
header = {
#浏览器的版本
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
# "haha":"hehe"
} #创建请求对象
request = urllib.request.Request(url)
#动态的去添加head的信息
request.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")
#请求网络数据(不在此处增加请求头信息因为此方法系统没有提供参数)
response = urllib.request.urlopen(request)
print(response)
data = response.read().decode("utf-8") #获取到完整的url
final_url = request.get_full_url()
print(final_url) #响应头
# print(response.headers)
#获取请求头的信息(所有的头的信息)
# request_headers = request.headers
# print(request_headers)
#(2)第二种方式打印headers的信息
#注意点:首字母需要大写,其他字母都小写
request_headers = request.get_header("User-agent")
# print(request_headers)
with open("02header.html","w")as f:
f.write(data) load_baidu()
import urllib.request

def load_baidu():
url= "http://www.baidu.com"
#添加请求头的信息 #创建请求对象
request = urllib.request.Request(url)
#请求网络数据
response = urllib.request.urlopen(request)
print(response)
data = response.read().decode("utf-8") #响应头
# print(response.headers)
#获取请求头的信息
request_headers = request.headers
print(request_headers)
with open("02header.html","w")as f:
f.write(data) load_baidu()
import urllib.request
import random def load_baidu(): url = "http://www.baidu.com"
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50" ]
#每次请求的浏览器都是不一样的
random_user_agent = random.choice(user_agent_list) request = urllib.request.Request(url) #增加对应的请求头信息(user_agent)
request.add_header("User-Agent",random_user_agent) #请求数据
response = urllib.request.urlopen(request)
#请求头的信息
print(request.get_header("User-agent")) load_baidu()
import urllib.request

def handler_openner():

    #系统的urlopen并没有添加代理的功能所以需要我们自定义这个功能
#安全 套接层 ssl第三方的CA数字证书
#http80端口# 和https443
#urlopen为什么可以请求数据 handler处理器
#自己的oppener请求数据 # urllib.request.urlopen()
url = "https://blog.csdn.net/m0_37499059/article/details/79003731" #创建自己的处理器
handler = urllib.request.HTTPHandler()
#创建自己的oppener
opener=urllib.request.build_opener(handler)
#用自己创建的opener调用open方法请求数据
response = opener.open(url)
# data = response.read()
data = response.read().decode("utf-8") with open("02header.html", "w")as f:
f.write(data) handler_openner()
import urllib.request

def create_proxy_handler():
url = "https://blog.csdn.net/m0_37499059/article/details/79003731" #添加代理
proxy = {
#免费的写法
"http":""
# "http":"120.77.249.46:8080"
#付费的代理
# "http":"xiaoming":123@115. }
#代理处理器
proxy_handler = urllib.request.ProxyHandler(proxy) #创建自己opener
opener = urllib.request.build_opener(proxy_handler)
#拿着代理ip去发送请求
response = opener.open(url)
data = response.read().decode("utf-8") with open("03header.html", "w")as f:
f.write(data) create_proxy_handler()
import urllib.request

def proxy_user():

    proxy_list = [
{"https":""},
# {"https":"106.75.226.36:808"},
# {"https":"61.135.217.7:80"},
# {"https":"125.70.13.77:8080"},
# {"https":"118.190.95.35:9001"}
]
for proxy in proxy_list:
print(proxy)
#利用遍历出来的ip创建处理器
proxy_handler = urllib.request.ProxyHandler(proxy)
#创建opener
opener = urllib.request.build_opener(proxy_handler) try:
data = opener.open("http://www.baidu.com",timeout=1) haha = data.read()
print(haha)
except Exception as e:
print(e) proxy_user()

付费的代理发送

import urllib.request

#付费的代理发送
#1.用户名密码(带着)
#通过验证的处理器来发送 def money_proxy_use():
# #第一种方式付费代理发送请求
# #1.代理ip
# money_proxy ={"http":"username:pwd@192.168.12.11:8080"}
# #2.代理的处理器
# proxy_handler=urllib.request.ProxyHandler(money_proxy)
#
# #3.通过处理器创建opener
# opener = urllib.request.build_opener(proxy_handler)
# #4.open发送请求
# opener.open("http://www.baidu.com")
# #第二种方式发送付费的ip地址
use_name = "abcname"
pwd = ""
proxy_money = "123.158.63.130:8888"
#2.创建密码管理器,添加用户名和密码
password_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm()
#uri定位 uri>url
#url 资源定位符
password_manager.add_password(None,proxy_money,use_name,pwd)
#3.创建可以验证代理ip的处理器
handle_auth_proxy = urllib.request.ProxyBasicAuthHandler(password_manager)
#4.根据处理器创建opener
opener_auth = urllib.request.build_opener(handle_auth_proxy)
#5.发送请求
response = opener_auth.open("http://www.baidu.com")
print(response.read()) #爬取自己公司的数据,做数据分析
#admin money_proxy_use()

爬取自己的网站

import urllib.request

def auth_nei_wang():
#1.用户名密码
user = "admin"
pwd = "adimin123"
nei_url = "http://192.168.179.66" #2.创建密码管理器
pwd_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm() pwd_manager.add_password(None,nei_url,user,pwd) #创建认证处理器(requests)
auth_handler = urllib.request.HTTPBasicAuthHandler(pwd_manager) opener = urllib.request.build_opener(auth_handler) response = opener.open(nei_url)
print(response) auth_nei_wang()

cookie

第一种:

"""
直接获取 个人中心的页面
手动粘贴 复制 PC 抓包的 cookies
放在 request对象的请求头里面 """ import urllib.request # 1.数据url
url = 'https://www.yaozh.com/member/'
# 2.添加请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
,
'Cookie': '_ga=GA1.2.1820447474.1535025127; MEIQIA_EXTRA_TRACK_ID=199Tty9OyANCXtHaSobJs67FU7J; UtzD_f52b_ulastactivity=1511944816%7C0; WAF_SESSION_ID=7d88ae0fc48bffa022729657cf09807d; PHPSESSID=7jsc60esmb6krgthnj99dfq7r3; _gid=GA1.2.358950482.1540209934; _gat=1; MEIQIA_VISIT_ID=1BviNX3zYEKVS7bQVpTRHOTFV8M; yaozh_logintime=1540209949; yaozh_user=381740%09xiaomaoera12; yaozh_userId=381740; db_w_auth=368675%09xiaomaoera12; UtzD_f52b_saltkey=CfYyYFY2; UtzD_f52b_lastvisit=1540206351; UtzD_f52b_lastact=1540209951%09uc.php%09; UtzD_f52b_auth=2e13RFf%2F3R%2BNjohcx%2BuoLcVRx%2FhF0NvwUbslgSZX%2FOUMkCRRcgh5Ayg6RGnklcG3d2DkUFAXJxjhlIS8fPvr9rrwa%2FY; yaozh_uidhas=1; yaozh_mylogin=1540209953; MEIQIA_EXTRA_TRACK_ID=199Tty9OyANCXtHaSobJs67FU7J; WAF_SESSION_ID=7d88ae0fc48bffa022729657cf09807d; Hm_lvt_65968db3ac154c3089d7f9a4cbb98c94=1535025126%2C1535283389%2C1535283401%2C1539351081%2C1539512967%2C1540209934; MEIQIA_VISIT_ID=1BviNX3zYEKVS7bQVpTRHOTFV8M; Hm_lpvt_65968db3ac154c3089d7f9a4cbb98c94=1540209958'
} # 3.构建请求对象
request = urllib.request.Request(url, headers=headers) # 4.发送请求对象
response = urllib.request.urlopen(request) # 5.读取数据
data = response.read()
print(type(data)) # 保存到文件中 验证数据
with open('01cook.html', 'wb') as f:
f.write(data)

第二种:

"""
获取 个人中心的页面 1. 代码登录 登录成功 cookie(有效)
2. 自动带着cookie 去请求个人中心 cookiejar 自动保存这个cookie """
import urllib.request
from http import cookiejar
from urllib import parse # 登录之前的 登录页的网址https://www.yaozh.com/login/
# 找登录 参数 # 后台 根据你发送的请求方式来判断的 如果你是get(登录页面),如果POST(登录结果) # 1. 代码登录
# 1.1 登录的网址
login_url = 'https://www.yaozh.com/login'
# 1.2 登录的参数
login_form_data = {
"username": "",
"pwd": "56uhjyh",
"formhash": "CE3ADF28C5",
"backurl": "https%3A%2F%2Fwww.yaozh.com%2F" }
# 1.3 发送登录请求POST
cook_jar = cookiejar.CookieJar()
# 定义有添加 cook 功能的 处理器
cook_hanlder = urllib.request.HTTPCookieProcessor(cook_jar)
# 根据处理器 生成 opener
opener = urllib.request.build_opener(cook_hanlder) # 带着参数 发送post请求
# 添加请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
# 1.参数 将来 需要转译 转码; 2. post请求的 data要求是bytes
login_str = parse.urlencode(login_form_data).encode('utf-8') login_request = urllib.request.Request(login_url, headers=headers, data=login_str)
# 如果登录成功, cookjar自动保存cookie
opener.open(login_request) # 2. 代码带着cooke去访问 个人中心
center_url = 'https://www.yaozh.com/member/'
center_request = urllib.request.Request(center_url, headers=headers)
response = opener.open(center_url)
# bytes -->str
data = response.read().decode() with open('02cook.html', 'w') as f:
f.write(data) # 一个用户 在不同的地点(IP(福建,上海, 杭州, 河南)) 不同浏览器 上面 不停的登录 非人为操作
# 封你的账号
# N 个 账号

错误提示

# urlib.request  提示错误 HTTPError UrlError
"""
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known> raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found """ import urllib.request url = 'https://blog.csdn.net/zjsxxzh/article/details/110' url = 'https://affdsfsfsdfd.cn' try:
response = urllib.request.urlopen(url) except urllib.request.HTTPError as error:
print(error.code) except urllib.request.URLError as error:
print(error)

带参数,头信息,代理,cookie爬取的更多相关文章

  1. Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)

    Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...

  2. 代理IP爬取和验证(快代理&西刺代理)

    前言 仅仅伪装网页agent是不够的,你还需要一点新东西 今天主要讲解两个比较知名的国内免费IP代理网站:西刺代理&快代理,我们主要的目标是爬取其免费的高匿代理,这些IP有两大特点:免费,不稳 ...

  3. 自定义请求头信息及cookie信息

    请求网页的时候有时候我们需要传递一些参数信息,这个时候我们可以将参数放到请求头中,具体使用如下: 这里有小问题就是请求参数的属性名好像不支持下划线,即 HTTP_UID不可用,但是HTTP-UID就可 ...

  4. 5 使用ip代理池爬取糗事百科

    从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...

  5. 代理IP爬取,计算,发放自动化系统

    IoC Python端 MySQL端 PHP端 怎么使用 这学期有一门课叫<物联网与云计算>,于是我就做了一个大作业,实现的是对代理IP的爬取,计算推荐,发放给用户等任务的的自动化系统.由 ...

  6. Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)

    Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...

  7. Python爬虫-代理池-爬取代理入库并测试代理可用性

    目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...

  8. requests 使用免费的代理ip爬取网站

    import requests import queue import threading from lxml import etree #要爬取的URL url = "http://xxx ...

  9. 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)

    分析 蚂蚁代理的列表页大致是这样的: 端口字段使用了图片显示,并且在图片上还有各种干扰线,保存一个图片到本地用画图打开观察一下: 仔细观察蓝色的线其实是在黑色的数字下面的,其它的干扰线也是,所以这幅图 ...

随机推荐

  1. 关于idlf无法输入中文的解决办法

    最近在学习python 但是刚开始写程序的时候发现无法输入中文  上网查发现有不少mac端的IDLF也存在这个问题 导致这个问题的原因可能不唯一 但是大多数原因应该是Mac 系统自带的 Tcl/Tk ...

  2. Linux crontab 定时任务设置

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  3. Unity碰撞和触发的区别

    碰撞的必要条件: 2个都有Collider,且至少有一个刚体.带刚体的身上会检测OnCollision事件,stay就是2个一直在碰着. 触发的必要条件: 至少有一个碰撞器勾选了IsTrigger,至 ...

  4. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  5. webpack实现模块化打包

    webpack打包应用和实现 1)安装webpack $ npm install webpack webpack-cli --save-dev 2)添加配置文件 webpack.config.js 3 ...

  6. 数据库ifnull方法

    IFNULL(expr1,expr2)如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值.例如: ifnull() 如果sum(t ...

  7. 国家人工智能(AI)的美好前景

    在今年两会期间.李彦宏(Robin Lee,1968-)关于人工智能(AI)"国家优先"的提案,即所谓的"中国大脑"计划.依据何在?为什么? 近几年,世界互联网 ...

  8. Struts2中的异步提交(ajaxfileupload异步上传(图片)插件的使用)

    server端採用struts2来处理文件上传. 所需环境: jquery.js ajaxfileupload.js struts2所依赖的jar包 及struts2-json-plugin-2.1. ...

  9. C++继承中析构函数 构造函数的调用顺序以及虚析构函数

    首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...

  10. UI自动化

    1.下载安装JDK,配置环境变量 2.下载eclips,并安装 3.下载jskuli截图工具,并安装 4.下载Jspec插件,将其放在eclipse路径下的\plugins文件夹中.(打开eclips ...