python爬虫bs4_Python网络爬虫——bs4基本用法

使用流程:

-导包:from bs4 import BeautifulSoup

- 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或属性去查找指定的节点内容。

(1)转化本地文件:

- soup = BeautifulSoup(open(‘本地文件’),‘lxml’)

(2)转化网络文件(与requests配合):

- page_text = requests.get(url=url,headers=headers).text

- soup= BeautifulSoup(page_text,'lxml')

(3)打印soup对象显示内容为html文件中的内容

基础语法:

(1)根据标签名查找

- soup.a  只能找到第一个符合要求的标签

(2)获取属性

- soup.a.atters  获取a所有的属性和属性值,返回一个字典

- soup.a.atters['href']  获取href属性

- soup.a['href']  上面的简写

(3)***获取内容

- soup.a.string  获取之间的文本内容(a不含子标签)

- soup.a['href'].string  获取a标签中href的内容

- soup.a.text   获取之间包括子标签的所有文本内容

- soup.a.get_text()  同上面用法

【注意】如果标签里还有标签,那么string获取到的结果为None,其他两个可以获取文本内容

(4)***find:找到第一个符合要求的标签

- soup.find('a')  找到第一个符合要求的标签(a标签)

- soup.find('a',title='xxx')   找到第一个title=‘xxx’的a标签

- soup.find('a',alt='xxx')  同上

- soup.find('a',class_='xxx')  同上,【注意】class后的_

- soup.find('a',id='xxx')  同上

(5)***find_all:找到所有符合要求的标签

- soup.find_all('a')  找到所有a标签

- soup.find(['a','b'])  找到所有a和b标签

- soup.find_all('a',limit=2)  限制前两个

(6)***根据选择器选择指定的内容

select:soup.select('.feng')  选择class属性值为feng的所有标签

- 常见的选择器:标签选择器(a)、类型选择器(.)、id选择器(#)、层级选择器

- 层级选择器:

div > p > a > .lala  只能选择最下面一级 class=lala的子标签

div .dudu  div下面clas=dudu的所有字标签

【注意】 select选择器返回永远是列表,需要通过下表提取指定的对象

实例:使用bs4实现将诗词名句网站中三国演义小说的每一章的内同爬取到本地磁盘进行存储

importrequestsfrom bs4 importBeautifulSoup

#获得url

url= 'http://www.shicimingju.com/book/sanguoyanyi.html'headers={'User-Agent':''}

#获取网页并转换成BeautifulSoup对象

page_text= requests.get(url=url,headers=headers).text

soup= BeautifulSoup(page_text,'lxml')

#选取class=book-mulu的div标签 >下的ul标签 >下的li标签 >下的所有a标签

a_list= soup.select('.book-mulu>ul>li>a')

#创建sanguo.txt文件

fp= open('sanguo.txt','w',encoding='utf-8')

#遍历所有a标签for a ina_list:

#获取a标签文本

title=a.string

#获取a标签中href属性的文本信息,并组成url

detail_url= 'http://www.shicimingju.com' + a['href']

#获取新url内的页面信息

detail_page_text= requests.get(url=detail_url,headers=headers).text

#将新url网页创建为BeautifulSoup对象

title_soup= BeautifulSoup(detail_page_text,'lxml')

#获取新url内class='chapter_content'的div标签的文本信息

content= title_soup.find('div',class_='chapter_content').text

#将标题与正文间加入\n并写入sanguo.txt文件

fp.write(title+'\n'+content)

#每一章节下载完毕都打印成功print(title,'下载完毕')print('over')

fp.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值