DAY02

DAY02

一. 批量下载图片

import requests
import json

for i in range(1, 10):
    URL = 'https://api.ixiaowai.cn/api/api.php?return=json'
    resp = requests.get(url=URL)
    resp.encoding = 'utf-8-sig'
    # print(resp.text)
    # 序列化
    data = json.loads(resp.text)
    # print(data)
    
    # 每次循环(更新)此链接中的图片都会改变
    resp_1 = requests.get(url=data['imgurl'])
    # print(resp_1.content)

    # 'wb':写的数据类型是二进制
    with open(f'imgs/{i}.jpg', 'wb') as f:
        f.write(resp_1.content)

二. 正则表达式匹配页面内容

"""
<li><div class="dd_lm">[<a href=/society.shtml>社会</a>]
</div> <div class="dd_bt"><a href="/sh/2022/05-10/9750566.shtml">
一人阳性整栋楼都要集中隔离?上海疾控释疑密接、次密接判断标准</a></div>
<div class="dd_time">5-10 10:29</div></li>
"""


li_re = '<li><div class="dd_lm">\[<a href=.*\.shtml>([\u4e00-\u9fa5]{2})' \
        '</a>\]</div> <div class="dd_bt"><a href="(.*\.shtml)">(.*)</a></div>' \
        '<div class="dd_time">(\d{1,2}-\d{1,2} \d\d:\d\d)</div></li>'
result1 = re.findall(li_re, resp.text)

PS:从json接口获取的数据需要序列化将json数据(str)转化为python数据(dict),网页爬取数据类型为字符串类型

URL = 'https://api.ixiaowai.cn/api/api.php?return=json'
resp = requests.get(url=URL)
print(type(resp.text))    # <class 'str'>

data = json.loads(resp.text)
print(type(data))   # <class 'dict'>

三. 豆瓣电影爬虫

# 正则表达式匹配电影名和链接
# .*?  表示换行,并用 flags=re.S 单行匹配,解决网页源代码中换行的问题
href_re = '<div class="hd">.*?<a href="(.*?)" class="">.*?<span class="title">(.*?)</span>'
# re.S --> 单行匹配
result = re.findall(href_re, response1.text, flags=re.S)

四. 进度条

# tqdm:三方的进度条模块
from tqdm import tqdm

# 有进度条不能有print、有print不能有进度条
# tqdm()操作对象:可迭代对象。

for i in tqdm(range(1, 100000001), desc='进度条........'):
    pass
    

在这里插入图片描述

五. 代理IP使用

  • 客户端和服务器之间通过网络进行通信。为什么客户端能够正确的找到服务器、服务器也能够正确的找到客户端,涉及到网络中的IP地址。在同一个网络下IP地址是唯一的。
  • 代理ip等于客户端和目标服务器之间的中间商。
    我们通过中间商访问目标服务器,等于我们将需求告诉中间商,中间商根据需求访问目标服务器,目标服务器的响应结果再一层一层的返回给我们。
  • 代理IP池:包含了N个代理ip。
  • 常见的代理IP提供商:极光爬虫代理、芝麻代理、蘑菇代理、西刺代理等。
import requests
import json

# 请求API接口获取代理ip
# 1.从代理IP提供商得到的json接口
API_url = 'http://d.jghttp.alicloudecs.com/getip?num=10&type=2&pro=&city=0&yys=0&port=1&time=4&ts=0&ys=0&cs=0&lb=1&sb=0&pb=45&mr=1&regions='


# 2.对保存了代理IP的json数据序列化
ip_data_list = json.loads(resp.text)['data']

# 3.拼接成 IP地址:端口号
ip_port_list = [f'{i["ip"]}:{i["port"]}' for i in ip_data_list]
print(ip_port_list)

# 4.构造代理ip需要的字典
proxy = {
    # 表示将一个代理ip拼接上它应该走的协议
    'http': f'http://{ip_port_list[0]}',
    'https': f'http://{ip_port_list[0]}'
}



Headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
}
resp = requests.get(url=API_url, headers=Headers)
print(resp.text)
URL = 'https://movie.douban.com/top250?start=0&filter='

# 5.添加代理IP参数
resp = requests.get(url=URL, headers=Headers, proxies=proxy)

if resp.status_code == 200:
    print(resp.text)
else:
    print(resp.status_code)
.get(url=URL, headers=Headers, proxies=proxy)

if resp.status_code == 200:
    print(resp.text)
else:
    print(resp.status_code)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值