python爬虫基础知识的总结

2023-10-28

什么是爬虫?

一、爬虫概述
简单来说,爬虫就是获取网页并提取和保存信息的自动化程序。
1.获取页面(如urllib、requests等)

2.提取信息(Beautiful Soup、pyquery、lxml等)

3.保存数据(MySQL、MongoDB等)

4.自动化程序

二、关于JS渲染的页面?
1.使用urllib、requests 等库请求当前页面时,只是得到html代码,它不会帮助我们去继续加载这个JS文件。

2.使用基本HTTP请求库得到的源代码可能和浏览器的页面源代码不太一样,对于这种情况,我们可以分析其后台Ajax接口,也可以使用Selenium、
Splash 这样的库来实现模拟JS渲染。

三、会话和Cookies
...

四、代理的基本原理

1.代理实际上指的就是代理服务器,代理网络用户去取得网络信息。形象的说,网络信息中转站。

本机 -----------> 代理服务器 -------------->  Web服务器
        请求                     请求

本机 <----------- 代理服务器 <--------------  Web服务器
         响应                       响应

这样我们同样可以正常访问网页,这过程中Web服务器识别出真是IP 就不再是我们本机IP了,就可以成功IP伪装,这就是
代理的基本原理

2.代理的作用

1)突破自身IP访问限制,访问一些平时不能访问的站点
2)访问一些单位或团体内部资源
3)提高访问速度
4)隐藏真是IP,防止自身IP被封锁

3.爬虫代理
对于爬虫来说,爬虫爬虫速度过快,爬虫可能遇到同一个IP访问过去频繁的问题,此时网站就会让我们输入验证码或者直接封锁
IP,这样带给爬虫极大不便。
使用代理隐藏真是IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断的更换代理,就不会被封锁,可以
达到很好的效果

4.代理分类
1)FTP 代理服务器:访问 FTP 服务器,上传。下载以及缓存功能,端口 21、2121 等
2)HTTP 代理服务器:访问网页,内容过滤和缓存功能,端口 80、8080、3128等
3)SSL/TLS 代理:访问加密网站,一般有SSL 或TLS加密功能(最高支持128位加密功能),端口 443
4)RTSP 代理:Real 流媒体服务器,一般有缓存功能,端口:554
5)Telnet 代理:主要用于telnet远程控制(黑客入侵计算机时常用于隐藏身份),端口为23
6)POP3/SMTP 代理:POP3/SMTP 方式收发邮件,一般有缓存功能,端口:110/25


基本库的使用

一、urllib

在Python3中,urllib已经不存在urllib2,统一为urllib,官方文档链接:https://docs.python.org/3/library/urllib.html
urllib库,是Python 内置的HTTP请求库
它包含如下四个模块:
request:基本的HTTP请求模块
error:异常处理模块
parse:工具模块
robotparser(用的比较少):识别网站的robots.txt文件

1.urlopen()
urllib.request模块提供最基本的HTTP请求方法,同时它还带有处理授权验证码、重定向、浏览器Cookies以及其他内容。

import urllib.request
response = urllib.request.urlopen('https://www.python.org')
print(type(response))
output: <class 'http.client.HTTPResponse'>
进行分析,HTTPResponse类型对象,包含read(),readinfo(),getheader(name),getheaders(),fileno()等方法,以及msg、version
、status、reason、debuglevel、closed等属性。

urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)
data (附加数据)、timeout(超时时间)等
# timeout 参数
import socket
import urllib.error
import urllib.request

try:
    response = urllib.request.urlopen("http://httpbin.org/get", timeout=0.1)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')


#其他参数
除了data参数和timeout参数外, 还有 context 参数,它必须是ssl.SSLContext 类型,用来指定SSL 设置。
此外, cafile 和 capath 这两个参数分别指定 CA证书和它的路径,这个在请求 HTTPS链接时会有用。

前面讲解了 urlopen() 方法的用法, 通过这个最基本的方法, 我们可以完成简单的请求和网页抓取。 若需要更加详细的信息,可以参考
官方文档: https://docs.python.org/3/library/urllib.request.html
2.Request()
class urllib.request.Request(url, data=None, headers={}, orgin_req_host=None, unverifiable=False, method=None)

 示例:

from urllib import request, parse

url = 'http://httpbin.org/post'
headers = {
    'USER-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2132.2 Safari/537.36',
    'Host':'httpbin.org'
}
dict = {
    'name':'Germey'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url = url, headers=headers, data = data, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

3、高级用法

1)文件上传

# requests 可以模拟提交一些数据

