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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python 不同对象比较大小示例探讨
Aug 21 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
python斐波那契数列的计算方法
Sep 27 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
Django的性能优化实现解析
Jul 30 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
Python request使用方法及问题总结
Apr 26 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
解析php中curl_multi的应用
2013/07/17 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
JavaScript中的this机制
2016/01/30 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
歌唱比赛获奖感言
2014/01/21 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle