爬虫-day02

上篇

1. requests 请求时设置请求头(重点)

在这里插入图片描述

注意:除了设置 User-Agent 请求头,也可以通过 headers 参数设置其他请求头。

2. requests 请求时携带查询参数(重点)

方式1:通过 params 参数设置请求时携带的查询参数

在这里插入图片描述

方式2:将请求时携带的查询参数直接放入 URL 地址中

在这里插入图片描述

3. GET 和 POST 请求的区别(了解)

GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或者其他敏感信息的时候决不能使用GET。POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

4. 使用代理的目的和代理分类

使用代理的目的

  • 让服务器以为是不同的客户端在请求
  • 防止我们的真实地址被泄露,防止被追究

代理的使用过程

在这里插入图片描述

5. requests 模块使用代理的基本语法(重点)

语法格式如下:

response = requests.get(url, proxies={})

proxies 参数接收的数据类型为字典。

字典的格式如下:

proxies = {
    "协议类型": "协议类型://代理IP地址:端口号"
}

例如:
proxies = {
  # 目标地址为 http 协议,会使用 http 这个 key 对应的代理服务
  "http": "http://113.121.255.26:9999",
  # 目标地址为 https 协议,会使用 https 这个 key 对应的代理服务
  "https": "https://219.151.157.130:3128"
}

6. 案例-使用代理请求唱吧网站(重点)

在这里插入图片描述

7. 爬虫中使用 Cookie 的原因

为了能够通过爬虫获取到登录后的页面,或者是解决通过cookie的反爬,需要使用request来处理cookie相关的请求

8. requests 请求携带 Cookie(重点)

方式1:设置 headers 请求头

在这里插入图片描述

方式2:传递 cookies 参数

在这里插入图片描述

下篇

1. requests 携带 Cookie(重点)

方式3:使用 requests.session 发送请求

在这里插入图片描述
在这里插入图片描述

2. 补充:将 cookie 字符串转换为 Python 字典(了解)

在这里插入图片描述

3. 补充:RequestsCookieJar和Python字典的互相转换(了解)

在这里插入图片描述

3. requests 处理网站证书错误(重点)

在这里插入图片描述

4. requests 设置 timeout 请求超时参数(重点)

在这里插入图片描述

5. retrying 重试模块的使用(重点)

基本使用

在这里插入图片描述

结合requests模块重试网络请求

在这里插入图片描述
在这里插入图片描述

6. 百度贴吧爬虫案例(重点)

案例需求

1)给定一个贴吧名字,给定要抓取的页数

2)将贴吧的每一页数据保存到 html 中

页面地址分析

李毅吧第一页:https://tieba.baidu.com/f?kw=李毅&pn=0
李毅吧第二页:https://tieba.baidu.com/f?kw=李毅&pn=50
李毅吧第三页:https://tieba.baidu.com/f?kw=李毅&pn=100
李毅吧第四页:https://tieba.baidu.com/f?kw=李毅&pn=150
李毅吧第五页:https://tieba.baidu.com/f?kw=李毅&pn=200
...

获取某个贴吧的第n页地址格式:
https://tieba.baidu.com/f?kw=贴吧名称&pn=(n-1)*50
# 步骤分析
# 1)让用户输入贴吧名称和要抓取的页数
# 2)构造出要抓取贴吧页面地址
# 3)遍历向每个地址发送请求,并将响应的内容保存成 html 页面

# 实现
import requests

# 1)让用户输入贴吧名称和要抓取的页数
tb_name = input('请输入贴吧名称:')
pages = int(input('请输入抓取页数:')) # str -> int
# print(tb_name, pages)

# 2)构造出要抓取贴吧页面地址
base_url = 'https://tieba.baidu.com/f?kw={}&pn={}'
# 列表推导式
url_list = [base_url.format(tb_name, i*50) for i in range(pages)]
# print(url_list)


# 3)遍历向每个地址发送请求,并将响应的内容保存成 html 页面
# 准备请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
# enumerate
for i, url in enumerate(url_list):
    print('请求第{}页'.format(i+1))
    # 发送请求
    response = requests.get(url, headers=headers)

    # 获取响应内容
    html_str = response.content.decode()

    # 将响应内容保存成 html 文件
    filename = '{}第{}页.html'.format(tb_name, i+1)
    with open(filename, 'w', encoding='utf8') as f:
        f.write(html_str)

    # 设置休眠,防止频率太快被阻止请求
    import time
    import random
    # random.uniform(1, 3):随机产生一个 1-3 范围内的小数
    time.sleep(random.uniform(1, 3))

print('文件保存完毕!!!')

7. 数据提取简介

认识xml

xml 是数据的一种存储形式

<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

常用的数据提取方法

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是方丈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值