python用BeautifulSoup库简单爬虫实例分析


Posted in Python onJuly 30, 2018

会用到的功能的简单介绍

1、from bs4 import BeautifulSoup

#导入库

2、请求头herders

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36','referer':"www.mmjpg.com" }
all_url = 'http://www.mmjpg.com/' 
'User-Agent':请求方式 
'referer':从哪个链接跳转进来的

3、建立连接

start_html = requests.get(all_url, headers=headers)
all_url:起始的地址,也就是访问的第一个页面
headers:请求头,告诉服务器是谁来了。
requests.get:一个方法能获取all_url的页面内容并且返回内容。

4、解析获取的页面

Soup = BeautifulSoup(start_html.text, 'lxml')
BeautifulSoup:解析页面
lxml:解析器
start_html.text:页面的内容

5、处理获取的页面

all_a = Soup.find('div', class_='pic').find_all('a')[-2]
Soup.find()查找某一个
find_all()查找所有的,返回一个列表
.find('img')['src']  :获取img的src链接属性  
class__:获取目标的类名
div/a:类型条件为div/a的
[-2]可以用来去掉最后多匹配的标签,这里表示去掉最后两个a标签

6、获取目标内容

<a href =# >内容</a>
a[i]/get_text():获取第i个a标签里面的内容

7、可能用到的其他功能介绍:

1、文件夹创建与切换

os.makedirs(os.path.join("E:\name", filename))
#在目录E:\name下创建名为filename的文件夹
os.chdir("E:\name\\" + filename)
#切换工作路径到E:\name\filename下

2、文件保存

f = open(name+'.jpg', 'ab')##写入多媒体文件必须要 b 这个参数!
f.write(img.content) ##多媒体文件要是用conctent!
f.close()

案例:爬取妹纸图

import requests
from bs4 import BeautifulSoup
import os
#导入所需要的模块
class mzitu():
  def all_url(self, url):
    html = self.request(url)##
    all_a = BeautifulSoup(html.text, 'lxml').find('div', class_='all').find_all('a')
    for a in all_a:
      title = a.get_text()
      print('------开始保存:', title) 
      path = str(title).replace("?", '_') ##替换掉带有的?
      self.mkdir(path) ##调用mkdir函数创建文件夹!这儿path代表的是标题title
      href = a['href']
      self.html(href) 

  def html(self, href):  ##获得图片的页面地址
    html = self.request(href)
    max_span = BeautifulSoup(html.text, 'lxml').find('div', class_='pagenavi').find_all('span')[-2].get_text()
    #这个上面有提到
    for page in range(1, int(max_span) + 1):
      page_url = href + '/' + str(page)
      self.img(page_url) ##调用img函数

  def img(self, page_url): ##处理图片页面地址获得图片的实际地址
    img_html = self.request(page_url)
    img_url = BeautifulSoup(img_html.text, 'lxml').find('div', class_='main-image').find('img')['src']
    self.save(img_url)

  def save(self, img_url): ##保存图片
    name = img_url[-9:-4]
    img = self.request(img_url)
    f = open(name + '.jpg', 'ab')
    f.write(img.content)
    f.close()

  def mkdir(self, path): ##创建文件夹
    path = path.strip()
    isExists = os.path.exists(os.path.join("E:\mzitu2", path))
    if not isExists:
      print('建了一个名字叫做', path, '的文件夹!')
      os.makedirs(os.path.join("E:\mzitu2", path))
      os.chdir(os.path.join("E:\mzitu2", path)) ##切换到目录
      return True
    else:
      print( path, '文件夹已经存在了!')
      return False

  def request(self, url): ##这个函数获取网页的response 然后返回
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
      'referer':#伪造一个访问来源 "http://www.mzitu.com/100260/2"
    }
    content = requests.get(url, headers=headers)
    return content
#设置启动函数
def main():
  Mzitu = mzitu() ##实例化
  Mzitu.all_url('http://www.mzitu.com/all') ##给函数all_url传入参数 

main()
Python 相关文章推荐
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Python WEB应用部署的实现方法
Jan 02 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
对TensorFlow的assign赋值用法详解
Jul 30 #Python
Python双向循环链表实现方法分析
Jul 30 #Python
tensorflow更改变量的值实例
Jul 30 #Python
Python使用分布式锁的代码演示示例
Jul 30 #Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 #Python
利用Python如何批量更新服务器文件
Jul 29 #Python
python高阶爬虫实战分析
Jul 29 #Python
You might like
PHP无敌近乎加密方式!
2010/07/17 PHP
php jsonp单引号转义
2014/11/23 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
一段实用的php验证码函数
2016/05/19 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
event.srcElement+表格应用
2006/08/29 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
Python用模块pytz来转换时区
2016/08/19 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
秋季运动会加油稿200字
2014/01/11 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
监考失职检讨书
2015/01/26 职场文书
工作会议通知
2015/04/15 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python turtle实现贪吃蛇游戏
2021/06/18 Python
python APScheduler执行定时任务介绍
2022/04/19 Python