赞
踩
1. BeautifulSoup简介:
在介绍了urllib,urllib3,requests等数据爬取相关的python库后,今天,再介绍一个更为流行的网页数据爬虫库,BeautifulSoup。
BeautifulSoup是有一个非常流行的python库,最主要的功能是从网页抓取数据。
BeautifulSoup可以对抓取的网页中的数据进行分析。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为 utf-8 编码。你几乎不需要考虑编码方式,当然,你也可以指定编码方式。
BeautifulSoup和requests、lxml、html6lib结合,更可以打造强大的数据爬取和解析利器。
2. BeautifulSoup实践:
例子:利用BeautifulSoup和requests对网页进行分析,获取网址和名称。
- #获取网站网址和名称,以http://news.163.com/photo/#Current为例。
- #http://news.163.com/photo/#Current是网易图片的网站
-
- import requests
- from bs4 import BeautifulSoup as bs
-
- #获取网页内容
- def get_web_content(url):
- print(url)
- res = requests.get(url) #发送请求
- #print(res.encoding) #查看网页编码的
- #res.encoding = 'utf-8' #跟上一个(res.encoding)结合来用,如果编码有乱码,则可以通过这个定义编码来改变
- html = res.text
- #print(html)
-
- item_list = []
- soup = bs(html,"html.parser") #定义一个BeautifulSoup变量
- #items = soup.find_all('div',attrs={'class':'nav-mod-1'}) #span
- items = soup.find_all('a',attrs={'class':'ntes-nav-index-title ntes-nav-entry-wide c-fl'})
-
- #print(items)
-
- for item in items:
- href=item.get('href')
- title=item.get('title')
- #print(item)
- print("网址:" + href)
- print("名称:" + title)
- item_list.append(href)
- print('列表数量:%d' % len(item_list))
-
- #main
- if __name__ == '__main__':
- #url = 'https://news.sina.com.cn/'
- url = 'http://news.163.com/photo/#Current' #网易图片网址
- get_web_content(url)
代码说明:
soup = bs(html,"html.parser") #定义一个BeautifulSoup变量
items = soup.find_all('a',attrs={'class':'ntes-nav-index-title ntes-nav-entry-wide c-fl'}) #获取属性class的值为“ntes-nav-index-title ntes-nav-entry-wide c-fl”的内容,
然后,可以进一步解析。
运行结果:
aaaaa:chaper user1$ python test_soup.py
http://news.163.com/photo/#Current
网址:https://www.163.com/
名称:网易首页
列表数量:1
原网站内容:
http://news.163.com/photo/#Current,是网易图片网站,html内容(截取部分)如下:
<div class="ntes-nav" id="js_N_nav">
<div class="ntes-nav-main clearfix">
<div class="c-fl">
<a class="ntes-nav-index-title ntes-nav-entry-wide c-fl" href="https://www.163.com/" title="网易首页">网易首页</a>
<!-- 应用 -->
<div class="js_N_navSelect ntes-nav-select ntes-nav-select-wide ntes-nav-app c-fl">
<a href="http://www.163.com/#f=topnav" class="ntes-nav-select-title ntes-nav-entry-bgblack JS_NTES_LOG_FE">应用
<em class="ntes-nav-select-arr"></em>
</a>
其中,ntes-nav-index-title ntes-nav-entry-wide c-fl就是class属性的一个值,可以认为是key。
不要吊坠在一棵树上,换个组件实现一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。