千峰Python爬虫笔记day02

1、post请求 举例,百度翻译

【注】表单的处理

form_data = urllib.parse.urlencode(form_data).encode()

import urllib.request
import urllib.parse

post_url = 'http://fanyi.baidu.com/sug/'

word = input('输入要查的词')

form_data = {'kw':word,}#构造表单数据

#构造请求头
headers = {'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'}

request = urllib.request.Request(url=post_url,headers=headers)#构造请
求对象

form_data = urllib.parse.urlencode(form_data).encode()#处理请求对象

response = urllib.request.urlopen(request,data=form_data)#发送请求

print(response.read().decode())

报error1了

在线解析json的网页www.json.cn

案例 /vtransapi的实现 :若请求有问题,则把所有头信息除Accept-Encoding和Content-Length的都贴过来

百度翻译一个单词对应一个sign、token,是加密措施 签名、请求令牌 简书,破解百度翻译

 

2、ajax

整个页面不刷新局部刷新

get

豆瓣 通过fiddler抓包,看raw中get的借口地址,分析参数 start、limit data={'start':(page-1)*number , 'limit':number,}

KFC 餐厅查询 抓接口,看请求类型post,formdata={'cname':'北京','pid':'','pageIndex':'3','pageSize':'10',}同百度翻译案例

post

3、复杂get

百度贴吧 需求:输入吧名,输入起始页码,结束页码,在当前文件夹中创建一个以吧名为名字的文件夹,里面是每一页的html内容,文件名是吧名_page.html

4、URLError\HTTPError

NameError 变量名没定义

TypeError

FileNotFoundError

在urllib.error中  URLError:a.没有网 b.服务器连接失败 c.找不到指定服务器

HTTPError是URLError子类可能是URL拼写错误

5、Handler处理器、自定义Opener

urlopen()给一个url,发送请求,获取响应

Request()定制请求头,创建请求对象

基本用法 :

import urllib.request.parse

url = '...'

headers = '...'

#创建一个Handler

handler = urllib.request.HTTPHeadler()

#通过Handler创建一个Opener对象,用该对象的方法发送请求

opener = urllib.request.build_opener(handler)

#构建请求对象

request = urllib.request.Request(url,headers = headers)

#发送请求

response = opener.open(request)

print(response)

高级功能:使用代理、cookie

6、代理

代理包括正向代理、反向代理

正向代理:替客户端向服务器发请求,防封IP

反向代理:代理服务器向客户端发响应

透明代理:服务器知道你用了代理,知道你的真实IP

匿名代理:                                    ,不知道

高匿名代理:不知道                      ,不知道

浏览器配置代理:右上方三点-》设置-》高级-》打开代理设置-》局域网设置-》代理服务器,填入地址、端口

常用代理商:好代理(付费)、快代理、西刺代理

花刺代理软件 ProxyThorn检测从西刺上爬的免费代理可不可用:

导入-》选中txt文件-》验证全部-》清理-》选中单个-》设为IE代理

代码配置:(使用代理查自己ip段)

import urllib.request
import urllib.parse

handler = urllib.request.ProxyHandler({'http':'113.79.75.104:9797'})#创建handle

opener = urllib.request.build_opener(handler)#创建opener

url = 'https://www.baidu.com/s?ie=UTF-8&wd=ip'
headers = {'User-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'X-Requested-With':' XMLHttpRequest',}

request = urllib.request.Request(url,headers = headers)

response = opener.open(request)#都使用open方法来代理请求

with open('ip.html','wb') as fp:
    fp.write(response.read())

cookie(只能用来登录一些小网站)

http协议具有无状态特性,几次连接之间没有联系,网站登录时cookie用来记录用户身份,相当于服务器给客户端发了令牌。

案例:cookie模拟登录人人网用户主页面。fiilder抓包不要抓点击登录按钮时服务器给的响应(要素过多不好分析),抓登录成功后点击个人主页时给的响应。看<>请求中的raw中的cookie,放在headers中,headers={'User-Agent':'...','cookie':'...',}

import urllib.request
import urllib.parse

url = 'http://www.renren.com/*****/profile'

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36','cookie':'anonymid=js2kxt52ghq6fg; depovince=ZGQT; _r01_=1; JSESSIONID=abcsmoIPIA3064jYMSKJw; ick_login=7bc46d28-0804-4c79-94ab-90213073fdfc; t=d106ee39f8d3f41215d2c94c44c52c543; societyguester=d106ee39f8d3f41215d2c94c44c52c543; id=969722393; xnsid=1b4d5807; jebecookies=660d83ed-5cd4-4a91-be9c-d6151497b462|||||; ver=7.0; loginfrom=null; springskin=set; jebe_key=5ae33b0f-ef4c-41a2-b692-255e81bda7c1%7C621eb58cb0e4ffeefd3604d973abf128%7C1550025141726%7C1%7C1550025141806; vip=1; wp_fold=0',}

request = urllib.request.Request(url , headers = headers)

response = urllib.request.urlopen(request)

with open('人人主页.html','wb') as fp:
    fp.write(response.read())

 

你可能感兴趣的:(Python)