爬虫学习(三)

1.任务

  1. 安装selenium并学习;
  2. 使用selenium模拟登陆163邮箱;
  3. 学习什么是IP,为什么会出现IP被封,如何应对IP被封的问题。
  4. 抓取西刺代理,并构建自己的代理池

2.selenium

2.1 Selenium安装与学习

安装Selenium:

1.  pip install selenium或IDE辅助安装第三方库
2.  安装对应的浏览器驱动,如chrome,firefox,IE等
3.  将驱动文件放到浏览器文件夹下并添加到系统path中

Selenium模拟登陆步骤:

1. 利用浏览器驱动创建浏览器对象
browser=webdriver.Chrome()
2. get方法打开网页url
browser.get(url)
3.利用frame标签选择需要的frame
brows.switch_to.frame()
4.利用节点属性查找节点
find-element-by-id()
find-element-by-name()
find-element-by-xpath()
find-element-by-css-selector()
find-element-by-link-text()
find-element-by-partial-link-text()
find-element-by-tag-name()
find-element-by-class-name()
5.发送参数
send_keys()

2.2 Selenium模拟登陆

# coding = utf-8
from selenium import webdriver
import time
path = r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
driver = webdriver.Chrome(executable_path=path)
#设置浏览器驱动系统环境
url="https://mail.163.com"
driver.get(url)
time.sleep(3)
driver.switch_to.frame(0)
#找到邮箱账号登录框对应的iframe,0表示Index索引中第一个框架
name = driver.find_element_by_name("email")
#邮箱账号输入框
name.send_keys("163邮箱账号")
#将邮箱地址输入到邮箱账号框中
time.sleep(2)
name = driver.find_element_by_name('password')
#密码输入框
name.send_keys('163邮箱密码')
#输入邮箱密码
login = driver.find_element_by_id('dologin')
#登陆按钮
login.click()
#点击登陆按钮

3. IP和代理池

3.1 IP和封IP

IP
互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类,但是也有其他不常用的小分类。
IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。
A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是0,B类地址的前两位总是10,C类地址的前三位总是110。
封IP
网站可以对指定IP地址进行封禁,拒绝来自此IP地址的访问。
可能会引起封IP的行为有:
计算机或系统受到外部攻击,如DDOS
违反网站的安全策略,如爬虫访问频率过高
其他原因
代理池(proxy pool)
对于IP封禁的应对策略之一,构建与维护IP代理池,通过代理的IP地址来访问网站,可以采用下面链接里的IP
免费IP代理

3.2 代理池构建

爬取并验证网络代理的IP,存入自己的IP池

import requests, time
from bs4 import BeautifulSoup

def verify_IP(ip):
    proxies = {"http": ip}
    url = "http://www.baidu.com/"
    try:
        req = requests.get(url, headers=headers, proxies=proxies, timeout=3)
        if req.status_code == 200:
            return True
        else:
            return False
    except requests.RequestException as e:
        print("验证代理IP" + ip + "时发生如下错误 :")
        print(e)
        return False

headers = {
            "Connection": "keep-alive",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
                          "(KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, sdch",
            "Accept-Language": "zh-CN,zh;q=0.8"
        };
url = 'http://www.xicidaili.com/nn'
proxies={"HTTP":"121.61.1.67:9999"}
req = requests.get(url, headers=headers,proxies=proxies, timeout=3)
html = req.text
soup = BeautifulSoup(html, 'lxml')
ip_list = soup.find(id='ip_list').find_all('tr')
for i in range(1, len(ip_list)):
    ip_info = ip_list[i]
    tds = ip_info.find_all('td')
    ip = tds[1].text + ':' + tds[2].text
    # 验证ip是否可用
    if tds[5].text=="HTTP":
        if verify_IP(ip):
            # 可用ip写入文件
            print(ip)
            proxyfile = open("ip_records.txt", 'a', encoding="utf-8")
            proxyfile.write(ip + "\n")
            proxyfile.close()
            time.sleep(5)

4.参考资料

爬虫任务三
Selenium以及IP代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值