我们在工作中,都会听说过爬虫,那么什么是爬虫呢?

什么是网络爬虫

爬虫基本原理

  所谓网络爬虫就是一个自动化数据采集工具,你只要告诉它要采集哪些数据,丢给它一个 URL,就能自动地抓取数据了。其背后的基本原理就是爬虫程序向目标服务器发起 HTTP 请求,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

爬虫基本流程

  爬虫流程也是一个 HTTP 请求的过程,以浏览器访问一个网址为例,从用户输入 URL 开始,客户端通过 DNS 解析查询到目标服务器的 IP 地址,然后与之建立 TCP 连接,连接成功后,浏览器构造一个 HTTP 请求发送给服务器,服务器收到请求之后,从数据库查到相应的数据并封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器对响应内容进行数据解析、提取、渲染并最终展示在你面前。

Beautiful Soup简介

  Beautiful Soup它通过定位HTML标签来格式化和组织复杂的网络信息,用python对象为我们展现XML结构信息。

Beautiful Soup每个节点都是Python对象,所有对象可以归纳为 4种:

1、Tag:表示一个标签对象;  

2、 NavigableString:表示一个字符对象

3、 BeautifulSoup:表示一个HTML对象

4、Comment :表示一个注释对象

官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

Beautiful Soup安装

打开cmd,通过pip安装

# 安装BeautifulSoup4
pip install BeautifulSoup4

Beautiful Soup使用方法

1.根据request进入到想要爬去的页面

2.导入BeautifulSoup模块

3.创建BeautifulSoup对象

项目实战

爬取有哪些笑话类型

# coding:utf-8
import requests
from bs4 import BeautifulSoup
# 通过request请求地址
r = requests.get("http://xiaohua.zol.com.cn/youmo/")
# 获取整个页面的html
bsobj = r.text
# BeautifulSoup 实例化
soup = BeautifulSoup(bsobj,'html.parser') # html.parser 是python自带的编辑器,如果不带会一直提示异常
name = soup.find_all(class_='filter-links clearfix') # 找到全部的class内容
for i in name:
title=i.select("a") # 查找关于a标签的所有内容
for j in title:
print(j.get_text()) 执行结果:
全部
冷笑话
幽默
爱情
爆笑男女
爆笑
综合
儿童
校园
简短
整人
经典
恐怖
动物
内涵
英语
小笑话
短信
短笑话
一句话
极品
数学
超级
短篇
四川方言
顺口溜
名著暴笑
搞笑歌词
恋爱必读
求爱秘籍
原创
哈哈趣闻
数码
重口味
搞笑
各地方言

html.parser 是python自带的解析器,如果不带会一直提示异常

UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 7 of the file XXXX. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor.

  blog = BeautifulSoup(r)

Beautiful Soup其他方法

print(soup.title)   # 获取页面的标题
print(soup.title.string) # 获取页面标题字符串
print(soup.head) # 获取页面head
print(soup.a) # 获取页面第一个a标签
print(soup.find(class_='logo')) # 获取单个具体内容
print(soup.find_all(class_='logo')) # 获取页面全部内容
print(soup.get_text()) # 获取页面全部文字

同时tag也可以进行删改查

# 进行查看p标签下class携带的内容
print(soup.p['class'])
print(soup.p.get['class']) # 可以对属性进行修改
soup.p['class']='NewClass' # 删除标签
del soup.p['class']

最新文章

  1. DEDE整站动态化或整站静态化设置方法,织梦栏目批量静态/动态方法
  2. CSS各类标签用法——选择器
  3. Android 综合揭秘 —— 全面剖释 Service 服务
  4. jdbc/ojdbc连oracle的三种方式(转)
  5. hdu2476 String painter(区间dp)
  6. 持续集成-sourcetree的安装、使用记录
  7. springmvc跳转的几种方式
  8. 小韦系统装工行网银U盾驱动的方法
  9. thymeleaf中的th:with用法
  10. Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)
  11. 把WinXP装进内存 性能飚升秒杀固态硬盘
  12. php启用gzip压缩
  13. 团队作业3--需求改进&系统设计
  14. mac-redis安装与使用
  15. java压缩文件解压:调用WinRAR5命令强于自己写代码实现
  16. SQL Server 表值函数
  17. MySQL 批量写入数据报错:mysql_query:Lost connection to MySQL server during query
  18. web(五)CSS引入方式,编写规范及调试
  19. myBatis外部的resultMap高级应用
  20. Android设置RadioButton在文字的右边

热门文章

  1. Thymeleaf对象的使用:日期对象
  2. Good start is a half success(2019-04-07)
  3. MySQL 57安装部署(Zip版)(Windows版)
  4. 记一次job不跑的问题
  5. ios App 开发指南
  6. 《深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应》
  7. flex.css声明式布局
  8. 将静态页面部署到github.io
  9. AJAX 实现form表单提交
  10. Mybatis智能标签