前几天写的《Python实例:分析豆瓣影片评论Ver 1.0版本》文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了。忽然想到之前有写过关于关于使用selenium库的webdriver来模拟用户的操作。那今天不妨试试使用selenium来模拟用户使用浏览器登陆豆瓣吧。
首先需要导入的库有
import urllib.request
from selenium import webdriver
from PIL import Image
import re
import time
1
2
3
4
5
importurllib.request
fromseleniumimportwebdriver
fromPILimportImage
importre
importtime
定义登陆账号的url,还有输入账号信息
url = 'http://accounts.douban.com/login'
email = input('E-mail:')
password = input('Password:')
1
2
3
url='http://accounts.douban.com/login'
email=input('E-mail:')
password=input('Password:')
使用无窗口浏览器PhantomJS登陆:
browser = webdriver.PhantomJS()
browser.get(url)
1
2
browser=webdriver.PhantomJS()
browser.get(url)
通过
send_keys() 将账号和密码传入浏览器账号密码输入框:
browser.find_element_by_name('form_email').send_keys(email)
browser.find_element_by_name('form_password').send_keys(password)
1
2
browser.find_element_by_name('form_email').send_keys(email)
browser.find_element_by_name('form_password').send_keys(password)
获取验证码图片保存到本地并自动打开方便查看。需要注意的是,打开图片后,好像需要将图片关闭才能继续执行下一步,这个不知道是什么原因。不过好在,这没什么大碍。
captcha_link = browser.find_element_by_id('captcha_image').get_attribute('src')
urllib.request.urlretrieve(captcha_link,'captcha.jpg')
Image.open('captcha.jpg').show()
1
2
3
captcha_link=browser.find_element_by_id('captcha_image').get_attribute('src')
urllib.request.urlretrieve(captcha_link,'captcha.jpg')
Image.open('captcha.jpg').show()
填写图片验证码,然后将验证码传入:
captcha_code = input('Pls input captcha code:')
browser.find_element_by_id('captcha_field').send_keys(captcha_code)
1
2
captcha_code=input('Pls input captcha code:')
browser.find_element_by_id('captcha_field').send_keys(captcha_code)
模拟用户点击登陆按钮:
browser.find_element_by_name('login').click()
1
browser.find_element_by_name('login').click()
因为登录页登录成功后浏览器会自动跳转到豆瓣首页。所以可以通过这个逻辑判断是否登录成功:
if browser.current_url == 'https://www.douban.com/':
print('login success!')
print('Now jump to %s ...' % browser.current_url)
else:
print('login error!')
quit()
1
2
3
4
5
6
ifbrowser.current_url=='https://www.douban.com/':
print('login success!')
print('Now jump to %s ...'%browser.current_url)
else:
print('login error!')
quit()
以上。模拟登陆的步骤就算是完成了。当然,你也可以在期间
print 一些进度信息,告知用户当前程序执行的进度。
讲真,使用selenium的速度真心不行,如果不是特殊要求,实在是不建议使用这个方式登录。
不过它的好处就是,可以完美的实现用户所有的操作,速度虽然慢,但是数据全,不丢失。
文末,附上完整代码:
#coding:utf-8
import urllib.request
from selenium import webdriver
from PIL import Image
import re
import time
url = 'http://accounts.douban.com/login'
email = input('E-mail:')
password = input('Password:')
browser = webdriver.PhantomJS()
browser.get(url)
#get page source
#page_source = browser.page_source
#send account key
print('writing username and password...')
browser.find_element_by_name('form_email').send_keys(email)
browser.find_element_by_name('form_password').send_keys(password)
#get captcha link and save to local
print('saving captcha image...')
captcha_link = browser.find_element_by_id('captcha_image').get_attribute('src')
urllib.request.urlretrieve(captcha_link,'captcha.jpg')
Image.open('captcha.jpg').show()
captcha_code = input('Pls input captcha code:')
browser.find_element_by_id('captcha_field').send_keys(captcha_code)
print('login...')
browser.find_element_by_name('login').click()
time.sleep(3)
if browser.current_url == 'https://www.douban.com/':
print('login success!')
print('Now jump to %s ...' % browser.current_url)
else:
print('login error!')
quit()
# visit book tag url and get page source
book_tag_url = 'https://book.douban.com/tag/'
browser.get(book_tag_url)
page_source = browser.page_source
reg_tag = r'href=\"/tag/(.*?)\"'
tag_list = re.findall(reg_tag, page_source)
print(tag_list)
browser.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#coding:utf-8
importurllib.request
fromseleniumimportwebdriver
fromPILimportImage
importre
importtime
url='http://accounts.douban.com/login'
email=input('E-mail:')
password=input('Password:')
browser=webdriver.PhantomJS()
browser.get(url)
#get page source
#page_source = browser.page_source
#send account key
print('writing username and password...')
browser.find_element_by_name('form_email').send_keys(email)
browser.find_element_by_name('form_password').send_keys(password)
#get captcha link and save to local
print('saving captcha image...')
captcha_link=browser.find_element_by_id('captcha_image').get_attribute('src')
urllib.request.urlretrieve(captcha_link,'captcha.jpg')
Image.open('captcha.jpg').show()
captcha_code=input('Pls input captcha code:')
browser.find_element_by_id('captcha_field').send_keys(captcha_code)
print('login...')
browser.find_element_by_name('login').click()
time.sleep(3)
ifbrowser.current_url=='https://www.douban.com/':
print('login success!')
print('Now jump to %s ...'%browser.current_url)
else:
print('login error!')
quit()
# visit book tag url and get page source
book_tag_url='https://book.douban.com/tag/'
browser.get(book_tag_url)
page_source=browser.page_source
reg_tag=r'href=\"/tag/(.*?)\"'
tag_list=re.findall(reg_tag,page_source)
print(tag_list)
browser.quit()
喜欢 (2)赏分享 (0)