python-网络爬虫.Request

Request

python中requests库使用方法详解:

一简介:

        Requests 是Python语言编写,基于urllib,

        采用Apache2 Licensed开源协议的 HTTP 库。

        与urllib相比,Requests更加方便,处理URL资源特别流畅。

        可以节约我们大量的工作,建议爬虫使用Requests库。

二、安装Requests库 命令行方式:pip install requests

pycharm安装:

 

项目导入:import requests

requests库7个主要方法,13个关键字参数:

方法                                                          说明

requsts.requst()                                         构造一个请求,最基本的方法,是下面方法的支撑

        requsts.get()                           获取网页,对应HTTP中的GET方法

        requsts.post()                          向网页提交信息,对应HTTP中的POST方法

        requsts.head()                         获取html网页的头信息,对应HTTP中的HEAD方 法

        requsts.put()                            向html提交put方法,对应HTTP中的PUT方法

        requsts.patch()                         向html网页提交局部请求修改的的请求,

                                                        对应HTTP中的PATCH方法

        requsts.delete()                       向html提交删除请求,对应HTTP中的DELETE方法

三、基本用法:

        import requests

         response = requests.get('http://www.baidu.com')

        print(response.status_code)         # 打印状态码

        print(response.url)         # 打印请求url

         print(response.headers)         # 打印头信息

        print(response.cookies)         # 打印cookie信息

        print(response.text)         #以文本形式打印网页源码 返回的类 型是str

        print(response.content)         #以字节流形式打印 返回的类型是bytes         print(response.apparent_encoding)         #网站的编码格式

GET请求:

GET是通过URL方式请求,可以直接看到,明文传输。

response = requests.get('http://www.baidu.com')

GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、 动态数据展示(列表数据、详情数据等等)。

其中:利用返回值的 text 属性,可以得到请求的内容:

import requests

response = requests.get("http://www.baidu.com")

response.encoding = "utf-8" #中文显示

print(response.text)

我们终于将一个网页以程序方式自动获取到了。

偶尔我们还需要

带参数的 get() 方法1;

url = 'http://www.baidu.com/s?page=2' # 使用?携带参数

response = requests.get(url)

print(response.text)

带参数的 get() 方法2:

url = 'http://www.baidu.com/s' data= {'page': '2'}         #将携带的参数传给params

response = requests.get(url, params=data)

print(response.text)

有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错 如果想传递headers,可以利用headers参数: 只需要将一个dict传递给headers参数便可以定制headers import requests response = requests.get("https://www.zhihu.com/explore")

print(response.text)

POST请求

POST是通过header请求,可以开发者工具或者抓包可以看到,同样也是明 文的。

POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用 户、 或修改一个用户等

典型的写法如下:

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

对于POST请求,当我们传递参数的时候,一般是利用data这个参数,

直接 上代码:

         data = {

                'name': 'zhangsan' ,

                'age': 22, 'sex':

                '男'

         }

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

#print(response.text)                         #中文显示乱码

print(response.content.decode("unicode-escape"))

从输出结果中的“form”值来看传参数成功了,并由服务器返回给我们一个requests简单爬虫案例:

# 天气网西安地区爬虫案例

# -*- coding:utf-8 -*-
'''
@Author: 董咚咚
@contact: 2648633809@qq.com
@Time: 2023/7/31 14:59
@version: 1.0
'''
import requests
import lxml
from lxml import etree

class WeatherSpider:
    def __init__(self):
        self.url = "http://www.weather.com.cn/weather/101110101.shtml"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"}

    def get_url_content(self):
        return requests.get(self.url, headers=self.headers).content.decode()

    def get_weather_data(self, html):
        tmp_html = etree.HTML(html)
        tomorrow_doc = tmp_html.xpath("//div[contains(@class,'con') and contains(@class,'today')]//div[@class='c7d']/ul/li[2]")[0]
        weather_data = {}
        weather_data["date"] = tomorrow_doc.xpath("./h1/text()")[0]
        weather_data["weather"] = tomorrow_doc.xpath("./p[@class='wea']/@title")[0]
        weather_data["temperature_max"] = tomorrow_doc.xpath("./p[@class='tem']/span/text()")[0]
        weather_data["temperature_min"] = tomorrow_doc.xpath("./p[@class='tem']/i/text()")[0]
        weather_data["air_speed"] = tomorrow_doc.xpath("./p[@class='win']/i/text()")[0]
        return weather_data

