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 相关文章推荐
Python3 入门教程 简单但比较不错
Nov 29 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
Python标准库之随机数 (math包、random包)介绍
Nov 25 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
python安装与使用redis的方法
Apr 19 Python
Python查找第n个子串的技巧分享
Jun 27 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
Python实现排序方法常见的四种
Jul 15 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生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
Python贪心算法实例小结
2018/04/22 Python
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
Python3数字求和的实例
2019/02/19 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
python实现银行实战系统
2020/02/26 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
档案信息化建设方案
2014/05/16 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
师德师风学习材料
2014/12/19 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
教师节班会开场白
2015/06/01 职场文书
污染环境建议书
2015/09/14 职场文书
交通安全学习心得体会
2016/01/18 职场文书
深入浅析Django MTV模式
2021/09/04 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL