打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python爬虫Resquests库的使用

Resquests库应该是大多数爬虫初学者接触到的第一个库,因为他够简洁,而且功能对于常规的网页内容也够用。更好的是,它有中文文档,对我们这种四六级飘过的选手很友好,找机会整理了一下。

一、理论知识

1、导入requests模块:

import requests

2、requests.get()——最简单的请求:

r = requests.get('https://www.jianshu.com/')

3、requests.post():

用来给网页传递一个表单,主要用来进行登陆操作

r = requests.post('http://httpbin.org/post', data = {'key':'value'})

4、传递参数:

parmas参数

  • 直接传输:
response = requests.get('http://httpbin.org/get?name=zhangsan&age=22')print(response.text)
  • 通过字典传输:
payload = {'key1': 'value1', 'key2': 'value2'}response = requests.get('http://httpbin.org/get', params=payload)print(response.text)

headers参数(请求头)

headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}response = requests.get('http://httpbin.org/get', headers=headers)print(response.text)

5、Proxies(代理)

proxies = { 'http': 'https://175.44.148.176:9000', 'https': 'https://183.129.207.86:14002'}response = requests.get('https://www.baidu.com/', proxies=proxies)

6、Response的一些属性

属性 描述 response.text 获取str类型(Unicode编码)的响应 response.content 获取bytes类型的响应 response.status_code 获取响应状态码 response.headers 获取响应头 response.request 获取响应对应的请求

7、cookies

cookie信息

response.cookies

session

session用来记录登陆状态,第一次用session发送post登陆请求后,请求头信息、登陆成功的cookies信息等都保存在session对象中,第二次只需要直接get即可。同时也可验证是否登录成功。

def login_renren(): login_url = 'http://www.renren.com/SysHome.do' login_data = {'email': '账号','password': '密码'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',} session = requests.session() response = session.post(login_url, data=login_data, headers=headers) response = session.get('http://www.renren.com/971909762/newsfeed/photo') print(response.text)login_renren()

二、实例

1、百度贴吧请求:

import requestsimport sysclass BaiduTieBa:    def __init__(self, name, pn, ):        self.name = name        self.url = 'http://tieba.baidu.com/f?kw={}&ie=utf-8&pn='.format(name)        self.headers = {            # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'            # 使用较老版本的请求头,该浏览器不支持js            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'        }        self.url_list = [self.url + str(pn * 50) for pn in range(pn)]        print(self.url_list)            def run(self):        for url in self.url_list:            data = self.get_data(url)            num = self.url_list.index(url)            self.save_data(data, num)    def get_data(self, url):        response = requests.get(url, headers=self.headers)        return response.content    def save_data(self, data, num):        file_name = self.name + '_' + str(num) + '.html'        with open(file_name, 'wb') as f:            f.write(data)if __name__ == '__main__':    name = sys.argv[1]    pn = int(sys.argv[2])    baidu = BaiduTieBa(name, pn)    baidu.run()
  • if __name__ == '__main__':的作用:
    一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if name == 'main': 的作用就是控制这两种情况执行代码的过程,在 if name == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
  • sys.argv[n]:用于获取命令行输入的参数,sys.argv[0]为baidu.py文件的绝对路径,sys.argv[1]为第一个输入的参数,以此类推。注意,得到的是一个字符串对象。
  • str1.format(str2):将str2填入str1的{}中
  • list.index(str):输出str在list中的位置
  • response.content:以byte类型输出
  • open(file_name, 'wb'):以byte类型写入

注:参考文章的这个例子感觉有点问题,'http://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}'.format(name,pn),感觉不应该此时传输pn,修改后可以跑通了。

baidu.py文件写好后,在项目目录打开CMD,输入:python baidu.py 两会 6,得到结果。

2、人人网模拟登陆

session记录登录信息和cookie,接着访问个人主页,将结果保存到renren.html文件

import jsonimport requestsdef login_renren(): login_url = 'http://www.renren.com/PLogin.do' login_data = {'email': '账号','password': '密码'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',} session = requests.session() session.post(login_url, data=login_data, headers=headers) response = session.get('http://www.renren.com/581249666/newsfeed/photo') with open('renren.html', 'wb') as fp: fp.write(response.content) cookies_dict = requests.utils.dict_from_cookiejar(response.cookies) with open('cookies.txt', 'w') as f: json.dump(cookies_dict,f) with open('cookies.txt', 'r') as f: cookies = json.load(f) print(cookies)login_renren()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
接口测试框架——第三篇:发送(requests)
接口自动化测试之-requests模块详解
Python爬虫requests库教程(三)
某麒麟网站模拟登录(验证码识别)
Python 笔记七:Requests爬虫技巧
爬虫入门教程 —— 2
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服