Python爬虫————爬虫基础

嘻嘻嘻嘻嘻嘻啊 2020-11-13 01:57:32
Python 爬虫 基础


Python爬虫————爬虫基础

一、爬虫概述

什么是爬虫?

爬虫就是抓取网页数据的程序。

网页三大特征:

1.网页都有自己的为唯一的URL(统一资源定位符)来进行定位;
2.网页都使用HTML(超文本标记语言)来描述页面信息;
3.网页都使用HTTP/HTTPS(超文本传输协议)来传输HTML数据。

爬虫设计思路

1.首先确定需要爬取的网页URL地址。
2.通过HTTP/HTTPS协议来获取对应的HTML页面。
3.提取HTML页面里有用的数据:
1)如果是需要的数据,就保存起来。
2)如果是页面的其他URL,继续执行第二步。

二、通用爬虫和聚焦爬虫

通用爬虫

通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网 页下载到本地,形成一个互联网内容的镜像备份。

通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着 整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
在这里插入图片描述

搜索引擎如何获取一个新网站的URL:
1. 新网站向搜索引擎主动提交网址:
2. 在其他网站上设置新网站外链
3. 和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。
通用爬虫的局限性
1.大多情况下,网页里90%的内容对用户来说都是无用的。
2. 搜索引擎无法提供针对具体某个用户的搜索结果。
3. 图片、数据库、音频、视频多媒体等不能很好地发现和获取。
4. 基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。

聚焦爬虫

聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页 抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

三、HTTP和HTTPS

HTTP协议-80端口
HyperTextTransferProtocol, 超文本传输协议是一种发布和接收HTML页面的方法。
HTTPS-443端口
HypertextTransferProtocoloverSecureSocketLayer, 简单讲是HTTP的安全版,在HTTP下加入SSL 层。

HTTP工作原理

网络爬虫抓取过程可以理解为模拟浏览器操作的过程。

浏览器发送HTTP请求的过程:

  1. 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

  2. 当我们在浏览器输入URLhttp://www.baidu.com的时候,浏览器发送一个Request请求去获取http://www.baidu.com的html文件,服务器把Response文件对象发送回给浏览器。

  3. 浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

  4. 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

URL

URL(Uniform/UniversalResourceLocator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
基本格式: scheme://host[:port#]/path/…/[?query-string][#anchor]
在这里插入图片描述

四、客户端HTTP请求

客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:在这里插入图片描述
在这里插入图片描述

请求方法Method

根据HTTP标准,HTTP请求可以使用多种请求方法.
HTTP0.9:只有基本的文本GET功能。
HTTP1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1:在1.0基础上进行更新,新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
在这里插入图片描述

Get 和 Post 详解
  1. GET是从服务器上获取数据,POST是向服务器传送数据
  2. GET请求参数显示,都显示在浏览器网址上,即“Get”请求的参数是URL的一部分。
  3. POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,
常用的请求报头

Host: 主机和端口号
Connection : 客户端与服务连接类型, 默认为keep-alive
User-Agent: 客户浏览器的名称
Accept: 浏览器或其他客户端可以接受的MIME文件类型
Referer:表明产生请求的网页来自于哪个URL
Accept-Encoding:指出浏览器可以接受的编码方式。
Accept-Language:语言种类
Accept-Charset: 字符编码
Cookie:浏览器用这个属性向服务器发送Cookie
Content-Type:POST请求里用来表示的内容类型。
在这里插入图片描述
在这里插入图片描述

五、HTTP响应

HTTP响应由四个部分组成,分别是: 状态行 、 消息报头 、 空行 、 响应正文在这里插入图片描述

响应状态码

在这里插入图片描述
200: 请求成功
302: 请求页面临时转移至新url
307和304: 使用缓存资源
404: 服务器无法找到请求页面
403: 服务器拒绝访问,权限不够
500: 服务器遇到不可预知的情况

Cookie和Session

服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。在这里插入图片描述

六、BS4

BS4简介

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个
工具箱,通过解析文档为tiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
你不需要考虑编码方式,除非文档没有指定一个编一下原始编码方式就可以了。

BS4的4种对象

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,
每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment
2-1. BeautifulSoup对象
2-2. Tag对象
Tag就是html中的一个标签,用BeautifulSoup就能解析出来Tag的具体内容,具体的格式为soup.name,其中name是html下的标签。

七、实例:图片下载器

制作爬虫的基本步骤
  1. 需求分析
  2. 分析网页源代码,配合F12
  3. 编写正则表达式或者其他解析器代码
  4. 正式编写python爬虫代码
需求分析

"我想要图片,我又不想上网搜“
“最好还能自动下载”
……

这就是需求,至少要实现两个功能,一是搜索图片,二是自动下载。

pic_url = re.findall(’“objURL”:"(.*?)",’,html,re.S)

代码实现

"""
图片下载器
"""
# -*- coding:utf-8 -*-
import re
import requests
import os
def downloadPic(html, keyword):
"""
:param html: 页面的源代码
:param keyword: 搜索的关键字
:return:
"""
# (.*?)代表任意多个字符
# ()代表分组, 值返回符合条件的字符串中括号里面的内容;
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)[:5]
count = 0
print('找到关键词:' + keyword + '的图片,现在开始下载图片...')
# each 是每个图片的url地址
for each in pic_url:
try:
headers = {

'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 '
'Mobile Safari/537.36'}
# 获取指定图片的相应对象;
response = requests.get(each, timeout=10, headers=headers)
except requests.exceptions.ConnectionError:
print('【错误】当前图片无法下载')
continue
except Exception as e:
print('【错误】当前图片无法下载')
print(e)
continue
else:
# print(response.status_code)
if response.status_code != 200:
print("访问失败: ", response.status_code)
continue
# ******** 存储图片到本地*******************************
if not os.path.exists(imgDir):
print("正在创建目录 ", imgDir)
os.makedirs(imgDir)
posix = each.split('.')[-1]
if posix not in ['png', 'jpg', 'gif', 'jpeg']:
break
print('正在下载第' + str(count + 1) + '张图片,图片地址:' + str(each))
name = keyword + '_' + str(count) + '.' + posix
filename = os.path.join(imgDir, name)
count += 1
with open(filename, 'wb') as f:
# response.content: 返回的是二进制文本信息
# response.text:返回的字符串文本信息
f.write(response.content)
if __name__ == '__main__':
imgDir = 'pictures'
word = input("Input key word: ")
url = 'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=' + word
try:
response = requests.get(url)
except Exception as e:
print(e)
content = ''
else:
content = response.text
downloadPic(content, word)
版权声明
本文为[嘻嘻嘻嘻嘻嘻啊]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41460135/article/details/98765122

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database