%d:格式化整数类型
Beautiful Soup(bs4):多次筛选
方法:
prettify():以HTML格式输出
.string:获得标签内部的文字(只支持当前标签下和标签的标签)
.strings:获取多个字符串,不过需要遍历获取(无限制)
.stripped_strings:获取多个字符串,并去掉多余空白内容
.contents:将该节点(Tag)的全部内容以‘列表’的形式输出(支持索引的方式来获取元素)
.children:返回一个list迭代器,可遍历
.descendants:该属性可以对所有标签(Tag)的子孙节点进行递归循环,和.children属性有点相似(拥有一个剥离过程,有点像剥鸡蛋???)
name:返回该标签的名称
attrs:返回该标签中的所有属性
del:删除(可以删除属性)
例:del 对象.标签[‘属性’]
get(‘属性’):获得属性值
repr(string):就对象转换位共解释器读取的形式
.parent:返回该标签的父节点(父标签)
.parents:返回可以递归得到元素的所有父辈节点(所有父标签)
next_sibling:获取该节点的下一个兄弟节点(返回值是下一个节点,允许对象.tag.next_sibling.next_sibling,多层使用)
.prev_sibling:获取上一兄弟节点,如果节点不存在,则返回None
.next_siblings:获取该节点以下的兄弟节点
.previous_siblings :获取该节点以上的所有兄弟节点,如果没有则返回None
.next_element:(过程)获取该节点的后面那个节点
.prev_element:(过程)获取该节点前面的节点
.next_elements:(过程)获取该节点后面的所有节点
.prev_elements:(过程)获取该节点前面的所有节点
Beautiful Soup的四大对象种类:
Tag:HTML中的一个个标签(就是标签)
格式:BeautifulSoup对象.标签 返回值为Tag
Tag对象支持字典形式,对象.标签[‘属性’] 返回的是属性值
可以采用字典的形式进行属性修改。
例:对象.标签[‘属性’]=属性值
Tag对象的属性:(支持字典形式,对象.标签[‘属性’] 返回的是属性值)
name:返回该标签的名称
attrs:返回该标签中的所有属性
del:删除(可以删除属性)
例:del 对象.标签[‘属性’]
Tag的方法:
get(‘属性’):获得属性值
NavigableString:可以遍历的字符串(获得标签内部的文字)
NavigableString的对象属性:
.string:获得标签内部的文字(只支持当前标签下和标签的标签)
.strings:获取多个字符串,不过需要遍历获取(无限制)
BeautifulSoup:beautifulsoup对象表示的是一个文档的全部内容(可以当成特殊的Tag对象)
Comment:Comment 对象是一个特殊类型的 NavigableString 对象(带有注释的文本,数据类型为Comment)
与NavigableString 对象的区别就是Comment对象输出的内容带有注释符号
遍历文档树:
直接子节点:
.contents:将该节点(Tag)的全部内容以‘列表’的形式输出(支持索引的方式来获取元素)
.children:返回一个list迭代器,可遍历
所有子孙节点:
.descendants:该属性可以对所有标签(Tag)的子孙节点进行递归循环,和.children属性有点相似(拥有一个剥离过程,有点像剥鸡蛋???)
父节点:
.parent:返回该标签的父节点(父标签)
.parents:返回可以递归得到元素的所有父辈节点(上级标签)
兄弟节点:(同级存在)
.next_sibling:获取该节点的下一个兄弟节点(返回值是下一个节点,允许对象.tag.next_sibling.next_sibling,多层使用)
.prev_sibling:获取上一兄弟节点,如果节点不存在,则返回None
( 注意:实际文档中的 tag 的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行)
.next_siblings:获取该节点以下的兄弟节点
.previous_siblings :获取该节点以上的所有兄弟节点,如果没有则返回None
前后节点:(该节点位置的前后节点,按照过程,从上到下,从左到右的顺序)
.next_element:(过程)获取该节点的后面那个节点
.prev_element:(过程)获取该节点前面的节点
.next_elements:(过程)获取该节点后面的所有节点
.prev_elements:(过程)获取该节点前面的所有节点
搜索文档树:
find_all(name,arrts,recursive,text,**kwargs):筛选器,支持字符串,传入True,可以匹配到所有的tag(标签)
**kwargs参数 支持参数为tag(标签)的属性来搜索,例如:对象.find_all(id=“link2”)
注意:tag的class属性用“class_”来表示
注意:有些tag属性在搜索find_all不能使用
注意:attrs属性在搜索中以字典的格式使用,例“attrs={"data-foo": "value"}”
text 参数接受 字符串,正则表达式,列表,True
limit 参数:限制返回结果的数量
格式: 对象.find_all("p",limit=2) #返回结果为两条
.select():注意:利用css格式来进行搜索
貌似返回结果尅多个
可以利用 标签[属性=??] 的格式来进行匹配(属性用中括号括起来)
返回值是list,支持标签,只匹配一次
例:print soup.select('#link1')
print soup.select('.sister')
print soup.select('p #link1')
print soup.select("head > title")
print soup.select('a[class="sister"]')
re:
re.compile(”正则表达式“):将正则表达式字符串转换为一个对象,在进行find_all时python会将字符串转换为正则表达式对象,而经过compile方法转换之后。就不会发生重复转换的问题(使用正则表达式时需要用到,将正则表达式进行转换,有点像对正则表达式字符串的一种封装)
urllib库:(利用它模拟浏览器的请求发起过程)
urllib.request.Request(“网址”):向服务器发送请求
urllib.request.urlopen(“网址”,【timeout=数值】):打开链接
timeout参数:超时时间,超过指定时长,跳过抓取
date参数
headers参数:仿造头部信息,来伪装浏览器,该参数是一个字典
以上方法对象的方法
read():读取
read().decode(“utf-8”):以utf-8的格式读取
status:返回请求成功的结果,成功返回200,失败返回404(响应的状态码)
getheaders():返回响应的头信息(全部)
getheader(‘参数’):返回头信息中的指定信息
关于urllib异常:
urllib.error
urllib.error.HTTPErroe 异常:有code属性,代表错误信息
urllib.error.URLError 异常:有reason属性,urlerr的属性
关于selenium库:
from selenium import webdriver
方法:
webdriver.Chrome():返回一个浏览器对象
浏览器对象.get(“网址”):利用浏览器对象自动打开浏览器
定位元素的8种方法:
定位一个元素 定位多个元素 含义
find_element_by_id find_elements_by_id 通过元素id定位
find_element_by_name find_elements_by_name 通过元素name定位
find_element_by_xpath find_elements_by_xpath 通过xpath表达式定位
find_element_by_link_text find_elements_by_link_tex 通过完整超链接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分链接定位
find_element_by_tag_name find_elements_by_tag_name 通过标签定位
find_element_by_class_name find_elements_by_class_name 通过类名进行定位
find_elements_by_css_selector find_elements_by_css_selector 通过css选择器进行定位
关于Selenium库中的Webdriver模块:
浏览器控制方法:
set_window_size() 设置浏览器的大小
back() 控制浏览器后退
forward() 控制浏览器前进
refresh() 刷新当前页面
clear() 清除文本
send_keys (value) 模拟按健输入
click() 单击元素
submit() 用于提交表单
get_attribute(name) 获取元素属性值
is_displayed() 设置该元素是否用户可见
size 返回元素的尺寸
text 获取元素的文本
鼠标方法:
ActionChains(driver) 构造ActionChains对象
context_click() 执行鼠标悬停操作
move_to_element(above) 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作,在调用时需要指定元素定位
perform() 执行所有ActionChains 中存储的行为,可以理解成是对整个操作的提交动作
多窗口切换:
current_window_handle 获得当前窗口句柄
window_handles 返回所有窗口的句柄到当前会话
switch_to.window() 用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。
关于pyquery库的使用:
##css选择器(和beautiful soup库功能相似)
网页解析库
构造方法: 初始化一个pyquery对象需要传入一个html文本
构造方法可传入“字符串”,“url”(链接),“文件名”(filename),等等
方法:
find():支持find查找,
children():只查找子节点,支持参数传递。例:参数为“.active"
parent():查找某个节点的父节点
parents():查找祖先节点,支持参数传递,参数为 .
siblings():获取兄弟节点
关于对pyquery对象的遍历:
需要用到items()方法
items():使用后返回一个可遍历的生成器(类型是puquery)
节点(标签)方法:
attr():获取属性,支持参数传入属性名称
text():获取其内部的文本
html():获取html文本