代理池搭建、代理池使用、爬取某视频网站、爬取新闻

代理池搭建

ip代理

  • 每个设备都会有自己的IP地址
  • 电脑有ip地址 ⇢ \dashrightarrow 访问一个网站 ⇢ \dashrightarrow 访问太频繁 ⇢ \dashrightarrow 封ip
  1. 收费:靠谱稳定 ⇢ \dashrightarrow 提供api
  2. 免费:不稳定 ⇢ \dashrightarrow 自己写api用
    • 开源的:https://github.com/jhao104/proxy_pool
    • 免费代理 ⇢ \dashrightarrow 爬取免费代理 ⇢ \dashrightarrow 验证 ⇢ \dashrightarrow 存到redis中
    • flask搭建web ⇢ \dashrightarrow 访问某个接口,随机获取ip

搭建步骤

  1. git clone:[email protected]:jhao104/proxy_pool.git

  2. pycharm中打开

  3. 安装依赖:创建虚拟环境 pip install -r requirements.txt

  4. 修改配置文件: DB_CONN = 'redis://127.0.0.1:6379/0'

  5. 运行调度程序和web程序

    • 启动调度程序:python proxyPool.py schedule
    • 启动webApi服务:python proxyPool.py server
  6. api介绍
    启动web服务后,默认配置下会开启http://127.0.0.1:5010api接口服务

    api method Description params
    / GET api介绍 None
    /get GET 随机获取一个代理 可选参数: ?type=https 过滤支持https的代理
    /pop GET 获取并删除一个代理 可选参数: ?type=https 过滤支持https的代理
    /all GET 获取所有代理 可选参数: ?type=https 过滤支持https的代理
    /all GET 获取所有代理 可选参数: ?type=https 过滤支持https的代理
    /count GET 查看代理数量 None
    /delete GET 删除代理 ?proxy=host:ip

http和https代理
- 以后使用http代理访问http的地址
- 使用https的代理访问https的地址

代理池使用

搭建django后端测试

步骤
  1. 写个django,只要访问,就返回访问者ip
  2. 部署在公网上 ⇢ \dashrightarrow python manage.py runserver 0.0.0.0:8000
  3. 本机使用代理测试
    import requests
    res = requests.get('http://192.168.1.252:5010/get/?type=http').json()['proxy']
    proxies = {
        'http': res,
    }
    print(proxies)
    # 我们是http 要使用http的代理
    respone = requests.get('http://139.155.203.196:8080/', proxies=proxies)
    print(respone.text)
    
补充

代理有 透明和高匿
透明的意思:使用者最终的ip是能看到的
高匿:隐藏访问者真实ip,服务端看不到


爬取某视频网站

目标:爬取该网站的视频,保存到本地 https://www.pearvideo.com/

请求地址是:https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0

import requests
import re

res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')

# 解析出视频地址---》正则
video_list = re.findall('', res.text)

for video in video_list:
    video_id = video.split('_')[-1]
    url = 'https://www.pearvideo.com/' + video
    header = {
        'Referer': url
    }
    res_json = requests.get(f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.14435938848299434',
                            headers=header).json()
    mp4_url = res_json['videoInfo']['videos']['srcUrl']
    real_mp4_url = mp4_url.replace(mp4_url.split('/')[-1].split('-')[0], 'cont-%s' % video_id)

    # 把视频保存到本地
    res_video = requests.get(real_mp4_url)
    with open('./video/%s.mp4' % video_id, 'wb') as f:
        for line in res_video.iter_content(1024):
            f.write(line)

爬取新闻

import requests
from bs4 import BeautifulSoup

res = requests.get('https://www.autohome.com.cn/news/1/#liststart')

# 找到页面中所有的类名叫article  ul标签
soup = BeautifulSoup(res.text, 'html.parser')
# bs4的查找
ul_list = soup.find_all(class_='article', name='ul')

for ul in ul_list:
    li_list = ul.find_all(name='li')
    for li in li_list:
        h3 = li.find(name='h3')
        if h3:
            title = h3.text
            url = 'https:' + li.find(name='a')['href']
            desc = li.find(name='p').text
            reade_count = li.find(name='em').text
            img = li.find(name='img')['src']
            print(f'''文章标题:{title}
            文章地址:{url}
            文章摘要:{desc}
            文章阅读数:{reade_count}
            文章图片:{img}''')

你可能感兴趣的:(爬虫,python,爬虫)