Python爬虫之BeautifulSoup的用法
之前看静觅博客,关于BeautifulSoup的用法不太熟练,所以趁机在网上搜索相关的视频,其中一个讲的还是挺清楚的:python爬虫小白入门之BeautifulSoup库,有空做了一下笔记:
一、爬虫前的基本准备
1. 如何安装BeautifulSoup?
pip install beautifulsoup4 或 easy_install beautifulsoup4
注意:python2用BS4,但python3可以考虑用BS3,BS4对python3支持不够好
2. 如何查看BeautifulSoup已经安装?
打开IDE,用from bs4 import BeautifulSoup不报错 或 在cmd中输入pip list查看pip已安装的第三方库
3. 爬虫模块了解多少?
爬虫模块:urllib、urllib2、Requests、BeautifulSoup、Scrapy、lxml等
二、BeautifulSoup基础知识
1. 如何获取自定义html标签的内容?
#-*-coding:utf-8-*- from bs4 import BeautifulSoup html = '<title>女朋友</title>' soup = BeautifulSoup(html, 'html.parser') #创建一个beautifulsoup对象,html.parser为默认的网页解析器 print soup.title #获取title标签内容 运行结果:<title>女朋友</title>
数据:<div>,<title>,<a>...标签
找到标签的内容:soup.div(标签的名字)
2. 如何获取本地html文件的内容?
#-*-coding:utf-8-*- from bs4 import BeautifulSoup soup = BeautifulSoup(open('C:\\Users\\Administrator\\Desktop\\a.html'), 'html.parser') #在本地创建一个名叫a.html的html文件 print soup.prettify() #打印soup对象的内容,格式化输出 结果:<h1> 今天是周五</h1><p> 你们都很棒</p>
打开本地的html文件:open
打印本地文件的内容:soup.prettify()
3. html源代码相同的标签有很多,怎么获取到我想要的那一部分内容?
#-*-fulcoding:utf-8-*- from bs4 import BeautifulSoup html = '<div class="a">科里小姐姐</div><div class="b">若兰姐姐小溪姐姐</div>' soup = BeautifulSoup(html, 'html.parser') e = soup.find('div', class_ = "b") #class是python关键字,所以用class过滤,必须加下划线_ print e.text #.text获取文本 结果:若兰姐姐小溪姐姐
网页:名字,class,id
find(name,attrs,recursive,text,**wargs):这些参数相当于过滤器一样进行筛选处理
name:基于标签的名字
attrs:基于标签的属性
recursive:基于是否使用递归查找
text:基于文本参数
**wargs:基于函数的查找
4. 区分点:find find_all
#-*-fulcoding:utf-8-*- from bs4 import BeautifulSoup html = '<a href="www.baidu.com">百度</a><a href="www.sina.com.cn">新浪</a>' soup = BeautifulSoup(html, 'html.parser') #先用find a = soup.find('a') print a.get('href') #再用find_all b = soup.find_all('a') for c in b: print c.get('href') 结果:find:www.baidu.com find_all:www.baidu.comwww.sina.com.cn
可知:find_all()返回的是一个列表,可以遍历html文件中包含某一元素的所有字串,而find()只会找到第一个。
find_all()能够限制返回结果的数量,如soup.find_all('a', limit = 2),当limit = 1时,find()与find_all()结果相同。
5. 如何对付反爬虫?
增加头部信息headers。urllib2.Request()有三个参数,即urllib2(url, data, headers),如何我们爬取网页时得不到响应,有可能是网站建立了反爬虫机制,我们需要增加头部信息,模拟浏览器来登录,从而成功获取所需要的数据。
三、实战:爬取豆瓣妹子的图片
#-*-coding: utf-8-*- from bs4 import BeautifulSoup #从网页抓取数据 import urllib2, urllib def crawl(url): #网站反爬虫,模拟浏览器访问,加上headers头部信息 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'} request = urllib2.Request(url, headers = headers) #用url创建一个request对象 response = urllib2.urlopen(request, timeout = 20) contents = response.read() #获取源码 soup = BeautifulSoup(contents, 'html.parser') my_girl = soup.find_all('img') x = 0 for girl in my_girl: link = girl.get('src') print link urllib.urlretrieve(link, 'E:\\image\\%s.jpg' %x) #urlretrieve是保存图片到本地 x += 1 url = 'https://www.dbmeinv.com/?pager_offset=1' crawl(url)
最新文章
- Spring中AOP(通知)的使用
- LeetCode Add Two Numbers II
- asp.net type=file在上传图片到服务器
- 对teacher表进行增加,删除,修改
- Android下载图片/调用系统相机拍照、显示并保存到本地
- Qt报表控件NCReport教程:报表创建示例
- Array JSON
- 【jQuery】JS中拼接URL发送GET请求的中文、特殊符号的问题
- Eclipse 复制按钮卡死
- 1029: [JSOI2007]建筑抢修 - BZOJ
- spring的定时执行代码 跑批
- eclipse扩容
- JMX - JMX定义
- LAMP 版本查看
- zabbix3.4.7常用监控项
- T9 HDU1298
- 数据仓库专题(21):Kimball总线矩阵说明-官方版
- 使用Selenium来抓取动态加载的页面
- maven相关资源
- Swift 里字符串(四)large sting