当前位置: 首页 > news >正文

python爬虫系列(2.1-requests库的基本的使用)


一、基本认识

1、发送一个get请求

import requests

if __name__ == "__main__":

# 获取一个get请求

response = requests.get('http://httpbin.org/get')

2、关于获取请求到数据常见的返回值

import requests

if __name__ == "__main__":

# 获取一个get请求

response = requests.get('http://httpbin.org/get')

# 对抓取的网站设置编码

response.encoding = 'utf-8'

# 打印返回的数据

print(response.text)

print(response.json())

print(response.headers)

print(response.status_code)

print(response.url)

print(response.cookies)

print(response.json())

# 获取最原始的字符串,没有编码的(用户response.text出现乱码的时候,及下载二进制文件的时候)

print(response.content)

3、关于其他的请求方式

response = requests.post('http://httpbin.org/post')

response = requests.put('http://httpbin.org/put')

response = requests.delete('http://httpbin.org/delete')

response = requests.head('http://httpbin.org/get')

response = requests.options('http://httpbin.org/get')

二、关于get请求传递参数的

1、直接在url地址后面拼接参数

import requests

if __name__ == "__main__":

# 定义一个请求头(模拟浏览器)

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}

# 设置参数

data = {'name': 'june', 'password': 123456}

# 获取一个get请求

response = requests.get('http://httpbin.org/get?name=june&password=123456', headers=headers)

# 对抓取的网站设置编码

response.encoding = 'utf-8'

print(response.text)

2、使用params传递参数

import requests

if __name__ == "__main__":

# 定义一个请求头(模拟浏览器)

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}

# 设置参数

data = {'name': 'june', 'password': 123456}

# 获取一个get请求

response = requests.get('http://httpbin.org/get', headers=headers, params=data)

# 对抓取的网站设置编码

response.encoding = 'utf-8'

print(response.text)

三、使用requests库和正则表达式下载文章内容

1、需要下载的伯乐在线的文章标题

2、书写逻辑代码

import re

import requests

if __name__ == "__main__":

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36',

}

url = 'http://python.jobbole.com/category/guide/'

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

pattern = re.compile(

'<div.*?post-thumb.*?title="(.*?)".*?</a>', re.S

)

print(response.status_code)

result_list = re.findall(pattern, response.text)

f = open('jobbole1.txt', 'a+', encoding='utf8')

for item in result_list:

f.write(item.strip() + '\n')

f.close()

3、解说正则表达式

.*?表示非贪婪的匹配任何字符

re.S 使.匹配包括换行在内的全部字符

四、使用requests库和正则表达式下载图片

1、导包

import re

import os

import shutil

import requests

2、定义一个下载图片的类

class DownPic(object):

def __init__(self):

self.url = 'http://python.jobbole.com/category/guide/'

self.headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36',

}

self.create_dir()

def create_dir(cls):

# 如果文件夹存在就删除

if os.path.exists('demo'):

shutil.rmtree('demo')

os.makedirs('demo')

def get_html(self):

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

return response.text

def pattern(self):

pattern = re.compile(

'<div.*?post-thumb.*?src="(.*?)".*?</a>', re.S

)

result_list = re.findall(pattern, self.get_html())

return result_list

def download(self):

for item in self.pattern():

# 获取到的图片地址再次请求

if item.rsplit('.')[-1] in ['png', 'jpg']:

resp = requests.get(item.strip())

try:

with open(os.path.join('demo', item.strip().rsplit("/")[-1]), 'wb') as f:

f.write(resp.content)

except Exception as e:

print(e)

else:

continue

3、调用

if __name__ == "__main__":

p = DownPic()

p.download()

五、关于requests库的post请求

1、格式

response = requests.post('http://httpbin.org/post', headers=headers, data=data)

2、发送数据到服务器端

import requests

if __name__ == "__main__":

# 定义一个请求头(模拟浏览器)

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}

# 设置参数

data = {'email': '22@qq.com', 'password': 123456}

# 获取一个get请求

response = requests.post('https://httpbin.org/post', headers=headers, data=data)

# 对抓取的网站设置编码

response.encoding = 'utf-8'

print(response.text)

六、使用post请求获取拉勾网职业信息

import requests

if __name__ == "__main__":

url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36',

'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='

}

data = {

'first': 'true',

'pn': '1',

'kd': 'python',

}

response = requests.post(url=url, headers=headers, data=data)

print(response.json())


转载于:https://juejin.im/post/5be3ebd25188251ed92ec724

相关文章:

  • 我的原型链家族将要崛起。
  • 一步步实现web程序信息管理系统之二--后台框架实现跳转登陆页面
  • 基于CentOS设置和使用Yum软件仓库
  • 深入浏览器事件循环的本质
  • 镶锆石、侧边指纹、双屏翻盖机,三星的这款2万块手机,只有土豪能懂
  • 2018自媒体运营吸粉3大途径
  • 闭包--闭包作用之保存(一)
  • 智能监控在袋鼠云中的应用
  • 一个UML类图示例
  • Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0
  • eclipse 设置python 界面为默认展示
  • HTTP那些事
  • Java浅Copy的一些事
  • Java Log4j 配置文件
  • C++ 编译器
  • @jsonView过滤属性
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 10个确保微服务与容器安全的最佳实践
  • angular2开源库收集
  • extract-text-webpack-plugin用法
  • HTTP请求重发
  • java 多线程基础, 我觉得还是有必要看看的
  • Java读取Properties文件的六种方法
  • java中的hashCode
  • Linux中的硬链接与软链接
  • MQ框架的比较
  • Webpack 4x 之路 ( 四 )
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 诡异!React stopPropagation失灵
  • 机器学习 vs. 深度学习
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)21
  • 前端知识点整理(待续)
  • 为什么要用IPython/Jupyter?
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 赢得Docker挑战最佳实践
  • 湖北分布式智能数据采集方法有哪些?
  • #HarmonyOS:基础语法
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (分布式缓存)Redis持久化
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)setTimeout 和 setInterval 的区别
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Project Open Day(2011.11.13)
  • .Net Winform开发笔记(一)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开发人员必知的八个网站
  • .net下简单快捷的数值高低位切换
  • .net与java建立WebService再互相调用
  • .NET中两种OCR方式对比
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [04]Web前端进阶—JS伪数组