from urllib.request import urlopen |
def get_one_page(index): |
url = 'https://maoyan.com/board/4?offset=%d' % (index * 10 ) |
# 另一种方式: url = 'https://maoyan.com/board/4?offset={}/'.format(index * 10) |
# 字符串的格式化处理 {} 占位符 使用format方式格式化字符串 |
response = urlopen(url) |
return response.read().decode() |
html = get_one_page( 0 ) |
''' |
解析HTML中的内容 |
1) 使用BeautifulSoup库 |
a. 安装BeautifulSoup4库 |
在命令行中进入Python环境 |
执行 pip install beautifulsoup4 |
进入Python的交互模式 执行python命令 |
import bs4 如果没有任何错误, 表明安装成功 |
|
卸载 pip uninstall beautifulsoup4 |
过程中需要输入 y |
b. 引入bs4 |
2) 使用XPath |
3) 使用pyquery |
|
''' |
from bs4 import BeautifulSoup |
''' |
Beautifulsoup在解析HTML时,可以设置解析值 |
1)HTML parser |
2) lxml |
3) 解析HTML5 |
''' |
soup = BeautifulSoup(html, 'html.parser' ) #指定一种方法解析 |
#打印soup对象的内容 |
print (soup.prettify()) |
#方法一(使用.的方式):获取title标签,使用标签名获取DOM树标签节点;缺点:只能获得页面中的第一个标签 |
title = soup.title |
print (title.get_text()) |
print (soup.p) |
# 方法二(使用函数方式):1、find_all() 返回所以符号条件的标签 |
ls_p = soup.find_all( 'p' ) |
print (ls_p) |
#遍历打印所以标签 |
for p in ls_p: |
print (p) |
|
#2、find() 只返回第一个符合条件的标签(相当于soup.p方法) |
p = soup.find( 'p' ) |
print (p) |
#获取标签内的文本内容, |
body = soup.body |
print (body.string) #当一个Tag对象有多个子节点时,可以用.string方法再通过遍历获得所有子节点的内容。 |
print (body.get_text()) #如果你仅仅想要得到文档或者标签的文本部分,它能以一个单一的一个Unicode串的形式返回文档中或者Tag对象下的所有文本。 |
#CSS选择器 |
''' |
1)标签 |
2)ID |
3)class |
''' |
p = soup.select( '.board-content' ) #选用class选择 |
print (p) |
''' |
1.标签选择 |
2.方法选择 |
3.CSS选择''' |
print (soup.find_all( 'ul' ,attrs = { 'class' : 'navbar' })) |
''' |
节点遍历 : |
1.直接使用属性 |
contens(获取当前节点的所有直接子节点,但是字符串也会被解析成一个孤立的节点) |
children 当前节点的所有子孙节点. |
2. 方法 |
find find_all |
''' |
subnav = soup.select( '.subnav' ) |
print (subnav[ 0 ].contents) |
for child in subnav[ 0 ].children: |
print (child) |
ls_a = subnav[ 0 ].find_all( 'a' ) |
for a in ls_a: |
print (a) |
print (a.get_text()) |
#访问节点属性(以字典保存,则取属性) |
print (a.attrs.get( 'href' )) #用中括号,越界会报错;用get越界返回空 |
''' |
我们在写 CSS 时,标签名不加任何修饰,类名(class="className"引号内即为类名)前加点,id名(id="idName"引号前即为id名)前加 #, |
# 在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list |
例: |
print soup.select('title') #标签 |
print soup.select('.sister') #类名 |
print soup.select('#link1') #ID |
''' |