selenium自动登录和爬取信息
今天,我们引入selenium(web的自动化测试工具)来实现自动登录,我们要登录的是京东,并获取京东上面商品和图片的网址
- 什么是selenium?
selenium是web自动化测试工具,它可以直接运行在浏览器上,它支持所有主流的浏览器(包括Chromedriver等有界面的浏览器和PhantomJS这些无界面的浏览器),可以接收命令,让浏览器自动加载页面,获取需要的数据,甚至可以页面截屏 - selenium的安装(pip install selenium)
- 下载PhantomJS(无界面浏览器),下载网址为http://phantomjs.org/download.html
- 下载Chromedriver(有界面的浏览器),下载网址为http://npm.taobao.org/mirrors/chromedriver,注意:在下载之前要安装谷歌浏览器,并且下载的chromedriver要与谷歌浏览器的版本相对应。
- selenium实现京东的自动登录,首先要导入selenium模块中的webdriver(from selenium import webdriver),这里我们使用QQ账号登录
if __name__=='__main__':
driver=webdriver.Chrome(executable_path='F:\\Download\\chromedriver.exe')
driver.get('https://www.jd.com/')
driver.find_element_by_xpath('//*[@id="ttbar-login"]/a[1]').click()
driver.find_element_by_xpath('//*[@id="kbCoagent"]/ul/li[1]/a/span').click()
current_window=driver.window_handles
driver.switch_to.window(current_window[0])
driver.switch_to.frame(0)
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
driver.find_element_by_xpath('//*[@id="u"]').send_keys('QQ账号')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys('QQ密码')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="login_button"]').click() #selenium实现自动登录
time.sleep(10)
driver.find_element_by_xpath('//*[@id="key"]').send_keys('2020连衣裙夏学生')
driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
- 登录成功后的页面
- 在页面中爬取想要的信息,商品网址以及商品图片的网址
response=driver.page_source
time.sleep(5)
res=etree.HTML(response)
data=res.xpath('//div/div[@class="p-img"]/a/@href')
for i in range(0,20):
url='http:'+data[i]
print(str(i+1)+'商品的网址:'+url)
response1=requests.get(url).text
res1=etree.HTML(response1)
data3=res1.xpath('//a[@href="#none"]/img/@src') #图片网址
for i in range(0,len(data3)):
imageurl='http:'+data3[i]
print(' ','商品图片网址:',imageurl)
- 具体的代码如下:
from selenium import webdriver
import time
import requests
from lxml import html
etree=html.etree
if __name__=='__main__':
driver=webdriver.Chrome(executable_path='F:\\Download\\chromedriver.exe')
driver.get('https://www.jd.com/')
driver.find_element_by_xpath('//*[@id="ttbar-login"]/a[1]').click()
driver.find_element_by_xpath('//*[@id="kbCoagent"]/ul/li[1]/a/span').click()
current_window=driver.window_handles
driver.switch_to.window(current_window[0])
driver.switch_to.frame(0)
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
driver.find_element_by_xpath('//*[@id="u"]').send_keys('QQ账号')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys('QQ密码')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="login_button"]').click() #selenium实现自动登录
time.sleep(10)
driver.find_element_by_xpath('//*[@id="key"]').send_keys('2020连衣裙夏学生')
driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
time.sleep(3)
response=driver.page_source
time.sleep(5)
res=etree.HTML(response)
data=res.xpath('//div/div[@class="p-img"]/a/@href')
for i in range(0,20):
url='http:'+data[i]
print(str(i+1)+'商品的网址:'+url)
response1=requests.get(url).text
res1=etree.HTML(response1)
data3=res1.xpath('//a[@href="#none"]/img/@src') #图片网址
for i in range(0,len(data3)):
imageurl='http:'+data3[i]
print(' ','商品图片网址:',imageurl)
- 运行结果如下:
当然,也可以在此页面上获取商品名称、价格、销量等等,这里我们主要介绍的是selenium的使用