很多人学习python,爬虫入门,在python爬虫中,有很多库供开发使用。
用于请求的urllib(python3)和request基本库,xpath,beautiful soup,pyquery这样的解析库。其中xpath中用到大量的正则表示式,对于新手来说,写正则很容易出错,在这里,从beautiful soup开始说。
from beautiful_soup.constant import HTML_TEXT
from bs4 import BeautifulSoup
soup = BeautifulSoup(HTML_TEXT, 'lxml')
# 将html文件以标准的格式输出, 会自动补全缺失的HTML结构
print(soup.prettify())
# 获取title标签的内容
print(soup.div.string)
# 获取名称
print(soup.div.name)
# 获取属性 属性值多个,所以返回值为list列表
print(soup.div.attrs)
# 元素选择可以嵌套 ,这样的方式在多个的情况下,只取第一个,
# 比如body中有多个div,这里取了第一个
print(soup.body.div.a.attrs)
# contents 属性获取直接的子节点 children属性也是如此
用属性选择较快,但是遇到复杂的情况,就很不灵活,这时候我们需要调用beautiful_soup中的一些方法# find_all 查询所有符合条件的元素
# find_all(name, attrs, recursive, text, **kwargs)
# name是属性名 attrs是属性
print(soup.find_all(name="ul"))
for ul in soup.find_all(name="ul"):
print(ul.find_all(name="li"))
# 属性传入夫人参数为字典格式
print(soup.find_all(attrs={"class": "js-geo-city"}))
# text
print(soup.find_all(text=re.compile("热")))
# find() 用法和find_all()一致,只不过返回的是单个元素,匹配到的第一个
# 其他方法
find_parents() # 返回所有的祖先节点
find_parent() # 直接返回父节点
find_next_siblings() # 返回后面所有的兄弟节点
find_next_sibling() # 返回后面第一个兄弟节点
find_previous_siblings() # 返回前面所有的兄弟节点
find_pervious_sibling() # 返回前面第一个兄弟节点
# css选择器 select()
print(soup.select("ul li"))