def run(self):
 content_html = self.get_url_content()
 data = self.get_weather_data(content_html)
 print(data)

if __name__ == '__main__':
 spider = WeatherSpider()
 spider.run()

运行结果如下:

{'date': '18日(明天)' , 'weather': '多云转晴' , 'temperature_max': '24' , 'temperature_min': '10℃' , 'air_speed': '3-4级'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/57469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何消除浮动

第一种方法: 1、创建一个general.css文件: charset "utf-8"; .clearfix:after {content: "";display: block;clear: both;} /* flex */ .flex,.flexA,.flexB,.flexC {display: flex;flex-wrap: wrap;} .flexA {justify-content: space-aroun…

iPhone 6透明屏是什么?原理、特点、优势

iPhone 6透明屏是一种特殊的屏幕技术,它能够使手机屏幕变得透明,让用户能够透过屏幕看到手机背后的物体。 这种技术在科幻电影中经常出现,给人一种未来科技的感觉。下面将介绍iPhone 6透明屏的原理、特点以及可能的应用。 iPhone 6透明屏的原…

if语句实现成绩等级判断

if语句实现成绩等级判断 案例分析代码实现小结Time 案例分析 使用键盘输入一个成绩,然后通过if判断语句实现成绩等级的判断 代码实现 import java.util.Scanner;public class DetermineDemo {public static void main(String[] args) {Scanner scanner new Scanne…

服务器硬件、部署LNMP动态网站、部署wordpress、配置web与数据库服务分离、配置额外的web服务器

day01 day01项目实战目标单机安装基于LNMP结构的WordPress网站基本环境准备配置nginx配置数据库服务部署wordpressweb与数据库服务分离准备数据库服务器迁移数据库配置额外的web服务器 项目实战目标 主机名IP地址client01192.168.88.10/24web1192.168.88.11/24web2192.168.88…

ElasticSearch可视化管理工具之ElasticHD

推荐的五种客户端 1.Elasticsearch-Head , Elasticsearch-Head 插件在5.x版本之后已不再维护,界面比较老旧。 2.cerebro 据传该插件不支持ES中5.x以上版本。 3.kinaba 功能强大,但操作复杂,以后可以考虑。 4.Dejavu 也是一个 Elas…

vue 新学习 04 css样式绑定,渲染,key的重要意义

之前的html文件如何去绑定css样式&#xff1f; 01.首先在html文件中&#xff0c;在<head>标签中&#xff0c;用<style>中去写样式&#xff0c;通过html标签(每一个标签都有这样子的属性)中的class或者是id属性来完成<style>中的描绘的样式的用。 例子&#x…

语义分割文献整理

2014年文献 1.论文题目《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》 1.1.网络别名《DeepLabV1》 1.2.论文引用 Chen L C, Papandreou G, Kokkinos I, et al. Semantic image segmentation with deep convolutional nets and ful…

通过 CCIP 构建跨链应用(5 个案例)

Chainlink 的跨链互操作性协议&#xff08;CCIP&#xff09;是一种新的通用跨链通信协议&#xff0c;为智能合约开发人员提供了以最小化信任的方式在区块链网络之间传输数据和通证的能力。 目前&#xff0c;部署在多个区块链上的应用程序面临着资产、流动性和用户的碎片化问题…

【电源专题】电压查表法显示电量的原理与缺点

在文章:【电源专题】电量计估计电池荷电状态方法(开路电压法及库仑计法)的差别中我们讲到电量计估计荷电状态的方法。其中开路电压法实现方法较容易,可借着开路电压对应荷电状态查表而得到。 那么为什么能够使用电压查表法去预估电池容量呢?如下所示如果我们往一个有刻度…

LLM大模型——langchain相关知识总结

目录 一、简介LangChain的主要价值支柱简单安装 二、 LangChain的主要模块1.Model I/Oprompt模版定义调用语言模型 2. 数据连接3. chains4. Agents5. MemoryCallbacks 三、其他记录多进程调用 主要参考以下开源文档 文档地址&#xff1a;https://python.langchain.com/en/lates…

小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

一、概述 Docker持久化是指将容器中的数据持久保存在主机上&#xff0c;以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的&#xff0c;它们的文件系统默认是易失的&#xff0c;这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是&a…

LVDS端口ESD静电放电保护电路图(经典)

Low Voltage Differential Signaling&#xff08;LVDS&#xff09;是一种低压差分信号技术接口&#xff0c;是美国NS公司为克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS端口电路包括两部分&#xff1a;驱动板侧的…

3DEXPERIENCE用户角色 | Structural Mechanics Engineer 结构力学工程师

真实条件下实施复杂的线性和非线性分析 直观验证设计并更快地做出产品决策 Structural Mechanics Engineer 在基于云的 3DEXPERIENCE 平台上构建&#xff0c;您可对产品行为执行结构线性和非线性静态、低速和高速动态和热仿真。具备材料校准功能&#xff0c;有助于确保材料行为…

十分钟python入门 日期时间

1.Python 日期 Python 中的日期不是其自身的数据类型&#xff0c;但是我们可以导入名为 datetime 的模块&#xff0c;把日期视作日期对象进行处理。 1.1 导入 datetime 模块并显示当前日期&#xff1a; import datetime#导入 datetime 模块并显示当前日期&#xff1a; x da…

微信小程序接入腾讯云天御验证码

腾讯云新一代行为验证码&#xff08;Captcha&#xff09;&#xff0c;基于十道安全防护策略&#xff0c;为网页、APP、小程序开发者打造立体、全面的人机验证。在保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时&#xff0c;提供更精细化的用户体验。 …

在使用Python爬虫时遇到503 Service Unavailable错误解决办法汇总

在进行Python爬虫的过程中&#xff0c;有时会遇到503 Service Unavailable错误&#xff0c;这意味着所请求的服务不可用&#xff0c;无法获取所需的数据。为了解决这个常见的问题&#xff0c;本文将提供一些解决办法&#xff0c;希望能提供实战价值&#xff0c;让爬虫任务顺利完…

【问题随记】

ubuntu 14.04源更新(sources.list) deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-update…

MyBatis的使用方法

文章目录 一、MyBatis的创建准备工作 二、MyBatis的使用1.项目分层2.业务代码1&#xff09;使用XML的方法2&#xff09;直接使用注解 总结 一、MyBatis的创建 准备工作 1.添加依赖 旧项目 方法一&#xff1a;在pom.xml中添加MyBatis和MySQL Diver依赖 <!-- 添加 MyBati…

【Android】在AndroidStudio开发工具运行Java程序

在Android Studio开发工具中&#xff0c;Android系统开始就是用java语言开发的&#xff0c;还可以java代码来写程序&#xff0c;控制台&#xff0c;桌面应用&#xff0c;还可以写可调用的模块&#xff0c;这里讲一下创建Java程序步骤&#xff0c;方便入门java语言开发。 新建一…

批处理文件的@echo off是什么意思?

echo off 关闭回显 echo on 打开回显 echo off并不是DOS程序中的&#xff0c; 而是DOS批处理中的。 当年的DOS&#xff0c;所有操作都用键盘命令来完成&#xff0c; 当你每次都要输入相同的命令时&#xff0c; 可以把这么多命令存为一个批处理&#xff0c; 从此以后&#xff…