python3爬虫——requests(一)_明朝那些事爬虫代码-程序员宅基地

技术标签: python3爬虫  

Requests:让http服务人类

虽然Python标准库中的urllib模块包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而Request自称”HTTP for Humans“,说明使用更简单方便。

Request唯一的非转基因的Python库,人类可以安全享有,

Request继承了urllib的所有特性,Request支持HTTP链接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码。支持国际化的URL和POST的数据自动编码。

request的安装方式

pip install requests

基于GET请求(headers参数和params参数)

如果想添加headers,可以传入headers参数来增加请求头中headers信息,如果要将参数放在url中传递,可以利用params参数。

# coding=utf-8
import requests

headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}
p = {"wd":"明朝那些事"}
url_temp = "https://www.baidu.com/s?"
url_temp = "https://www.baidu.com/s"

#params接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
r = requests.get(url_temp,headers=headers,params=p)

#查看响应内容,r.text返回的是unicode格式的数据
print(r.text)

#查看响应内容,r.content返回的字节流数据
print(r.content)

#查看完整的url地址
print(r.url)

#查看响应码
print(r.status_code)

#查看响应头部字符编码
print(r.encoding)

url = "https://www.baidu.com/s?wd={}".format("明朝那些事")
r = requests.get(url,headers=headers)
print(r.status_code)
print(r.request.url)
  • 使用r.text 时,Requests会基于HTTP相应的文本编码自动解码响应的内容,大多数Unicode字符集都能被无缝的解码。
  • 使用r.content时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
#coding=utf-8
import  requests
response = requests.get("http://www.sina.com")
print(response.request.headers)
print(response.content.decode())

结果

