爬虫(二) parse、各类请求和伪装UA

前提:

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

代码示例如下:

import urllib.parse
import urllib.request



url = '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.parse

post_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.parse

url = '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.parse

post_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())

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值