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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
Python爬取网易云音乐热门评论
Mar 31 Python
JSON Web Tokens的实现原理
Apr 02 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python延时操作实现方法示例
Aug 14 Python
Python发展简史 Python来历
May 14 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
python中几种自动微分库解析
Aug 29 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
python代数式括号有效性检验示例代码
Oct 04 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 翻页 实例代码
2009/08/07 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
python批量修改文件名的实现代码
2014/09/01 Python
python 实现敏感词过滤的方法
2019/01/21 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
几个判断型的面试题
2012/07/03 面试题
心得体会怎么写
2013/12/30 职场文书
代理协议书范本
2014/04/22 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
热情服务标语
2014/10/07 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
MySQL创建管理HASH分区
2022/04/13 MySQL