1.selenium操作浏览器的方法。
2安装anaconda中遇到的问题? 遇到多版本兼容怎么办?有python和anaconda两个想用anaconda如何配置环境变量?
path环境变量的意义:让系统找到一些exe文件。 1.如何配置? (1)配置一下路径: C:\Anaconda3----python.exe C:\Anaconda3\Scripts----pip.exe (2)把这两个目录放在path最前面。这样系统在找python和pip的时候会先找到anaconda下面的内容。 2.Python2和python3如何兼容? 当我们在cmd输入Python命令的时候,系统回去path目录下面取寻找与命令相同的exe可执行文件来进行启动。 当我们都安装了python2和python3的时候,只需要修改两个环境中的python.exe文件的文件名,比如python2的改成python2.exe,python3的改成python3.exe,这样将来输入命令的时候,如果想启动python3,可以输入python3命令来启动。 pip也是一样的原理。 pip3 install 模块名 pip2 install 模块名
3、selenium常用方法总结。 文档:selenuim常用方法总结.note 链接:http://note.youdao.com/noteshare?id=0142a95cf23fadbaea95809ccb5674b2&sub=02896A50836E4995997A821419D9A063
4、selenium中查找页面元素的方法:
# driver.find_element_by_id()----通过id进行查找 # input = driver.find_element_by_css_selector('#kw')---通过css选择器进行查找 # driver.find_element_by_xpath()----通过xpath进行查找。5、用selenium+phantomjs来请页面的流程: from selenium import webdriver # 1创建driver对象 driver = webdriver.Phantomjs() # 2。请求url driver.get(url) # 3.等待。 time.sleep(5) 等待有三种: 文档:selenium的三种等待.note 链接:http://note.youdao.com/noteshare?id=8f6a0765e4017a4140a05485a9d80a48&sub=48D9761ED13A49EDAC64D180C8340613 (1)强制等待: time.sleep(10) (2)隐式等待 driver.implicitly_wait(10) 隐式等待就是等到页面全部加载完成,比如js,css或者图片全请求到加载到页面,也就是我们常看到的页面不在转圈圈为止,程序才会继续运行。 (3)显示等待。 from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By 步骤: 1.创建等待对象 wait = WebDriverWait( driver,#浏览器驱动对象 10,最大等待时长 0.5,扫描间隔 ) 2.wait.until(等待条件)—>等待条件成立程序才继续运行。 等待条件在selenium中有个专门的模块来设置了一些条件—expected_conditions as EC 最常用的条件有一下两个: EC.presence_of_element_located EC.presence_of_all_elements_located 这两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw’) 一个只要一个符合条件的元素加载出来就通过; 另一个必须所有符合条件的元素都加载出来才行 EC.presence_of_element_located(locator对象也就是定位器) licator对象是一个元组( 通过什么来查找,–By.ID,By.XPATH,By.CSS_SELECTOR ‘查找的内容的语法’) 3.wait.until方法的返回值是一个对应定位器所定位到的webelement对象。你如果需要对这个webelment对象做一些点击或者其他操作,可以很方便的做到。 ###### 4获取页面内容 html = driver.page_source ###### 5.用lxml模块解析页面内容 tree = etree.HTML(html) 作业: 腾讯招聘
import json import os import re from selenium import webdriver from lxml import etree from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By class Tencent: def __init__(self,url,page): """ :param url: 基础路由 :param page: 请求的总页数 """ self.result={} self.url = url self.drive = webdriver.PhantomJS() self.wait = WebDriverWait(self.drive,10) self.page = page self.get_msg() self.save() def try_get0(self,lst): if lst: return lst[0] else: return '' def get_page(self,url,xrl): """ :param url: 请求的链接 :param xrl: 请求等待的条件,xpath规则 :return: str 页面文件 ele 可交互web对象 """ self.drive.get( url ) html = self.drive.page_source ele = self.wait.until(EC.presence_of_element_located((By.XPATH,xrl))) return html,ele def get_xpath(self,html, xrl): """ :param html: response.text文件 、字符串 :param xrl: xpath规则 :return: xpath对象 """ tree = etree.HTML( html ) xpath_ele = tree.xpath( xrl ) return xpath_ele def re_get(self,text,rl): """ :param text: 字符串 :param rl: 正则规则 :return: 正则匹配的结果 """ rl = re.compile(rl,re.S) search = rl.search(text) return search def get_msg(self): """ 获得数据,添加到self.result字典中 :return: """ xrl = '//div[@class="recruit-wrap recruit-margin"]' for i in range(1,self.page+1): res = self.get_page(self.url%i,xrl) xrl = '//div[@class="recruit-list"]' div_lst = self.get_xpath(res[0],xrl) for div in div_lst: title = self.try_get0(div.xpath('./a[1]/h4/text()')) address = self.try_get0(div.xpath('./a[1]/p/span[2]/text()')) type = self.try_get0(div.xpath('./a[1]/p/span[3]/text()')) date = self.try_get0(div.xpath('./a[1]/p/span[4]/text()')) description = self.try_get0(div.xpath('./a[1]/p[2]/text()')) label = self.try_get0(div.xpath('./a[1]/p/span[1]/text()')) self.result[title]={ 'label':label, 'address':address, 'type':type, 'date':date, 'description':description } def save(self): """ 将结果写入一个json文件和一个txt文件 """ if not os.path.exists('./result'): os.mkdir('./result') with open('./result/job.json','w',encoding='utf-8') as fp: json.dump(self.result,fp) with open('./rsult/job.txt','w',encoding='utf-8') as fp1: fp1.write(str(self.result)) if __name__ == '__main__': url = 'https://careers.tencent.com/search.html?index=%s' book = Tencent(url,1)
