前提:

url的组成:url只能由特定的字符组成,字母,数字和下划线,如果出现其他的,比如 $ 空格 中文则要对其进行编码。

代码示例如下:

import urllib.parse
import urllib.requesturl = 'https://i.meizitu.net/2013/06/2013061932375wdkimqcyej.jpg'# ret_url = urllib.parse.quote(url)
# urllib.request.urlretrieve(ret_url, 'chun2.jpg')
#
# print(ret_url)data={"name" : "嘿嘿嘿","sex"  : "nan","age"  : 20 ,}
ret_url = urllib.parse.urlencode(data)
ret_url = url.__add__(ret_url)
print(ret_url)

运行结果:

https://i.meizitu.net/2013/06/2013061932375wdkimqcyej.jpgname=%E6%9E%97%E4%BF%8A%E6%B6%B5&sex=nan&age=20

获取表单数据,post请求:

步骤如下:

  1. 先在浏览器发送post请求。
  2. 使用抓包工具抓post数据。
  3. 在请求头的获取url,在post数据包中获取表单数据。
  4. 通过url,和伪造的UA生成请求对象。
  5. 处理表单数据,使用urllib库中的urlopen进行处理。
  6. 最后通过请求对象和处理完的表单数据获取响应信息。
import urllib.request
import urllib.parse# 获取posturl的地址
post_url = 'https://fanyi.baidu.com/sug'
word = input("请输入您要查询的英文单词:")# 构建post表单数据
from_data = {'kw': word,
}# 发送请求的过程
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) ''AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/63.0.3239.132 Safari/537.36',
}# 构建请求对象
request = urllib.request.Request(url=post_url, headers=headers)# 处理表单数据
from_data = urllib.parse.urlencode(from_data)# 发送请求
response = urllib.request.urlopen(request, data=from_data.encode())print(response.read().decode())

伪装UA(User-Agent):

有时候仅仅伪装UA还不能躲过反爬虫机制,这时候我们需要用详细的请求头信息进行更全面的信息伪装。

以下代码就是伪装全面利用请求的信息进行伪装的例子:

import urllib.request
import urllib.parsepost_url = 'https://fanyi.baidu.com/v2transapi'
word = input("请输入您要查询的英文单词:")
from_data = {'from': 'en','to': 'zh','query': 'wolf','transtype': 'realtime','simple_means_flag': '3','sign': '275695.55262','token': '5eb650ac4d089f39824c985a5be3eddf',
}# headers = {
#     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) '
#                   'AppleWebKit/537.36 (KHTML, like Gecko)'
#                   ' Chrome/63.0.3239.132 Safari/537.36',
# }headers = {'Host': 'fanyi.baidu.com','Connection': 'keep-alive',# 'Content-Length': '120','Accept': '*/*','Origin': 'https://fanyi.baidu.com','X-Requested-With': 'XMLHttpRequest','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Referer': 'https://fanyi.baidu.com/?aldtype=16047',# 'Accept-Encoding': 'gzip, deflate, br',# 这是数据包可接受的压缩方式,一般情况下将其去掉不做压缩'Accept-Language': 'zh-CN,zh;q=0.9','Cookie': 'BAIDUID=68393D21286EBF4A001B4E0FCA70F07F:FG=1; PSTM=1539614412; BIDUPSID=A4E0DC66251C305F80AB5BA6B0624EA5;',
}request = urllib.request.Request(url=post_url, headers=headers)from_data = urllib.parse.urlencode(from_data)response = urllib.request.urlopen(request, data=from_data.encode())print(response.read().decode())

ajax获取get请求信息:

  1. 在浏览器上数页使用Url访问内容,发现其中url存在的变换规律。
  2. 终端获取关键信息,将信息进行编码,装到通用url后面。
  3. 最后利用组装好的url获得请求和响应。
import urllib.request
import urllib.parseurl = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'pag = int(input("请输入您要看到的页数:"))
number = 20# 构建get参数
data = {'start': (pag - 1) * 20,'limit': number,
}# 将gei参数转化为query_string
query_string = urllib.parse.urlencode(data)
print(query_string)url += query_string# 伪装UA
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) ''AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/63.0.3239.132 Safari/537.36',
}request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)print(response.read().decode())

ajax获取post请求信息:

  1. 利用抓包工具抓取其中的关键变化信息。
  2. 在终端输入需要的关键信息。
  3. 后面和普通的post请求的操作是一样的。
