失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python3爬虫实战(二):使用selenium模拟登陆163邮箱和抓取西刺代理并构建自己的代理池

python3爬虫实战(二):使用selenium模拟登陆163邮箱和抓取西刺代理并构建自己的代理池

时间:2019-08-25 04:27:54

相关推荐

python3爬虫实战(二):使用selenium模拟登陆163邮箱和抓取西刺代理并构建自己的代理池

安装selenium并学习

1.安装selenium并学习

1.1selenium介绍:

selenium是一款支持多种语言、多种浏览器和多个平台的开源web自动化测试软件,测试人员可以用python、java等语言编写自动化测试脚本,使得浏览器可以完全按照脚本运行,大大节省测试人员用鼠标点击测试浏览器的时间。

1.2安装selenium和chromedriver:

安装selenium非常简单,可以用pip或conda,由于本人的python环境在Anaconda下,所以采用conda安装selenium,命令如下:

conda install selenium

chromedriver是Chrome浏览器的webdriver,只有安装了chromedriver,才能使用selenium.webdriver打开Chrome浏览器,Mac下安装chromedriver的方法:

首先查看Chrome浏览器版本:

然后进入/mirrors/chromedriver/下载对应版本的chromeddriver

1.3测试selenium

from selenium import webdriverbrowser=webdriver.Chrome()#打开谷歌浏览器browser.get("")#打开百度网址browser.find_element_by_id("kw").send_keys("selenium")#定位到输入框并输入关键字browser.find_element_by_id("su").click()#定位到搜索框并点击搜索browser.maximize_window()#最大化浏览器窗口browser.set_window_size(480,800)#设置浏览器窗口尺寸browser.forward()#浏览器前进browser.back()#浏览器后退 browser.close()#浏览器关闭browser.quit()#浏览器退出

输入以上代码,如果可以进行以上操作则selenium安装成功。

2.使用selenium模拟登陆163邮箱

使用selenium模块可以让浏览器完全按照脚本运行,需要注意的点是邮箱账号登陆框对应在iframe标签中,想要定位查找账号输入元素,需要使用selenium提供的switch_to.frame()方法切换进入frame标签中,对应代码在这里:code

from selenium import webdriverimport time#打开谷歌浏览器browser=webdriver.Chrome()#打开百度网页browser.get("")#最大化浏览器窗口browser.maximize_window()#通过id属性寻找单个元素browser.find_element_by_id("lbNormal").click()#切换到iframe子页面browser.switch_to.frame(0)#通过name属性寻找单个元素browser.find_element_by_name("email").send_keys("gaoyangainiyibeizi")browser.find_element_by_name("password").send_keys("199456")#通过id属性寻找单个元素browser.find_element_by_id("dologin").click()time.sleep(10)

成功进入163邮箱:

PS:163邮箱直通点:

/ 。

2 学习IP相关知识

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

对于同一个IP在一段时间内具有大量同类型的访问,这个IP就会被封。

如何应对IP被封

有几种套路:

1.使用本机ip并修改请求头(主要修改用户代理User-Agent),模拟真实用户向浏览器访问web;

2.使用代理IP并轮换访问;

3.使用本机ip设置访问时间间隔;

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

目的:发送请求时使用代理ip并轮换访问,防止自己的ip被封

将验证可用的代理ip保存到文件中,供今后使用。

代码如下:

import requestsfrom bs4 import BeautifulSoup as bsdef get_html(url):headers={'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) 'r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3','Referer': r'','Connection': 'keep-alive'}#通用代码框架try:response=requests.get(url,headers=headers)#不是200抛出异常:HTTPError,是200返回Noneresponse.raise_for_status()response.encoding=response.apparent_encodingreturn response.textexcept:return "产生异常"def get_ip(text):#beautifulsoup的元素定位方法:find()、find_all()、select()ip_list=[]soup=bs(text,'html.parser')proxy_ips=soup.find(id='ip_list').find_all('tr')for proxy_ip in proxy_ips:if (len(proxy_ip.select('td'))>=8):ip=proxy_ip.select('td')[1].textport=proxy_ip.select('td')[2].textprotocol=proxy_ip.select('td')[5].textif protocol in ('HTTPS','HTTP'):#用大括号{}表示被替换的字段ip_list.append(f'{protocol}://{ip}:{port}')return ip_listdef check_ip(ip):url=''headers={'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) 'r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3'}try:proxies={}#startswith(str):检查字符串是否以指定子字符串开头if ip.startswith('HTTPS'):proxies['https']=ipelse:proxies['http']=ip#检查代理ip是否可用#timeout用作设置响应时间,响应时间包括连接时间和读取时间response=requests.get(url,headers=headers,proxies=proxies,timeout=10)#抛出异常response.raise_for_status()response.encoding=response.apparent_encodingif response.status_code==200:print("有效ip:"+ ip)with open('valid_proxy_ip.txt','a') as f:f.writelines(ip)return Trueelse:print("无效ip:"+ ip)return Falseexcept:print("无效ip: " + ip)return Falseif __name__=='__main__':url='/'html=get_html(url)ips=get_ip(html)#print(ips)#print(len(ips))ip_use_list=[]for ip in ips:result=check_ip(ip)if(result):ip_use_list.append(result)print("有效代理ip:")print(ip_use_list)

最终运行结果如下:

有效的ip保存在valid_proxy_ip.txt文件中:

PS 3.西刺直通点:

/

如果觉得《python3爬虫实战(二):使用selenium模拟登陆163邮箱和抓取西刺代理并构建自己的代理池》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。