python爬虫系列4--BeautifulSoup

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('恭喜你,图片下载完成啦!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值