import urllib.request
import urllib.parsepost_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'city = input("请输入您要查询的城市:")
page = input("请输入您要查询的页数:")
size = input("请输入您要查询的个数: ")form = {'cname': '','pid': '','keyword': city,'pageIndex': page,'pageSize': size,
}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) ''AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/63.0.3239.132 Safari/537.36',
}request = urllib.request.Request(post_url, headers=headers)
form = urllib.parse.urlencode(form)
response = urllib.request.urlopen(post_url, data=form.encode())print(response.read().decode())

爬虫(二) parse、各类请求和伪装UA相关推荐

  1. python爬虫(二)_HTTP的请求和响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

  2. 爬虫学习笔记(二)http请求详解

    上篇博客里面写了,爬虫就是发http请求(浏览器里面打开发送的都是http请求),然后获取到response,咱们再从response里面找到想要的数据,存储到本地. 咱们本章就来说一下什么是http ...

  3. 【爬虫二】爬取豆瓣音乐榜单

    前言 借助有效率的工具,可以让我们更加方便的写出爬虫程序.本篇使用request和bs4库爬取豆瓣音乐榜单. 介绍 豆瓣音乐榜单:https://music.douban.com/top250 bs4 ...

  4. python爬虫 - python requests网络请求简洁之道

    转自:python爬虫 - python requests网络请求简洁之道 requests简介 requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到 ...

  5. 【网络爬虫】(1) 网络请求,urllib库介绍

    各位同学好,今天开始和各位分享一下python网络爬虫技巧,从基本的函数开始,到项目实战.那我们开始吧. 1. 基本概念 这里简单介绍一下后续学习中需要掌握的概念. (1)http 和 https 协 ...

  6. django restful 请求_Django编写RESTful API(二):请求和响应

    前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每个URL表明着一个资源.固然咱们还知道RESTful API的另外一个特性就是,发送不一样 ...

  7. Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块

    Python爬虫核心知识 第二章:2.2 爬虫urllib.parse模块 2.2 爬虫urllib.parse模块 Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函 ...

  8. Python爬虫——Get和Post请求的使用

    Python爬虫--Get和Post请求的使用 1.Get请求 GET请求一般用于我们向服务器获取数据( urllib默认使用get请求),比如搜索:毛不易,地址栏中的 URL 信息: 其中wd 表示 ...

  9. Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹

    Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹 导读 基于反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地 ...

最新文章

  1. 上海市国资大数据课题启动仪式暨数据资产技术及金融行业应用沙龙隆重开
  2. 数据中台全景架构及模块解析
  3. GitLab-使用SSH的方式拉取和推送项目
  4. 多面体 (Multipatch)
  5. DBA 1.0与DBA眼中的DBA 2.0时代
  6. 大数据分析的作用与注意事项
  7. 快速创建一个 spring mvc 示例
  8. 常用的php类、方法、函数 注释标记
  9. zendframework Form表单美化
  10. 【图像去噪】基于matlab GUI中值+均值+维纳+小波滤波图像去噪【含Matlab源码 800期】
  11. 机器学习与深度学习资料
  12. VMware 8安装Mac OS X 10.7
  13. git --暂存区存在的意义
  14. IT软件行业用契约锁实现“代理-销售-投标-项目-合作”电子签
  15. Java IO流源码学习之二(Buffered字节流)
  16. 【JDK8新特性】之Lambda表达式
  17. 巧夺天工的kfifo(修订版)
  18. 金立手机官网已无法访问 正式进入破产程序
  19. 今天是一个特别的日子
  20. Visual Studio for Mac 离线版下载地址

热门文章

  1. 华为路由器6to4隧道原理及配置
  2. cnpm使用报错-最佳方案
  3. omf多路径 oracle_OMF下Restore Oracle Datafile的优先级问题
  4. c语言 习题错题知识点(1) (关键字 合法数据类型 逗号运算符)
  5. html制作跳动的心注释比较全
  6. inflect java_驼峰、下划线、单复数、表名-类名转换...通通交给字符串处理库:i...
  7. 微信小程序获取用户信息
  8. iOS 15 导航栏(Navigation)变白(导航栏不见)
  9. Win7安装VS2008 Error1935
  10. TCP/IP协议族在异构网络互联中的作用