python-网络爬虫.Request

Request

python中requests库使用方法详解:

一简介:

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

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

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

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

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

pycharm安装:

python-网络爬虫.Request_第1张图片

 

项目导入: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)

python-网络爬虫.Request_第2张图片

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: [email protected]
@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级'}

你可能感兴趣的:(python,爬虫,开发语言)