005 爬虫(requests与beautifulSoup库的使用)
一:知识点
1.安装requests库
2.Brautiful soup
可以提供一些简单的,python式的函数来处理导航,搜索,修改分析树等功能。
她是一个工具箱,通过解析文档为用户提供需要抓去的数据。
自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
现在是使用Beautiful Soup4,不过现在已经被移植到BS4了,即导入需要导入bs4。
3.导入
pip install beautifulsoup4
4.创建Beautiful Soup对象
导入bs4库
from bs4 import BeautifulSoup
创建:
soup=BeautifulSoup(html)
5.程序
import requests
from bs4 import BeautifulSoup
r=requests.get("http://www.baidu.com",headers={'User-Agent':'Mozilla/4.0'})
soup=BeautifulSoup(r.text,"html.parser")
print soup.prettify()
6.打印soup的内容
print soup.prettify()
7.四大对象种类
Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,将所有的对象归纳为四种。
BeautifulSoup
Tag
NavigableString
Comment
8.BeautifulSoup
对象表示是一个文档的全部内容,大部分的时候,可以将它当作Tag对象,是一个特殊的Tag,我们可以获取它的类型,名称,以及属性。
soup.name
soup.attrs
9.Tag的使用
找到的是第一个,后面的都没显示。
soup.title.name
soup.title.attrs
soup.meta['content']
soup.meta.get('content')
import requests
from bs4 import BeautifulSoup
r=requests.get("http://www.baidu.com",headers={'User-Agent':'Mozilla/4.0'})
soup=BeautifulSoup(r.text,"html.parser")
print soup.title
print soup.meta
效果:
<title>百度一下,你就知道</title>
<meta content="text/html;charset=utf-8" http-equiv="content-type"/>
10.NavigableString
获取标签内部的文字。
soup.标签名.string
import requests
from bs4 import BeautifulSoup
r=requests.get("http://www.baidu.com",headers={'User-Agent':'Mozilla/4.0'})
soup=BeautifulSoup(r.text,"html.parser")
print soup.title.string
效果:
百度一下,你就知道
11.Comment
是一个特殊类型的NavigableString对象,其实输出的内容仍然不包含注释符号。
12.常用方法(过滤)
name
attrs
text
limit
recursive:要不要搜索子孙节点。
13.常用方法
find_all
find
.contents .children
.descendants
.string
.parent
.next_sibling
next_elements .previous_elements
14.程序
import requests
from bs4 import BeautifulSoup
r=requests.get("http://www.baidu.com",headers={'User-Agent':'Mozilla/4.0'})
soup=BeautifulSoup(r.text,"html.parser")
print soup.script.parent
print soup.title.string
二:案例
1.网址
https://movie.douban.com/top250?start=0&filter=
2.程序
#encoding=utf-8
import requests
from bs4 import BeautifulSoup
import re
import xlwt #创建全局变量,保存电影信息
dataList=[] #根据地址和开始行获取网页的文本内容
def getHtmlTest(url,startRow):
#头部筛选函数
if(startRow==0):
param={}
else:
param={'start':startRow,'filter':''}
#获取网页
r=requests.get(url,params=param,headers={'User-Agent':'Mozilla/4.0'})
return r.text #创建函数将传入的文本解析获取所需要的数据
def getData(html):
soup=BeautifulSoup(html,'html.parser')
#获取class为grid_view的ol下面的所有列表
movieList=soup.find('ol',attrs={'class':'grid_view'})
#遍历查找内容
for movieLi in movieList.find_all('li'):
data=[]
#获取电影名称
movieHd=movieLi.find('div',attrs={'class':'hd'})
movieName=movieHd.find('span',attrs={'class':'title'}).getText()
data.append(movieName) #电影分数
movieScore=movieLi.find('span',attrs={'class':'rating_num'}).getText()
data.append(movieScore) #电影评价人数
movieEval=movieLi.find('div',attrs={'class':'star'})
movieEvalNum=re.findall(r'\d+',str(movieEval))[-1]
data.append(movieEvalNum) #电影评价
movieQuote=movieLi.find('span',attrs={'class','inq'})
if(movieQuote):
data.append(movieQuote.getText())
else:
data.append("无影评信息") #添加到全局变量中
dataList.append(data)
return #保存到excel
def saveData(savePath):
book=xlwt.Workbook(encoding='utf-8')
sheet=book.add_sheet('前250名的电影信息')
col=(u'电影名称',u'电影评分',u'评论人数',u'短评')
for i in range(0,4):
sheet.write(0,i,col[i])
for i in range(0,250):
data=dataList[i]
for j in range(0,4):
sheet.write(i+1,j,data[j])
book.save(savePath)
return #创建主函数
def mainFunc():
url='https://movie.douban.com/top250'
startRow=0
while startRow<250:
html=getHtmlTest(url,startRow)
getData(html)
startRow += 25
saveData('movieData.xls')
return #测试
mainFunc()
3.效果
·
005 爬虫(requests与beautifulSoup库的使用)的更多相关文章
- $python爬虫系列(2)—— requests和BeautifulSoup库的基本用法
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- Python爬虫利器:BeautifulSoup库
Beautiful Soup parses anything you give it, and does the tree traversal stuff for you. BeautifulSoup ...
- PYTHON 爬虫笔记五:BeautifulSoup库基础用法
知识点一:BeautifulSoup库详解及其基本使用方法 什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便实现网页信息的提取库. ...
- 利用python的requests和BeautifulSoup库爬取小说网站内容
1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...
- python爬虫系列(2)—— requests和BeautifulSoup
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- Python爬虫小白入门(三)BeautifulSoup库
# 一.前言 *** 上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. ...
- python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...
- 爬虫不过如此(python的Re 、Requests、BeautifulSoup 详细篇)
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取 ...
- python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法
最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...
随机推荐
- 深入浅出CSS(三):隐藏BOSS大盘点之默认属性小总结
写在前面 严重警告,本文包含大量文字,且无配图,请做好充分心理准备后,再进行阅读! 严重警告,本文包含大量文字,且无配图,请做好充分心理准备后,再进行阅读! 严重警告,本文包含大量文字,且无配图,请做 ...
- 判断android是否是debug
1.使用BuildConfig.DEBUG,这个在住modul里面是有效的,但是在有依赖库里面使用就会一直返回false,可以通过下面的方法解决:在library的build.gradle中添加以下代 ...
- spring框架学习(六)AOP事务及spring管理事务方式之Template模板
概念 1.事务 1)事务特性:ACID 原子性 :强调事务的不可分割. 一致性 :事务的执行的前后数据的完整性保持一致. 隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰. 持久性 :事务一旦 ...
- 20155235 2016-2017-2 《Java程序设计》第5周学习总结
20155235 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章知识点 语法与继承结构 使用try.catch 异常继承结构 要抓还是要抛 贴心还是造 ...
- windows 10 部署flask web
起因 本来想这用django 写一个web 应用程序,便于管理mongodb的数据.结果django 不直接支持mongodb……又没时间研究NoSQL.于是想着随便整个api吧…… 于是先用flas ...
- webpack4.5.0+vue2.5.16+vue-loader 实战组件化开发案例以及版本问题中踩的一些大坑!!!
一 vue-loader 我们先不管脚手架,只说vue-loader,简单讲就是可将.vue文件打包,实现组件化开发,即一个.vue文件就是一个组件,开发中只需要引入这个.vue组件就可以了! 然后. ...
- 【bzoj题解】2186 莎拉公主的困惑
题目传送门. 题意:求\([1,n!]\)中与\(m!\)互质的数的个数,对质数\(R\)取模,\(n\geq m\). 答案应该等于\(\frac{n!}{m!}\phi(m!)=\frac{n!} ...
- 公司内网yum源
新增yum源配置文件 vi /etc/yum.repos.d/szyum.repo 内容如下: #[redhat6.3] [base] name=redhat63 baseurl=http://10. ...
- 解决 Windows 环境 Git Bash 无法识别 Composer 命令的问题
思路 模拟 Linux,复制一个 composer 文件到 Git Bash 的 /usr 的子目录,并赋予执行权限. 解决 首先,请确定你的 composer.phar 文件路径.我的是: /d/w ...
- MySQL 执行SQL脚本 报ERROR 1231 (42000)的解决办法【转】
今天在source mysqldump 备份文件时,发现导入的过程中报如下的错误: ERROR 1231 (42000): Variable 'time_zone' can't be set to t ...