python分布式爬虫-Selenium(针对需要渲染的页面)
一、简介
见官网:http://www.selenium.org.cn/
简单使用参考:https://www.jianshu.com/p/3aa45532e179
二、安装
使用pip安装
pip install Selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
下载chrome驱动(框架需要):
https://chromedriver.storage.googleapis.com/index.html?path=2.35/
将目录放到path:(zip解压到当前文件夹)
三、快速入门
1.声明浏览器对象
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
2.简单示例:打印网页源代码
# -*- coding:UTF-8 -*- from selenium import webdriver if __name__ == '__main__': target = 'http://www.baidu.com' browser = webdriver.Chrome() browser.get(target) # 打开浏览器预设网址 print(browser.page_source) # 打印网页源代码 browser.close() # 关闭浏览器
// 这样,就实现了简单的使用
3.元素定位
多种元素定位方式:推荐xpath:
查看文本可以用text属性 //name/text()或者.text属性:
a = browser.find_element_by_xpath('//*[@id="xiaomiroot"]/ul[1]/li[1]/div[1]/p').text print(a)
4.简单示例
提取页面中元素
# -*- coding:UTF-8 -*- from selenium import webdriver if __name__ == '__main__': target = 'http://www.zjzwfw.gov.cn/zjservice/front/index/page.do?webId=83' browser = webdriver.Chrome() browser.get(target) # 打开浏览器预设网址 browser.implicitly_wait(3) # 等待3秒 a = browser.find_element_by_xpath('//*[@id="id17"]/div[1]/div[2]/span').text print(a) browser.close() # 关闭浏览器
// 这里需要注意一个等待几秒等页面加载完的坑(当然也可以用不太推荐的time.sleep),否则可能会报没有这个元素的错
不同等待方式的比较,可参考:
https://www.cnblogs.com/xmxit/p/16517662.html
5.编辑框中输入点击
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException if __name__ == '__main__': target = 'http://www.python.org' chrome_options = webdriver.ChromeOptions() browser = webdriver.Chrome(options=chrome_options) browser.delete_all_cookies() # 清除cookies browser.get(target) browser.implicitly_wait(3) # 等待3秒 browser.find_element_by_xpath( '//*[@id="id-search-field"]').send_keys('pycon') browser.implicitly_wait(3) # 等待3秒 try: browser.find_element_by_xpath('//*[@id="submit"]').click() except NoSuchElementException: browser.implicitly_wait(1) # 等待3秒 browser.find_element_by_xpath('//*[@id="submit"]').click() browser.close() # 关闭浏览器 print('SUCCESS!')
需要下拉加载的:
# -*- coding:UTF-8 -*- from selenium import webdriver if __name__ == '__main__': target = 'https://www.autohome.com.cn/spec/55227/#pvareaid=2042128' browser = webdriver.Chrome() browser.get(target) # 打开浏览器预设网址 browser.implicitly_wait(5) # 等待3秒 browser.execute_script("window.scrollTo(0,900)") pro_list = browser.find_elements_by_xpath('//*[@id="area_province"]/a') for pro in pro_list: print(pro.text) browser.close() # 关闭浏览器