Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。
中文文档链接:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#id11
+ soup = BeautifulSoup(html_string),soup.title、.p、.a、.head、.body、.b,soup.find_all,soup.find(id=xxx),soup.get_text
+ Beautiful Soup支持Python标准库中的HTML解析器(html.parser),还支持一些第三方的解析器,其中一个是 lxml,另一个可供选择的解析器是纯Python实现的 html5lib。推荐使用lxml作为解析器,因为效率更高。Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag, NavigableString,BeautifulSoup,Comment。
+ tag中最重要的属性: name和attributes。tag的属性操作方法与字典一样。
+ tag的 .contents 属性可以将tag的子节点以列表的方式输出。通过tag的 .children 生成器,可以对tag的子节点进行循环。如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。
查找还是很方便的,速度慢。
+ findAll(tag,attributes,recursive,text,limit,keywords)
find(tag,attributes,recursive,text,keywords)
bsObj.findAll(id="text")与bsObj.findAll("",{"id":"text"})等价
+ 爬取图片实例 urllib.request + bs4
from bs4 import BeautifulSoup
import urllib.request
x = 1
def crawl(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64'}
req = urllib.request.Request(url, headers=headers) # 创建对象
page = urllib.request.urlopen(req,timeout=20) # 设置超时
#contents = page.read().decode('utf-8') # 获取源码
# print(contents)
contents = page.read()
soup = BeautifulSoup(contents, 'html.parser',from_encoding="gb18030")
my_girl = soup.find_all('img')#注意此处返回的类型是标签
for girl in my_girl: # 遍历
link = girl.get('src') # 获取到src的值,即图片链接,如果图片链接是相对路径,还需要‘协议 + 主机名 + 端口号 + link’拼接完整
if -1 != link.find('http'):
print(link) # 打印获取到的图片url
else:
continue
global x
if -1 != link.find('jpg'):
urllib.request.urlretrieve(link, 'image\%s.jpg'%x)
elif -1 != link.find('png'):
urllib.request.urlretrieve(link, 'image\%s.png'%x)
elif -1 != link.find('gif'):
urllib.request.urlretrieve(link, 'image\%s.gif'%x)
else:
print("image type error")
# x +=1
print('正在下载第%s张图片'%x)
x +=1
'''for page in range(1, 3): # 爬取第1-2页的图片
# print(page)
# url = 'http://www.dbmeinv.com/?pager_offset=%s'%page # 也可以写%d
url = 'http://www.dbmeinv.com/?pager_offset={}'.format(page)
crawl(url)'''
url='http://www.zhuoku.com/'
crawl(url)
print('恭喜你,图片下载完成啦!')