{'User-Agent': 'python-requests/2.12.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
<!DOCTYPE html>
<!-- [ published at 2017-06-09 15:15:23 ] -->
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>新浪首页</title>
    <meta name="keywords" content="新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,门户,资讯" />
  ...
#coding=utf-8
import  requests
response = requests.get("http://www.sina.com")
print(response.request.headers)
print(response.text)
{'User-Agent': 'python-requests/2.12.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
<!DOCTYPE html>
<!-- [ published at 2017-06-09 15:18:10 ] -->
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>新浪首页</title>
    <meta name="keywords" content="新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,门户,资è¯" />
    <meta name="description" content="新浪网为全球用户24小时提供全面及时的中文资è¯ï¼Œå†…å¹è¦†ç›–国内外突发新闻事件、体坛赛事、娱乐时尚、产业资è¯ã€åžç”¨ä¿¡æ¯ç­‰ï¼Œè¾æœ‰æ–°é—»ã€ä½“育、娱乐、财经、科技、房产、汽车等30多个内å¹é¢‘道,同时开è¾åšå¢ã€è§†é¢‘、èºå›ç­‰è‡ªç”±äº’动交流çºé—´ã€‚" />
    <link rel="mask-icon" sizes="any" href="//www.sina.com.cn/favicon.svg" color="red">
`

产生问题的原因:

  1. request自带的Accept-Encoding导致或者新浪默认发送的就是压缩之后的网页
  2. 但是为什么content没有问题,因为requests自带解压压缩网页的功能。
  3. 当收到一个响应时,Requests会猜测响应的编码格式,用于当调用response.text方法时对响应进行解码。Requests首先在HTTP头部检测是否存在指定的编码格式,如果不存在则会使用chart-detect来猜测编码方式(存在误差)
  4. 最好使用response.content.decode()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43141153/article/details/84594849

智能推荐

PTPX中的time_based analysis-程序员宅基地

文章浏览阅读1.1k次。根据VCD文件的type,PTPX支持instantaneous peak power analysis和cycle_accurate peakpower analysis。Time-Based Power Analysis支持的VCD type 由于Gate_level和zero_delay的VCD不支持event propa..._ptpx time

VisualSVN安装图解-程序员宅基地

文章浏览阅读79次。VisualSVN安装教程、、、-----------------------------------参考网址:https://www.visualsvn.com/server/download/安装参考网址:http://www.jb51.net/article/71815.htm----------------------------------------------..._安装visualsvn

使用wordpress搭建个人网站保姆级教程_wordpress建站-程序员宅基地

文章浏览阅读8.6k次,点赞7次,收藏97次。图文结合地介绍如何快速搭建一个自己的博客网站_wordpress建站

C语言嵌入式系统编程修炼之道——软件架构篇-程序员宅基地

文章浏览阅读2.4k次。 1.模块划分模块划分的“划”是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;_c语言嵌入式系统编程修炼之道

多线程 +1操作的几种实现方式,及效率对比_atomicinteger+1-程序员宅基地

文章浏览阅读8.8k次,点赞2次,收藏20次。比较LongAdder ,Atomic,synchronized 以及使用Unsafe类中实现的cas 和模拟Atomic,在多线程下的效率 ,见代码,放开对应注释,运行即可看到结果,通过更改线程数,可以查看不同并发情况下性能对比,通过更改循环执行次数,可以查看长时间或短时间持续并发情况下性能对比;测试服务器cpu 为i3-4170, 4核 3.7GHzimport java.lang.refl..._atomicinteger+1

【Linux】哪里学不会了?教你学习磁盘分区啦!小点声哈,别让其他人学会了!_armbian mklabel命令-程序员宅基地

文章浏览阅读2.6w次。过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!_armbian mklabel命令

随便推点

Swift编码规范_swift 正则判断文件类型-程序员宅基地

文章浏览阅读531次。参考API Design Guidelineshttps://swift.org/documentation/api-design-guidelines/swift-style-guidehttps://github.com/raywenderlich/swift-style-guide项目命名规范一、工程文件夹、文件目录结构【业务模块】1、文件夹采用下划线命名,名字全部小写下划线间隔,如module_login2、文件、类、结构体、枚举、协议采用大驼峰命名,每个单词首字母大写,如 MyCu_swift 正则判断文件类型

关于shell 中return用法解释(转)_shell return-程序员宅基地

文章浏览阅读2.2w次。1、return命令会使得一个函数返回.return命令会返回一个单一的数字参数, 而这个数字参数在调用这个函数的脚本中是可见的.如果没有指定返回参数,return在默认情况下会返回上一次命令的返回代码。2、了解一个概念:return value ﹗我们在 shell 下跑的每一个 command 或 function ,在结束的时候都会传回父行程一个值,称为 return value 。在 shell command line 中可用 $? 这个变量得到最"新"的一个 return value_shell return

Linux编译宏BUILD_BUG_ON_ZERO-程序员宅基地

文章浏览阅读834次。本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel”系列文章中),一来通过内核代码复习一下C语言及汇编语言的语法,二来学习内核开发大牛们书写代码的风格及思路。理解了上面之后,再来看看第二个BUILD_BUG_ON_NULL(e)宏,与第一个类似,-------------------------------------完--------------------------------_build_bug_on_zero

c51语言单片机打铃系统设计,基于单片机的自动打铃系统的设计-程序员宅基地

文章浏览阅读678次。//调用单片机头文件#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255#define uint unsigned int //无符号整型 宏定义 变量范围0~65535#include "eeprom52.h"#include "nongli.h"bit flag_2..._基于单片机的自动打铃控制系统设计提纲

在php中使用SMTP通过密抄批量发送邮件-程序员宅基地

文章浏览阅读550次。这几天,在整一个php在线邮件批量发送的程序来着。如果是一人一封一封发送的话,耗时又久又资源,抄送的话,收件人就会看到其他收件人了,这种时候,密抄就最是适合了。什么是抄送、密抄?抄送就是将一封邮件同时发给多个收件人,各收件人都可以看到其他收件人地址。抄送效果和平时发邮件时,用“,”将地址隔开的差不多密抄和抄送差不多,但是,各收件人都不可以看到其他收件人地址,换句话说,他收到这封..._smtp 密抄

python数据清洗+数据可视化_python课程题目数据清除与可视化-程序员宅基地

文章浏览阅读4.5k次,点赞6次,收藏49次。开发环境介绍anaconda- 集成环境:集成好了数据分析和机器学习所需要的全部环境- 注意:安装目录中不可以有中文和特殊符号jupyterjupyter就是anaconda提供的一个基于浏览器的可视化开发工具jupyter基本使用启动:在终端录入:jupyter notebook的指令,按下回车新建:python3: anaconda中的一个源文件cell有两个模式:code 和 markdown; 修改模式:m ,y(修改成code模式)添加c_python课程题目数据清除与可视化

推荐文章

热门文章

相关标签