学习记录-Python爬虫 requests库的使用1

301 阅读3分钟

这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

过年期间嘛,节日快乐,天天开心 之前的几天,了解了urllib的基本用法,确实不太好使用,requests是对urllib的进一步封装,因此在使用上显得更加的便捷.好那就继续学这个更加强大的,request库

详细代码ref:code

安装request库

pip3 install requests 就这一行就行,不然就直接在pycharm引入,选择让它安装就好了

快速使用

requests的get方法

import requests

r = requests.get("https://wwww.baidu.com")
print(type(r))
print(r.status_code)

print(type(r.text))
print(r.text[:100])
print(r.cookies)

得到的结果:

<class 'requests.models.Response'>
200
<class 'str'>
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charse
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

可以看到,跟以前的urllib-urlopen那个方法要简单许多,直接就能拿到状态码啊,页面代码啊,感觉比urllib更强一步,确实越封装越好用

GET 请求

HTTP中最常见请求之一就是get请求

基本用法

import requests

r = requests.get("https://www.httpbin.org/get")
print(r.text)
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "www.httpbin.org", 
    "User-Agent": "python-requests/2.26.0", 
    "X-Amzn-Trace-Id": "Root=1-61f93837-57bb3b503a4f2a10700e0796"
  }, 
  "origin": "218.102.252.223", 
  "url": "https://www.httpbin.org/get"
}

这个网站可以看到请求的细节, 返回的结果中包含请求头,URL,IP等信息,其实我们在发送get请求的时候,会有参数,那么怎么怎么添加参数呢,在urllib这个库中,用了拼接参数的方法,requests怎么拼呢:

import requests

data = {
    "name":"flynt",
    "age":"24"
}
r = requests.get("https://www.httpbin.org/get",params=data)
print(r.text)

得到的响应:

import requests

data = {
    "name":"flynt",
    "age":"24"
}
r = requests.get("https://www.httpbin.org/get",params=data)
print(r.text)
{
  "args": {
    "age": "24", 
    "name": "flynt"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "www.httpbin.org", 
    "User-Agent": "python-requests/2.26.0", 
    "X-Amzn-Trace-Id": "Root=1-61f939fa-25549b256ce067d407d59200"
  }, 
  "origin": "218.102.252.223", 
  "url": "https://www.httpbin.org/get?name=flynt&age=24"
}

就我的理解,确实是封装的,跟urllib的用法真的是异曲同工之妙,但是不同的是,是JSON格式的,所以我们可以直接可以调用JSON方法比如:

print(r.json())

咱们得到的响应:

{'args': {'age': '24', 'name': 'flynt'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'www.httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61f93d3d-0d77b8c55f6eb3477087f602'}, 'origin': '218.102.252.223', 'url': 'https://www.httpbin.org/get?name=flynt&age=24'}

是不是一模一样,调用JSON方法可以将返回的结果转化为字典

需要注意,如果返回的结果不是JSON 那么就会出现解析错误 json.decoder.JSONDecodeError

抓取网页

我们去请求一个页面去试一下:

import re

import requests

r = requests.get("https://ssr1.scrape.center/")

patten = re.compile("<h2.*?>(.*?)</h2>",re.S)
# 这个是为了 如果你的结果为空的话,看看是正则表达式的问题,还是,请求的问题
#print(r.text)
titles = re.findall(patten,r.text)
print(titles)

得到的结果:

['霸王别姬 - Farewell My Concubine', '这个杀手不太冷 - Léon', '肖申克的救赎 - The Shawshank Redemption', '泰坦尼克号 - Titanic', '罗马假日 - Roman Holiday', '唐伯虎点秋香 - Flirting Scholar', '乱世佳人 - Gone with the Wind', '喜剧之王 - The King of Comedy', '楚门的世界 - The Truman Show', '狮子王 - The Lion King']

不要问我正则表达式咋写的,还没学到呢 目前这样就完成了提取所有的电影标题 OK,今天就学到这了