爬虫day3

4 篇文章 0 订阅
3 篇文章 0 订阅

摘要
各位大家好今天要介绍的是Selenium自动化测试模块以及什么是代理池,首先简单的说一下Selenium,在我的理解中Selenium可以模拟使用者的动作去开启网页进行账号登陆的动作目前我的应用场景有自动论坛发文,自动登录特定网站,selenium刚开始是为了作测试而生的,但是后来被用来模拟浏览器登录以及高级爬虫例如爬取动态加载的内容,详细可以参考官方文档,再来我们说说什么是代理池,先说说我应用代理池的场景吧!在某个项目里面我需要去使用requests下载指定的pdf,但是如果同一个IP请求过多次就会出现IP被封的情况,在这种情况下我们就可以通过代理池来完成获取代理并且每次都用不同的代理IP 去完成下载的动作,根据这各网站的介绍我们可以看到使用代理的原因以及各种代理的差异如下

随着互联网的迅猛发展,爬虫工作日益重要,而爬虫工作者一般都绕不过代理IP这个问题,为什么呢,这是因为在网络爬虫抓取信息的过程中,抓取频率高过了目标网站的设置阀值,将会被禁止访问。那么这个问题如何解决呢,其实也很简单,那就是使用代理IP。那么代理IP哪里来呢?一般获取代理IP的方式有以下三种,让我们一起来看看。

第一种:自己搭建服务器,这种代理IP优点是效果最稳定,时效和地区可控,完全可以按照自己的要求来搞,完美匹配。然而缺点也最明显,那就是需要爬虫爱好者有一定能力维护代理服务器,需要花费大量维护时间,并且成本投入非常高。

第二种:使用免费代理IP,这种代理IP可谓到处都是,最大的优点是免费,不用花钱。缺点就多了,IP不稳定,速度慢,经常掉线,IP通过率也不高,总之你需要大量时间去挨个试,看似免费,其实昂贵,因为需要浪费大量时间成本,效率十分低下,不适合爬取数据量大的企业级用户。

第三种使用收费代理IP,这种代理IP需要一定的花费,成本没有第一种方案贵,要便宜很多,也不用自己去维护代理服务器;IP比较稳定,速度比较快,有效率比较高,但也比不上第一种方案的完美匹配,十分适合企业级用户。缺点则是代理IP商太多,花钱了不一定能选到好的代理IP服务商。
好接下来进入实作的部份
实作
需求如下:
1.使用selenium模拟登陆163邮箱。
2.抓取西刺代理,并构建自己的代理池。
代码如下
第一个函数是完成需求1
第二个函数是获取代理池
第三个函数是使用代理的范例

import time
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import random


class Selenium_test:
    def __init__(self):
        pass

    def selenium_get163(self, id, pwd):
        # option = webdriver.ChromeOptions()#不显示chrome 执行的的画面
        # option.add_argument('headless')#
        drive = webdriver.Chrome()  # chrome_options=option )  # chrome_options=option

        tag = drive.get("https://mail.163.com/")
        drive.switch_to.frame(0)
        user_ID = drive.find_element_by_name('email')

        user_PWD = drive.find_element_by_name('password')
        user_ID.send_keys(id)
        print('put id')
        user_PWD.send_keys(pwd)
        print('put pwd')
        time.sleep(3)
        print('sleep 3 s')
        login = drive.find_element_by_id('dologin')
        login.click()
        time.sleep(10)
        print('finish selenium  and sleep 10s ')

    def get_proxy(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
        }

        req = requests.get('https://www.xicidaili.com/nt', headers=headers)

        soup = BeautifulSoup(req.text, 'lxml')
        tags = soup.find_all('tr', attrs={'class': 'odd'})
        proxy_list = []
        for t in tags:
            ip_info = t.text.split()
            proxy_list.append(ip_info[0] + ':' + ip_info[1])
        print('total proxy is %s ' % (len(proxy_list)))
        return proxy_list

    def use_proxy(self):
        proxy = self.get_proxy()
        ip = random.choice(proxy)
        try:
            req = requests.get('https://arxiv.org/pdf/1903.08817', timeout=60, proxies={'https': ip})
            print('use ip %s' % ip)
        except:
            req = requests.get('https://arxiv.org/pdf/1903.08817', timeout=60, proxies={'http': ip})
            print('use ip %s' % ip)
        print(req.status_code)


selenium_demo = Selenium_test().selenium_get163(id=1234, pwd=456)
proxy_demo = Selenium_test().use_proxy()

selenium 的延伸应用 登陆某游戏的官方论文进行自动推文的动作代码如下

from selenium import webdriver
import time
key = int(input('歡迎使用POE論壇市集小助手 請選擇 1 執行 2結束>>>>> '))
if key ==1:
    users_ID = input('輸入帳號>>>>>> ')
    users_PWD = input('輸入密碼>>>>> ')
    tage_website = input('輸入目標網站>>>>> ')

    runtime = int(input('請輸入執行間隔時間(以小時為間隔單位推薦 1~~12)>>> '))
    runtime=runtime*60*60 # 將執行時間改為小時
    while True:
        print('執行開始', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
     #設定driver
        option = webdriver.ChromeOptions()
        option.add_argument('headless') 
        drive = webdriver.Chrome(chrome_options=option)# 这里是让selenium 在DOS 视窗下执行的设定 详细可以参考官方
    # 設定網站參數
        link = drive.get('https://auth.garena.com/oauth/login?client_id=200002&redirect_uri=https%3A%2F%2Fweb.poe.garena.tw%2Fl'
					 'ogin%2Fgarena-oauth&state=tN3cXtNUwLb-8jHmWDz_SBj63IeF7vFf44xNJhp0&scope=&response_type=code&locale=zh-TW')#官方登陸網站
        user_ID = drive.find_element_by_xpath('//*[@id="sso_login_form_account"]')
        user_PWD = drive.find_element_by_xpath('//*[@id="sso_login_form_password"]')
        user_ID.send_keys(users_ID)
        user_PWD.send_keys(users_PWD)
        print('執行中...')
        time.sleep(1)

        chick_login = drive.find_element_by_xpath('//*[@id="confirm-btn"]').click()
        print('執行中....')
        time.sleep(3)


        link2 = drive.get(tage_website) # 目標貼文網站
        chick_re_btn = drive.find_element_by_css_selector("a.button1.important").click()

        re_write = drive.find_element_by_xpath('//*[@id="content"]')
        re_write.send_keys('123')
        doing = drive.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/div[1]/div[2]/form/div[2]/input[1]').click()
        drive.close()
        print('執行結束', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

        time.sleep(runtime)
else:
    print('您選擇了2 程結束')

注意如果你是使用 linux 环境来使用 selenium 请先参考这各网站的教学完成 配置

如果你是WINDOWS 环境 那么只要将chromedriver.exe 放在你项目的同级文件夹下就好

加粗样式

chromedriver 下载地址 http://chromedriver.chromium.org/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值