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的线程来解决生产者消费问题的示例
Apr 02 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
Python常见数字运算操作实例小结
Mar 22 Python
10招!看骨灰级Pythoner玩转Python的方法
Apr 15 Python
python3射线法判断点是否在多边形内
Jun 28 Python
python 设置输出图像的像素大小方法
Jul 04 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python tornado上传文件的功能
Mar 26 Python
python怎么自定义捕获错误
Jun 29 Python
Python中字符串对象语法分享
Feb 24 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
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
原生JS实现瀑布流插件
2018/02/06 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python中正则的使用指南
2016/12/04 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
平面设计师的工作职责
2013/11/21 职场文书
医院科室评语
2015/01/04 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
Python基本的内置数据类型及使用方法
2022/04/13 Python