1、常用模块
webbrowser:python自带,打开浏览器获取指定页面
requests:从网上下载文件和网页
Beautiful Soup:解析html
selenium:启动并控制一个web浏览器
2、启动新的浏览器,打开指定URL ,使用open()函数
import webbrowser
webbrowser.open('http://inventwithpython.com/')
3、下载网页requests.get()
import requests
res=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
res.status_code=requests.codes.ok
print(res.text[:300])
检查错误:raise_for_status() 如果下载文件出错,则抛出异常;如果文件成功,则什么都不做。
import requests
res=requests.get('http://www.inventwithpyton.com/page_that_does_not_exist')
try:
res.raise_for_status()
except Except as exc:
print('There was a problem: %s' %(exc))
注意:一定在requests.get()之后再调用raise_for_status()
4、下载文件到本地步骤
1)调用requests.get()下载该文件
2)用'wb'调用open(),以写二进制方式打开新文件
3)使用Response对象的iter_content()方法循环
4)每次迭代中调用write(),将内容写入该文件
5)调用close()关闭该文件
代码如下:
import requests
res=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
res.raise_for_status()
playFile=open('RomeoAndJuliet.txt','wb')
for chunk in res.iter_content(100000):
playFile.write(chunk)
playFile.close()
5、解析html
1)安装bs4
pip install beautifulsoup4
2)引用bs4
import bs4
3)创建BeautifulSoup对象
bs4.BeautifulSoup(res.txt)
4)select()方法寻找元素
soup.select('div') 所有名为<div>的元素
soup.select('#author') 带有id属性为author的元素
soup.select('.notice') 所有使用CSS class属性名为notice的元素
soup.select('div span') 所有在<div>元素之内的<span>元素
soup.select('div>span') 所有直接在<div>元素内的<span>元素,中间没有其他元素
soup.select('input[name]') 所有名为<input>,并有一个name属性,其值无所谓的元素
soup.select('input[type="button"]') 所有名为<input>,并有一个type属性,其值为button的元素
代码如下:
import bs4
exampleFile=open('example.html')
exampleSoup=bs4.BeautifulSoup(exampleFile.read()) #创建BeautifulSoup对象
elems=examples.select('#author')
elems[0].getText()
str(elems[0])
elems[0].attrs
pElems=exampleSoup.select('p')
str(pElems[0])
pElems[0].getText()
str(pElems[1])
pElems[1].getText()
通过元素属性获取数据:get()
代码如下:
import bs4
soup=bs4.BeautifulSoup(open('example.html'))
spanElem=soup.select('span')[0]
str(spanElem)
spanElem.get('id') #获取id属性的值
spanElem.attrs #元素属性
6、使用selenium控制浏览器
这些例子基于FireFox浏览器,需要先安装FireFox浏览器,下载地址:http://getfirefox.com/
导入selenium,不是import selenium,而是from selenium import webdriver
1)浏览器打开URL,代码如下
from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://inventwithpython.com')
2)页面中寻找元素
browser.find_element_by_class_name(name) 使用CSS类name的元素
browser.find_elements_by_class_name(name)
browser.find_element_by_class_selector(selector) 匹配CSS selector的元素
browser.find_elements_by_class_selector(selector)
browser.find_element_by_id(id) 匹配id属性值的元素
browser.find_elements_by_id(id)
browser.find_element_by_link_text(text) 完全匹配提供的text的<a>元素
browser.find_elements_by_link_text(text)
browser.find_element_by_partial_link_text(text) 包含提供的text的<a>元素
browser.find_elements_by_partial_link_text(text)
browser.find_element_by_name(name) 匹配name属性值的元素
browser.find_elements_by_name(name)
browser.find_element_by_tag_name(name) 匹配标签name的元素
browser.find_elements_by_tag_name(name)
除了*_by_tag_name()方法,所有方法的参数都区分大小写。如果没有找到匹配的元素,selenium就会抛出NoSuchElement异常。需要把异常程序放在try和except中。
WebElement属性及方法:
tag_name:标签名
get_attribute(name):该元素的name属性的值
text: 该元素内的文本
clear(): 对于文本字段或文本区域元素,清除其中输入的文本
is_displayed(): 如果元素可见,返回True,否则返回False
is_enabled(): 对于输入元素,如果该元素启用,返回True,否则返回False
is_selected(): 对于复选框或者单选框元素,如果该元素被选中,返回True,否则返回False
location: 一个字典,包含'x'和'y',表示该元素在页面上的位置
代码如下:
from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://inventwithpython.com')
try:
elem=browser.find_element_by_class_name('bookcover')
print('Found <%s> element with that class name!' %(elem.tag_name))
except:
print('Was not able to find an element with that name.')
点击页面,代码如下:
from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://inventwithpython.com')
linkElem=browser.find_element_by_link_text('Read It Online')
linkElem.click()
填写并提交表单:
from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://gmail.com')
emailElem=browser.find_element_by_id('Email')
emailElem.send_keys('robot@gmail.com')
passwordElem=browser.find_element_by_id('Passwd')
passwordElem.send_keys('123456')
passwordElem.submit()
特殊键整理:
Keys.DOWN,Keys.UP,Keys.LEFT,Keys.RIGHT 键盘箭头键
Keys.ENTER,Keys.RETURN 回车和换行键
Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UP Home键,End键,PageUp键,PageDown键
Keys.ESCAPE,Keys.BACK_SPACE,Keys.DELETE Esc、Backspace和Delete
Keys.F1,Keys.F2.........Keys.F12 键盘顶部的F1到F12键
Keys.TAB Tab键
代码如下:
from selenium import webdriver
from selenium.webdriver.common.keys
import keys
browser=webdriver.Firefox()
browser.get('http://nostarch.com')
htmlElem=browser.find_element_by_tag_name('html')
htmlElem.send_keys(Kesy.END) #scrolls to bottom
htmlElem.send_keys(Keys.HOME) #scrolls to top
浏览器按钮:
browser.back(): 点击返回按钮
browser.forward(): 点击前进按钮
browser.refresh(): 点击刷新按钮
browser.quit(): 点击关闭窗口按钮