day20-Spider02

1. 批量下载图片作业

import requests
import json

for x 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,type(resp.text))
    # 序列化
    data = json.loads(resp.text)
    # print(data)
    resp1 = requests.get(url=data['imgurl'])
    # print(resp1.content)

    with open(f'imgs/{x}.jpg', 'wb') as f:
        f.write(resp1.content)

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

import requests
import re
import csv

# 打开文件
f = open('中国新闻网.csv', 'w', encoding='utf-8', newline='')
# 将csv中的写方法赋给一个变量
writer = csv.writer(f)
# 写入标题
writer.writerow(['新闻类型', '新闻链接', '新闻标题', '新闻时间'])

for i in range(1, 11):
    # f'{i}' -> f-字符串、格式化字符串字面值
    URL = f'https://www.chinanews.com.cn/scroll-news/news{i}.html'
    Headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36 Edg/101.0.1210.39'
    }
    resp = requests.get(url=URL, headers=Headers)
    if resp.status_code == 200:
        resp.encoding = 'utf-8'
        # print(resp.text, type(resp.text))
        """
        
  • 5-10 10:29
  • """
    li_re = '
  • ' \ '
    (\d{1,2}-\d{1,2} \d\d:\d\d)
  • '
    result1 = re.findall(li_re, resp.text) # print(len(result1)) # 对链接拼接,写入csv for i in result1: list1 = [] for j in range(len(i)): if j == 1: href = 'https://www.chinanews.com.cn' + i[j] list1.append(href) else: list1.append(i[j]) # 写入内容 writer.writerow(list1) else: print(resp.status_code) # 关闭文件 f.close() print('写入完成')

    3. 豆瓣电影爬虫

    import requests
    import re
    import time
    from tqdm import tqdm
    import csv
    
    # 获取每个电影的链接,然后进入链接获取更多详情信息。
    # https://movie.douban.com/top250
    writer = csv.writer(open('豆瓣电影.csv', 'a', encoding='utf-8', newline=''))
    writer.writerow(['电影链接', '电影名称'])
    
    
    def requests_url(href):
        Headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
        }
        resp = requests.get(url=href, headers=Headers)
        if resp.status_code == 200:
            return resp
        else:
            return resp.status_code
    
    if __name__ == '__main__':
        # for i in tqdm(range(10), desc='豆瓣电影爬虫'):
        for i in range(10):
            URL = f'https://movie.douban.com/top250?start={25 * i}&filter='
            # print(URL)
            response1 = requests_url(URL)
            # print(response1.text)
            # 正则表达式匹配电影名和链接
            href_re= '

    4. 进度条

    from tqdm import tqdm
    
    # tqdm:三方的进度条模块
    # 有进度条就不能有print、有print不能有进度条
    # tqdm()操作对象:可迭代对象
    
    for i in tqdm(range(1,1000000001), desc='进度条...'):
        pass
    

    5. 代理ip使用

    # 代理ip
    """
    客户端和服务器之间通过网络进行通信。为什么客户端能够正确的找到服务器、服务器也能够
    正确的找到客户端,涉及到网络中的IP地址。在同一个网络下IP地址是唯一的。
    """
    
    """
    代理ip等于客户端和目标服务器之间的中间商。
    我们通过中间商访问目标服务器,等于我们将需求告诉中间商,中间商根据需求访问目标服务器,
    目标服务器的响应结果再一层一层的返回给我们。
    
    代理IP池:包含了N个代理ip。
    """
    # 常见的代理IP提供商:极光爬虫代理、芝麻代理、蘑菇代理、西刺代理等。
    import requests
    import json
    
    # 请求API接口获取代理ip
    
    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®ions='
    
    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)
    # 对保存了代理IP的json数据序列化
    ip_data_list = json.loads(resp.text)['data']
    # for i in ip_data_list:
    #     # 需要将代理ip拼接成:ip:port
    #     ip_port = f'{i["ip"]}:{i["port"]}'
    #     print(ip_port)
    
    ip_port_list = [f'{i["ip"]}:{i["port"]}' for i in ip_data_list]
    print(ip_port_list)
    
    # 构造代理ip需要的字典
    proxy = {
        # 表示将一个代理ip拼接上它应该走的协议
        'http': f'http://{ip_port_list[0]}',
        'https': f'http://{ip_port_list[0]}'
    }
    URL = 'https://movie.douban.com/top250?start=0&filter='
    resp = requests.get(url=URL, headers=Headers, proxies=proxy)
    if resp.status_code == 200:
        print(resp.text)
    else:
        print(resp.status_code)
    

    你可能感兴趣的:(python语言基础,python学习,python,爬虫,数据挖掘)