python爬虫requests-Python爬虫(requests模块)

Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用。

Requests基础学习

使用方法:

1.导入Requests模块:

import requests

2.尝试用get获取某个页面,以百度为例子

url = 'http://www.baidu.com'

r = requests.get(url)

r是一个response对象。可以从这个对象中获取所有想要的信息。

发送简单get的请求:

1850558-20191112151824122-701934318.png

response.text和response.content的区别:

response.text

返回类型:str

解码类型:根据HTTP头部对响应的编码作出有根据的推测的文本编码

如何修改编码方式:response.encoding = 'gbk'

response.content

返回类型:bytes

解码类型:没有指定

如何修改编码方式:response.content.decode('ut8-f')

实例:获取百度图片

import requests

url = 'https://www.baidu.com/img/bd_logo1.png'

response = requests.get(url)

with open('baidu.png','wb') as p:

p.write(response.content)

发送带header的get请求:

1850558-20191112153213517-329702603.png

发送带参数的get请求:

1850558-20191112154936958-1139844836.png

实战(贴吧爬虫):

import requests

class TiebaSpider:

#构造函数,传入想要查询的贴吧名字和查询前num页,定义后面方法需要用的属性

def __init__(self,tieba_name,tieba_num):

self.tieba_num = tieba_num

self.tieba_name = tieba_name

#下面为url访问的格式,kw为贴吧名,pn为代表页数,贴吧可查首页pn=0,第一页50,第二页100,以此类推

self.url_temp = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"

#模仿网页访问贴吧

self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "

"(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"}

#获取url列表

def get_urlList(self):

url_list = []

for i in range(self.tieba_num):

url_list.append(self.url_temp.format(i * 50))

return url_list

#访问网页,解析网页,返回

def parse_url(self,url):

response = requests.get(url,headers=self.headers)

return response.text #或者response.content.decode('utf-8')

#保存网页

def save_html(self,html_str,page_num):

file_path = "{}-第{}页.html".format(self.tieba_name,page_num)

with open(file_path,'w',encoding='utf-8') as f:

f.write(html_str)

def run(self):

url_list = self.get_urlList()

for url in url_list:

html_str = self.parse_url(url) #保存的内容

page_num = url_list.index(url) + 1 #文件的页码

self.save_html(html_str,page_num)

def main():

tieba_name = input('请输入想查询的贴吧名:')

tieba_num = int(input('请输入想要查询前几页:'))

tieba = TiebaSpider(tieba_name, tieba_num)

tieba.run()

if __name__ == '__main__':

main()

Requests深入学习

发送post请求

哪些地方我们会用到POST请求:

登录注册(POST比GET更安全)

需要传输大文本内容的时候(POST请求对数据长度没有要求)

所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

使用代理

为什么爬虫需要使用代理

让服务器以为不是同一个客户端在请求

防止我们的真实地址被泄漏,防止被追究

用法:request.get('http://www.baidu.com',proxies = proxies)

proxies的形式:字典

proxies = {

"http" : "http://12.34.56.79:9527",

"https" : "http://12.34.56.79:9527",

}

步骤:

准备一堆IP地址,组成ip池,随机选择一个ip来使用

随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到

{"ip" : ip,"time",0}

[{},{},{},{},]对这个ip列表进行排序,按照使用次数进行排序

选择使用次数较少的10个ip,从中随机选择一个

检查ip的可以性

可以使用requests添加超时参数,判断ip地址的质量

在线代理ip质量检测的网站

爬虫处理cookie和session

带上cookie,session的好处:

能够请求到登录之后的页面

带上cookie,session的弊端:

一套cookie和session往往和一个用户对应,请求太快或者太多,容易被服务器识别为爬虫

不需要cookie的时候尽量不去使用cookie

处理cookies,session请求

requests提供了一个叫session类,来实现客户端和服务端的会话保持

使用方法:

1.实例化一个session对象

2.让session发送get或者post请求

session = requests.session()

cookies = {cookies字典}

response = session.get(url,headers=headers,cookies=cookies)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值