# import requests 

# files = {'file': open('favicon.ico', 'rb')}

# r = requests.post("http://www.baidu.com", files = files)

# print(r.text)

2)Cookies

 使用requests, 获取和设置Cookies 只需一步即可完成

示例1:

import requests
r = requests.get("https://www.baidu.com")
print(r.cookies)
for key,value in r.cookies.items():
    print(key + '=' + value)

运行出结果,发现是RequestCookieJar类型,然后用items() 方法将其转化为元组组成在列表,遍历出

Cookie 的名称和值

示例2:

import requests

cookies = 'tgw_l7_route=9553ebf607071b8b9dd310a140c349c5; ' \
          '_zap=74b7fdae-0800-4485-85b3-aa07447a91cf;' \
          ' _xsrf=vyBIBWAXr6lQuxsCNIzKwJSb4zjqxRaS;' \
          ' d_c0="APAh_lT6mA6PTlfodNHDUqm1slkUFNb60xo=|1543564338";' \
          ' capsion_ticket="2|1:0|10:1543564343|14:capsion_ticket|44:YzRlNGViM2IxNjY5NDVkNDhlOGM1OTM4ZmFjODVjMDQ=|fcd395175baab35d7a674f5b7639097551230b1a0c5be9d34bc5ebe4b1f3f0f0"; ' \
          'z_c0="2|1:0|10:1543564360|4:z_c0|92:Mi4xcUthWUF3QUFBQUFBOENILVZQcVlEaVlBQUFCZ0FsVk5TRHJ1WEFEdWdEQ29zYTJQUzVNMDNCejdGNldZUnNCdVBB|8a367dc007da80cb3a844af327cf67cfe9b248f95cf5e585c46be5d0b396caab"; ' \
          'tst=r; ' \
          'q_c1=ab8ffad7fa864108bda8ff3971b5054b|1543564362000|1543564362000'
jar = requests.cookies.RequestsCookieJar()
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2132.2 Safari/537.36',
    'Host':'www.zhihu.com'
}
for cookie in cookies.split(';'):
    key, value = cookie.split('=', 1)
    jar.set(key, value)
    r = requests.get('http://www.zhihu.com', cookies=jar, headers= headers)
    print(r.text)

3、会话维持

1)Cookies 会话,请求这个网址时,可以设置一个Cookie,名称叫做number,内容

是123456789, 随后访问http://httpbin.org/cookies

import requests
requests.get("http://httpbin.org/cookies/set/number/123456789")
a = requests.get("http://httpbin.org/cookies")
print(a.text)

结果如下:

随后,使用session()

import requests

s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456789")
b = s.get("http://httpbin.org/cookies")
print(b.text)

output:

以上Cookie与Session可以对比出,利用Session,可以做到模拟同一个会话而不用担心Cookies的

问题。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫基础知识的总结 的相关文章

