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 cookielib 登录人人网的实现代码
Dec 19 Python
Python找出文件中使用率最高的汉字实例详解
Jun 03 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
python中threading开启关闭线程操作
May 02 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
Pycharm连接gitlab实现过程图解
Sep 01 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
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
js表单验证实例讲解
2016/03/31 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
transform python环境快速配置方法
2018/09/27 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
Django URL参数Template反向解析
2020/11/24 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
先进工作者获奖感言
2014/02/08 职场文书
职务任命书范本
2014/06/05 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
个人租房协议书
2014/11/28 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
防止web项目中的SQL注入
2021/12/06 MySQL
Java中try catch处理异常示例
2021/12/06 Java/Android
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记