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 获取新浪微博的最新公共微博实例分享
Jul 03 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python实现的桶排序算法示例
Nov 29 Python
python操作mysql代码总结
Jun 01 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 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
web方式ftp
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/11/17 PHP
在数据量大(超过10万)的情况下
2007/01/15 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Django模板语言 Tags使用详解
2019/09/09 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
关于Keras Dense层整理
2020/05/21 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
教师暑期培训感言
2014/08/15 职场文书
党校学习心得体会范文
2014/09/09 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书