随机推荐

  • Vue常用的组件库大全【前端工程师必备】

    Vue常用的组件库大全 前端工程师必备 一 移动端 常用组件库 1 Vant ui 2 Cube UI 3 VUX 4 NuTUI 3 0 6 倒计时组件库 7 表格组件库 8 富文本编辑器 9 Loading加载动画组件 10 Mint
  • 【论文解读】元学习:MAML

    一 简介 元学习的目标是在各种学习任务上训练模型 这样它就可以只使用少量的训练样本来解决新任务 论文所提出的算法训练获取较优模型的参数 使其易于微调 从而实现快速自适应 该算法与任何用梯度下降训练的模型兼容 适用于各种学习问题 包括分类 回
  • semantic-ui的使用

    好久又没有写博客了 总是以忙为借口 哎 知识如果只图一时的学习之快 不加以总结输出 总是会忘记 希望自己可以好好规划一下吧 最近任务需要 学习了semantic ui这个前端框架 这里先基本记录一下如何去使用它 我在网上找到了一个seman
  • python-半省略号、三个点、点点点、...符号的用法小结

    一 符号 省略号 和Ellipsis对象 在Python中 一切皆对象 符号 在python中其实也有相应的对象 Ellipsis 如下面的代码所示 和Ellipsis的地址是相同的 打印 显示的结果是Ellipsis 打印 的类型显示el
  • 直流输入过压保护电路

    在嵌入式产品设计中 许多都为电池供电或者USB接口供电 当误操作使供电电压高于芯片工作电压时 就会导致芯片烧坏 带来严重的后果 因此在电源的输入端到芯片的供电输入端 还是很有必要加一个过压保护电路 当输入电压超过设定值 就切断电源 保护芯片
  • java登录远程服务器

    加入ssh的依赖 ch ethz ganymed ganymed ssh2 262 代码实现 因为执行SHELL脚本的时候可能是给出正常的返回值 也可能是异常的信息 这里需要一个JAVA Bean来接收这两个消息 代码如下 import j
  • OpenMMLab开源库总结——笔记1

    摘要 很高兴能加入OpenMMLab AI实战营 成为第二期4班的一名学员 OpenMMLab经过几年的发展和沉淀 其开源项目已经覆盖到计算机视觉的各个领域 OpenMMLab 为香港中文大学 商汤科技联合实验室 MMLab 开源的算法平台
  • mysql软件架构

    客户端是你的业务应用 怎么连接mysql server 一般都是用jdbc Java odbc C 客户端连接mysql 服务 发指令发sql语句等 文件系统 操作系统的文件系统 比如windows的文件系统 linux的文件系统 综上所述
  • 蓝桥杯模拟-排列序数

    问题 X星系的某次考古活动发现了史前智能痕迹 这是一些用来计数的符号 经过分析它的计数规律如下 为了表示方便 我们把这些奇怪的符号用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1 abcd
  • 数据结构例题--迷宫

    迷宫 问题要求 定义一个二维数组N M 其中2 lt N lt 10 2 lt M lt 10 如5x5数组 如下所示 int maze 5 5 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1
  • 记录红米k40解BL、Root、装XPOSED

    一 前言 刚从一加转到红米 不得不吐槽虽然一加系统简陋但社区搞基搞机氛围非常好 官方支持root也保修和第三方ROM下大神层出不群 小米的社区放眼望去基本没人讨论root 第三方ROM 都是各种吐槽提问但没人回复的帖子 既然找不到教程那就按
  • qt,信号槽连接不成功原因

    在 Qt 中 信号槽连接不成功的原因可能有很多 下面是一些可能的原因和解决方法 1 信号和槽的声明不匹配 请确保信号和槽的参数类型和数量完全匹配 如果它们不匹配 连接将不会成功 检查信号和槽的声明 确保它们是兼容的 2 信号和槽的作用域问题
  • JSON数组,JSON对象,数组的区别与基本操作整理

    JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集 数据在名称 值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称 值对 JSON 数据的书写格式是 名称 值对 名称 值对组合中的名称写在前面
  • 三大WEB服务器对比分析(apache ,lighttpd,nginx)

    一 软件介绍 apache lighttpd nginx 1 lighttpd Lighttpd是一个具有非常低的内存开销 cpu占用率低 效能好 以及丰富的模块等特点 lighttpd是众多OpenSource轻量级的web server
  • 微信小程序开发(七) swiper 组件

    微信小程序swiper组件 banner 图 广告页 splash 实现效果 代码 js Page data iamgeUrls https img zcool cn community 0106445dc28607a801209e1f62
  • C++11右值 &&引用

    C 11右值 引用 2017年06月06日 11 56 25 Ink cherry 阅读数 2394 标签 C 右值引用 完美转发 个人分类 C C 感觉这篇讲的比较深入细致了 存一下 via http www cnblogs com Ti
  • [技术经理]02 什么是技术经理?

    目录 01什么是技术经理 02总结 01什么是技术经理 什么是技术经理 我用一句话概括为 专业技术团队的管理者 技术经理 是一种管理职位 通常是在软件开发 互联网等科技公司或技术团队中担任 技术经理的职责 是管理和协调技术团队 确保团队能够
  • java写一个圆类求面积_java编程:定义一个圆类,属性为半径,方法为对输入的半径计算其周长和面积?...

    展开全部 java编程e68a8462616964757a686964616f31333365633864定义一个类圆属性半径方法 计算周长面积设置半径读取半径急java编程定义一个类 java编程定义一个类圆属性半径 方法计算周长面积设置
  • “3D 元宇宙技术”在汽车新零售领域的应用与实践

    一 引言 随着不久前汽车之家新零售项目震撼发布 我们直击用户看车选车痛点首次提出ABC新体验模式 以元宇宙科技打造沉浸式交互服务 开放元宇宙能源空间站体验店 为用户打造更 有用 的体验 其中 A 是指一站式选车试车服务 All in one
  • python爬虫基础知识的总结

    什么是爬虫 一 爬虫概述 简单来说 爬虫就是获取网页并提取和保存信息的自动化程序 1 获取页面 如urllib requests等 2 提取信息 Beautiful Soup pyquery lxml等 3 保存数据 MySQL Mongo