python爬虫(3)

'''
1.多线程
使用消息队列 queue来通信,把每个方法得到的数据放到消息队列中,每个方法就可以当做一个子线程开启,
线程间使用queue来通信,即 put()放入,get()拿出,以前run函数中一套流程下来只是单线程,
注意,使用while True就能保证线程始终执行,使用task_done()来保证主线程等待子线程的所有消息队列执行完,
4个函数 生成url列表,请求,解析,保存,所以需要3个队列就可以了,但是线程可以随意开,最好用线程list来start线程并且设置守护主线程
然后设置 join() 使主线程等待子线程的消息队列完毕  和task_done方法是呼应的
消息队列结束 -> 主线程等待结束 -> 守护主,子线程的while停止
'''




'''
2.自动化
selenium自动化操作浏览器的驱动工具
phantomjs无界面的浏览器,运行在内存中,针对linux使用
chrome浏览器也可以设置成无界面的
条件chrome最新,selenium最小,驱动版本匹配
chrome使用无头版本:
# 创建浏览器配置对象
opt = webdriver.ChromeOptions()
# 对配置对象添加设置,设置为无头模式
opt.add_argument('headless')
# 创建浏览器对象
driver = webdriver.Chrome(chrome_options=opt)








selenium使用
pip install selenium


from selenium import webdriver
实例化浏览器对象,哪个浏览器都可以  PhantomJS浏览器
driver = webdriver.Chrome()


driver.maximize_window()  窗口最大化
driver.close()  关闭一个窗口
driver.quit()  关闭全部标签


driver.get(url)  请求网址
driver.save_screenshot('截图名字.png') 保存为截图


driver.page_source  获取源码  注意:是渲染之后的源码,这时候不用管是不是在js中了,都可以在源码中提取出来
driver.get_cookies() 获取cookie   这时候cookie是一个name对应一个value的格式
driver.current_url  获取当前的url
driver.title   获取标题


定位:
源码在driver对象中
element对象 = driver.find_element_by_xpath('xpath规则')  注意element是单数格式,精确定位返回一个对象
                    .find_elements_by_xpath             注意是复数格式,定位一组返回对象列表
                    
大By语句(认识就行) from selenium.webdriver.common.by import By
                driver.find_element(By.xpath, 'xpath规则')


8种定位方式:
el = driver.find_element_by_xpath('xpath规则')   用它就好
el = driver.find_element_by_id()        id值
el = driver.find_element_by_name       name值
el = driver.find_element_by_class_name   类名
el = driver.find_element_by_css_selector   css选择器
el = driver.find_element_by_link_text      文本,标签中必须有链接
el = driver.find_element_by_partial_link_text  部分文本,同上
el = driver.find_element_by_tag_name       标签名




获取值:
el.get_attribute(属性名)   获取属性
el.text    获取文本


操作:
el.click()  点击
el.submit() 提交
el.clear()  清除
el.send_keys(data)  输入 


搜索对于新跳出的标签无法切换:
driver.window_handles 获取所有的标签页列表
driver.switch_to.window(driver.window_handles[-1])  切换到某个标签窗口,和上边结合使用


执行js:
js = 'scrollTo(0,500)'  下拉 纵坐标500px
driver.execute_script(js语句) 执行js


Iframe框架的处理:页面中嵌套页面,qq空间的登录
el = driver.find_element_by_xpath() 定位到框架  注意容易定错,是含有frame的
driver.switch_to.frame(el) 进入框架中


driver.get_cookies() 获取cookie
driver.delete_cookie(cookie的name) 删除指定
driver.delete_all_cookies()  删除所有
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值