Datawhale 爬虫组队学习 Task 3

 Task 3:

3.1 安装selenium并学习

 

1、安装selenium并学习。

2、使用selenium模拟登陆163邮箱。

 

  • 安装Selenium

Selenium是个自动化测试工具,也课用来解决动态网页的加载和渲染问题。Selenium可以驱动浏览器模拟人的操作,支持各种浏览器,包括Chrome、Safari、firefox等主流界面式浏览器。

Selenium库不是Python标准库,使用前需要安装,可以使用pip来安装,具体安装方式为

pip install selenium

这样Selenium就安装完成了。Selenium需要配合Chrome浏览器使用,并且需要驱动浏览器的Chromedriver驱动程序。

  • Chromedriver的安装和环境变量的设置

下载的Chromedriver的版本需要和操作系统对应,而且还要与使用的Chrome浏览器版本对应(若还没有安装浏览器,请先自己下载浏览器),有关Chromedriver版本与chrome浏览器版本对应的问题以及Chromedriver驱动的下载地址,可以参考以下链接:https://www.cnblogs.com/qingqing-919/p/9055285.html

如何查看自己的Chrome浏览器版本

打开浏览器,点击网页右上角三个点,然后点帮助,关于Google Chrome,之后就会出现浏览器的版本。

Chromedriver如何配置环境变量

下载完Chromedriver,若直接调用,程序会报错。在调用之前要进行环境变量配置。

1、首先下载完的Chromedriver是一个压缩包,解压得到Chromedriver.exe。将这个文件放到Python里面的Script文件中,复制文件地址。

2、计算机>属性>高级系统设置>环境变量>在系统变量里新建一个变量:变量名为path,变量值为第一步所复制的地址。

通过以上步骤就配置好了Chromedriver的环境配置。

  • 模拟登陆163.邮箱

用以下代码实现:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get('https://mail.163.com/ ')

time.sleep(10) #防止响应过慢,xpath抓取不到内容;事件之间通常要加

browser.switch_to.frame(0) #找到邮箱账号登录框对应的iframe,由于网页中iframe的id是动态的,所以不能用id寻找

email = browser.find_element_by_name('email')
email.clear()
email.send_keys('*****')   #输入邮箱账号

password = browser.find_element_by_name('password')
password.clear()
password.send_keys('******')   #输入邮箱密码

login_em = browser.find_element_by_id('dologin') #找到登陆按钮
login_em.click()    #点击登陆按钮

time.sleep(10)

3.2 学习IP相关知识

1、学习什么是IP,为什么会出现IP被封,如何应对IP被封的问题。

2、抓取西刺代理,并构建自己的代理池。

3、西刺直通点:https://www.xicidaili.com/ 

 

  • 什么是IP

互联网协议地址(Internet Protocol Address,又译为网际协议地址),是分配给用户上网使用的网际协议的设备的数字标签。

  • IP被封

网站自身设有反爬虫机制,对于同一个IP地址的大量同类型访问,会封锁IP。

  • 如何应对IP被封

采用代理IP

  • 构建自己的代理池

import requests
import pandas as pd
from tqdm import tqdm


class Proxies(object):

   def __init__(self, ):
       url = 'https://www.xicidaili.com/nn/'
       r = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
       self.ips = pd.read_html(r.text, header=0)[0][['IP地址', '端口']].values

   @property
   def pool(self):
       proxies = []
       for i in tqdm(self.ips):
           proxy = self._get_valid_proxies(i)
           if proxy:
               proxies.append(proxy)
       return proxies

   def _get_valid_proxies(self, ip):
       try:
           requests.adapters.DEFAULT_RETRIES = 3
           host, port = ip  # random.choice(ips)
           proxies = {"http": "http://%s:%s" % (host, port)}
           r = requests.get("http://icanhazip.com/", timeout=8, proxies=proxies)
           if host == r.text.strip():
               # print('代理有效:%s' % proxies)
               return proxies
           else:
               print("pass")  # 代理无效
       except:
           print("pass")


if __name__ == '__main__':
   pool = Proxies().pool
   print(pool)

Reference:https://mp.weixin.qq.com/s?__biz=MzI5OTQxNTQ4Ng==&tempkey=MTAwOV9kTW1vazdGKzNUYXNmWEdyM2NnTnFOejhJS0E4Y1pKc2NZajFWakpYOG5aT0tVb1ZQN20zbk1Xa0VraG12UUlFaVlzeWI1cHBHZEJaZFNXMXAwT2EyUjdWQmtucjd6elJUTWVQSnhFcG5hUUJGQjJEWWY4VFpZbTF3b1JnMS13UmUxNW9ialFmNGVhNVdZbW11bU5KR2ljTGRZWWhacU1xUHZXNFJBfn4%3D&chksm=6c97a38a5be02a9cfcbed0951a7e2ea7dea5a02f28b507baea875569f2e0301ace0065245853&mpshare=1&scene=1&srcid=0515FSlo2gKSEjVMITDesiHc#wechat_redirect

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值