soup = BeautifulSoup(html, 'lxml') # 初始化BeautifulSoup
初始化BeautifuSoup的参数。
第一个参数 html是网页的源代码,可以是个Unicode字符串,也可以是一个二进制字符串
(如果第一个参数是字符串并且网页自带了charset信息,BS会默认采用网页的默认编码解码,
否则默认以你当前文件执行的编码(通常是utf-8)进行解析。如果是二进制字符串,
如果自己手动指定了编码,就以指定编码解析,否则默认utf-8解析)。
第二个参数 lxml是BeautifulSoup采用的网页解析器,我们安装lxml用处就在这体现出来了。
如果不指定,那么默认会采用Python内置的html.parser进行解析。
BeautifulSoup的基本使用语法规则
.find() 使用示例
soup.find('a')。那么会返回在soup包含的源代码中的第一个<a>...</a>标签内容对象。
soup.find('a', id='next')。那么会返回在soup包含的源代码中,遇到的第一个有属性为id,值为next的<a>对象,比如<a id="next">...</a>。(不只可以用id,大部分其他的属性都可以直接使用,比如src、name。 **值得注意的是,class这个属性因为是Python关键字,不能直接使用,所以在BS里面,使用class_='...'进行代替 **)
find返回的结果,依然可以继续使用find()或者find_all()方法。如果找不到指定的内容,find会返回None。.find_all()使用示例
soup.find_all('a')。那么会返回在soup包含的源代码中,遇到的所有<a>...</a>标签内容的可迭代对象(我们可以把它看成一个 list 或者数组)。
soup.find_all('a', class_='next')。那么会返回在soup包含的源代码中,遇到的所有属性为class,值为next的<a>的 可迭代对象,比如<a class="next">...</a>。(语法和find也一样,class也不能直接写)
find_all返回的“list”中的单个对象 依然可以继续使用find()或者find_all()方法。如果找不到指定的内容,find_all会返回一个空的“list”。获取元素的某个属性
soup['src],这样我们就能取出soup对象的src属性了。如果该属性不存在,那么程序会报错。获取元素中的所有文本
** soup.text**,假设soup对象为<div>你好<a>复联</a></div>,那么这个操作返回字符串是你好复联。
爬取https://movie.douban.com/cinema/later/chengdu/电影信息代码
import requests
from bs4 import BeautifulSoup # 从bs4引入BeautifulSoup
#请求网页
url = "https://movie.douban.com/cinema/later/chengdu/"
response = requests.get(url)
# 解析网页
# 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页
soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')
# 初始化BeautifulSoup方法二:手动指定解析编码解析网页
# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')
# print(soup) # 输出BeautifulSoup转换后的内容
all_movies = soup.find('div', id="showing-soon") # 先找到最大的div
# print(all_movies) # 输出最大的div的内容
for each_movie in all_movies.find_all('div', class_="item"): # 从最大的div里面找到影片的div
# print(each_movie) # 输出每个影片div的内容
all_a_tag = each_movie.find_all('a')
all_li_tag = each_movie.find_all('li')
movie_name = all_a_tag[1].text
moive_href = all_a_tag[1]['href']
movie_date = all_li_tag[0].text
movie_type = all_li_tag[1].text
movie_area = all_li_tag[2].text
movie_lovers = all_li_tag[3].text
print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))
网友评论