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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python生成随机MAC地址
Mar 10 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python flask解析json数据不完整的解决方法
May 26 Python
Python上下文管理器全实例详解
Nov 12 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
AI:如何训练机器学习的模型
Apr 16 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中最简单的字符串匹配算法
2014/12/16 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
Python类的用法实例浅析
2015/05/27 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
一份Java笔试题
2012/02/21 面试题
恶意软件的定义
2014/11/12 面试题
大学本科毕业生的自我鉴定
2013/11/26 职场文书
优秀求职自荐信怎样写
2013/12/18 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
综合实践活动报告
2015/02/05 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
利用python调用摄像头的实例分析
2021/06/07 Python