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中的yield浅析
Jun 16 Python
跟老齐学Python之关于类的初步认识
Oct 11 Python
实现python版本的按任意键继续/退出
Sep 26 Python
pytorch构建网络模型的4种方法
Apr 13 Python
pandas带有重复索引操作方法
Jun 08 Python
python scp 批量同步文件的实现方法
Jan 03 Python
python实现淘宝秒杀脚本
Jun 23 Python
Python按钮的响应事件详解
Mar 04 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Python适配器模式代码实现解析
Aug 02 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
tensorflow模型转ncnn的操作方式
May 25 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在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
php简单实现数组分页的方法
2016/04/30 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
asp 的 分词实现代码
2007/05/24 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
介绍一下linux文件系统分配策略
2012/11/17 面试题
公司接待方案
2014/03/08 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
公司收款委托书范本
2014/09/20 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
Python字符串格式化方式
2022/04/07 Python