爬虫从入门到放弃——爬虫的基本原理

Posted heshen175

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫从入门到放弃——爬虫的基本原理相关的知识,希望对你有一定的参考价值。

 爬虫的基本原理:https://www.cnblogs.com/zhaof/p/6898138.html

这个文章写的非常好,把爬虫 的基本思路解释的很清楚的。

 

一、介绍工具(用什么爬)

1、Python IDLE就是用了创建、运行、测试和调试python的工具。

技术分享图片

集成开发环境:用于程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。就是集成了代码编写功能、分析功能、编译功能、debug功能等一体化的开发软件套。

后面我学习python,老师教的用得这几个工具,后面会一 一介绍。

技术分享图片

文本类:

IDLE:是Python 自带、默认、常用、入门级的Python编辑工具。对于入门、要求功能简单,代码不超过300行的同学,这玩意儿就很实用。

sublime text :专门为程序员开发第三方专用程序员工具。编写体验好,专业程序员喜欢。

集成类工具

wing :收费、调试丰富、版本同步,适合多人共同开发。

visual studio &PTVS :微软提供、调试丰富。

Eclipse pydev :开源IDLE开发工具,要有一定的开发经验。

PyCharm:简单、集成度高,适合复杂项目。

abaconda:开源免费、支持800个第三方库。

 

2、爬取数据用到的工具

requests:用来爬取HTML。页面、自动提交请求的。(模拟人的动作)

robots 协议:网络爬虫协议,去爬取东西时要遵循的规矩。

beautiful soup :把爬取回来的东西解析了

正则表达式:用来提取已经解析好的,你要的东西。

 

3、一系列的安装

安装requests库(前提要有pip),百度里面有很多安装教程。

二、requests库的介绍

requests库的7个主要方法 ,网络安全限制,更多用得用得是GET方法。

 技术分享图片

request基础方法,其他方法在其中分装。

技术分享图片

get方法

技术分享图片

mthod请求方式有7种,就是HTTP协议里面的7种方法,再加上OPTIONS方法,OPTIONS方法是向服务器获取参数。

                         **Kwargs

技术分享图片

 

技术分享图片

技术分享图片

技术分享图片

 

requests库异常

 技术分享图片

    

 

response 对象属性

 技术分享图片

# GET        全部信息
# HEADER     仅头部信息

# Put        全部重置 
# Patch      局部更新              ## 更改操作用户
# POST       后面添加新内容         ## 搜索使用
# DELETE     删除全部

import requests

‘‘‘ 
r = requests.get("http://www.baidu.com")      # 获得全部文本信息 uRL对应的页面内容
print(r.headers)                              # 头部信息
print(r.text)                                 # seem is also all information
‘‘‘

# requests.head
‘‘‘
r2 = requests.head("http://www.baidu.com")       # just head information
print(r.headers)                                 # head information
print(r2.text)                                   # no ! because just get the head information
‘‘‘

#
payload = {"key1":"value1","key2":"value2"}
r3 = requests.post("http://www.baidu.com",data=payload)
print(r3.text)

 

---------------------------------------------------------------------------------------------------------------------------------------------------  分割线

  

三、HTTP协议

我们去爬URL,就得知道URL遵循HTTP协议,

 http 协议对资源的操作,http协议和requests库方法一一对应。

 技术分享图片

技术分享图片

四、robots协议

爬虫需要遵循的规则,告知你那些能爬,那些不能爬。

技术分享图片

 

技术分享图片


‘‘‘
import requests
r = requests.get(‘https://item.jd.com/13115733485.html‘)
print(r.status_code)
print(r.encoding)
print(r.text)
‘‘‘

‘‘‘
import requests
url = ‘https://item.jd.com/13115733485.html‘
try:
    r = requests.get(url, timeout=30)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])       #显示前1000的字符
except:
    print("404")
‘‘‘

import requests
def getHTMLText(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   # 如果状态是200,引发异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "404"

if __name__ == "__main__":       #证明小明是自己,不用在执行该代码了
    url = "https://item.jd.com/13115733485.html"
    print(getHTMLText(url)[:1000])

 

五、response 库 用来获取网站信息

import requests
r = requests.get("http://www.baidu.com")

print(r.status_code)           # HTTP请求的返回状态,200表示连接成功。404表示失败
print(r.text)                  # HTTP响应内容的字符串形式,即,uRL对应的页面内容。
print(r.encoding)              # 从HTTP header中猜测的响应内容编码方式
print(r.apparent_encoding)     # 内容中分析出的响应内容编码方式
print(r.content)               # 响应内容的二进制形式 (处理图片,视频等使用)

r.encoding = r.apparent_encoding # 转化编码   r.apparent_encoding  根据它的结果转码
print(r.text)

 六、通用代码框架

def getHTMLText(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   # 如果状态是200,引发异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "404"

if __name__ == "__main__":      # 证明小明是自己人,不用在执行这段代码
    url = "http://www.baidu.com"
    print(getHTMLText(url))

●涉及到异常处理用Python的 try -- except 语句。

try语句里面有四句,第一句是get方法、第二句判断是否链接异常、第三句用表兄弟替代encoding去找编写格式,第四句返回内容。

●def 是自定义函数的意思

●if __name__ == ‘__main__‘ 

通俗的理解__name__ == ‘__main__‘:假如你叫小明.py,在朋友眼中,你是小明(__name__ == ‘小明‘);在你自己眼中,你是你自己(__name__ == ‘__main__‘)

if __name__ == ‘__main__‘的意思是:当.py文件被直接运行时,if __name__ == ‘__main__‘之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == ‘__main__‘之下的代码块不被运行。

相信参考这里:https://blog.csdn.net/yjk13703623757/article/details/77918633/

 

以上是关于爬虫从入门到放弃——爬虫的基本原理的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫从入门到放弃之爬虫的原理

python爬虫从入门到放弃之爬虫的原理

Python爬虫从入门到放弃之 Scrapy框架的架构和原理

爬虫从入门到放弃 - 纯新手学习-爬虫基本数据库安装

python爬虫从入门到放弃之 Urllib库的基本使用

python爬虫从入门到放弃之 Urllib库的基本使用