首页 > 其他分享 >爬虫的基本框架

爬虫的基本框架

时间:2022-11-08 21:11:06浏览次数:45  
标签:基本 rr 框架 encoding url get 爬虫 kwargs print

"""
-*- coding: utf-8 -*-

@Author : XiongShuai
@Time : 2022/11/1 23:53
@File : .py
"""
import requests as rq
import time
str_url = "http://www.baidu.com"
# http协议的解释如下:
# HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
# 它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
# 这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。

# www的解释如下:
# 代表一个Web(万维网)服务器;

r = rq.get(str_url) # get构造一个向服务器请求资源的request对象; r代表返回一个包含服务器资源的Response对象
'''
r的属性如下:
r.status_code:http请求的返回状态,200代表返连接成功,其它(如404)代表访问异常
r.text:http响应内容的字符串形势,即url对应的页面内容
r.encoding:从http header 中猜测的响应内容编码方式,即为你所预想预设的编码;若不设置,则返回网址本身的编码的显示
r.content:http响应内容的二进制形势
r.apparent_encoding:从内容分析出响应内容编码方式(备用编码方式),即为服务器返回不乱码的编码
(两种编码解释如下:encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,
则无法解析中文,这是乱码的原因apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确。
当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。
版权声明:本文为CSDN博主「想进步的小孟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37701945/article/details/104495131)
'''

print("状态码是:" + str(r.status_code))
r.encoding = "utf-8"
print("网页内容是:")
print(r.text)
print(type(r))
print(r.headers) # 返回get请求获得页面的头部信息
print(r.encoding)
print(r.apparent_encoding)


# 爬虫通用代码框架
# import requests
def getHTMLText(url):
"""爬虫通用代码框架"""
try:
rr = rq.get(url, timeout=30)
# print(rr.status_code) #此处前面报错,则走不进去
rr.raise_for_status() # 若状态不是200,则error
rr.encoding = r.apparent_encoding
return rr.text
except:
#print("Error is:" + str(rr.status_code))
return "ERROR"


def get_time():
t = time.gmtime()
print(time.strftime("%Y-%m-%d %H:%M:%S", t))

if __name__ == "__main__":
url = "https://www.baidu.com"
for n in range(0,1):
n += 1
print("第" + str(n) + "次开始")
get_time()
print(getHTMLText(url))
get_time()
print("第" + str(n) + "次开结束")

# Requests库的7个主要方法
'''
requests方法 说明
.request(method,url,**kwargs):构造一个请求,支撑一下各种方法的基础
method:请求方式,对应于get/put/post等七种(多了一个opinions:不常用,获取一些服务器跟客户端能够打交道的参数)
url:获取页面的url链接
**kwargs:控制访问的参数,共13个
params:字典或者字节序列中,作为参数增加到url中
data:字典或字节序列或文件对象,作为Request的内容
json:JSON格式的数据,作为Request的内容
headers:字典,HTTP定制头
cookies:字典或cookieJar,Request中的cookie
auth:元祖,支持HTTP认证功能
files:字典类型,输出文件
timeout:设定超时时间,秒为单位
proxies:(English:代理)字典类型,设定访问代理服务器,可以增加登录认证(爬虫防反追踪)
allow_redirects:True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL认证开关
cert:本地SSL证书路径
.get(url,params=None,**kwargs):获取HTML网页的主要方法,对应于HTTP的GET~~~***最常用的****
url:获取页面的url链接
**kwargs:控制访问的参数,共12个(request中params之外的12个参数)
.head(url,**kwargs):获取HTML网页头部信息的方法,对应于HTTP的HEAD
url:获取页面的url链接
**kwargs:控制访问的参数,共13个(与request一样)
.posts(url,data=None,json=None,**kwargs):向HTML网页提交POST请求方法,对用于HTTP的POST
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:控制访问的参数,共11个(除data与json之外的11个参数)
.put(url,data=None,**kwargs):向HTML网页提交PUT请求的方法,对应于HTTP的PUT
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
**kwargs:控制访问的参数,共12个(除data之外的12个参数)
.patch(url,data=None,**kwargs):向HTML网页提交局部修改请求,对应于HTTP的PATCH(English:斑点)
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
**kwargs:控制访问的参数,共12个(除data之外的12个参数)
.delete(url,**kwargs):向HTML页面提交删除请求,对应于HTTP的DELETE
url:拟删除页面的url链接
**kwargs:控制访问的参数,共13个
'''

# Robots协议介绍
'''
Robots Exclusion Standard 网络爬虫排除标准
作用:网站告知网络爬虫哪些页面可以抓取,哪些不行
形式:在网站根目录下的robots.txt文件
Ex:
https://www.qq.com/robots.txt
https://www.baidu.com/robots.txt
Robots协议的使用:
网络爬虫:自动或人工识别robots.txt,再进行内容爬虫
约束性:Robots协议虽是建议但非约束性,网络爬虫可以不遵守,但存在法律风险
'''

'''
以下是例子
'''
"""
-*- coding: utf-8 -*-

@Author : XiongShuai
@Time : 2022/11/8 18:15
@File : .py
"""
import requests as rq
import os
keyword = "Python"
strurl = "http://www.so.com/s"
kv = {"q": keyword}
try:
rr = rq.get(strurl,params=kv)
print(rr.raise_for_status())
print(len(rr.text))
except:
print("Error")
else:
print("Successful")
strposition = r"D:/game/"
strurl = "https://img9.doubanio.com/view/subject/l/public/s27305174.jpg"
path = strposition + strurl.split("/")[-1]
try:
if not os.path.exists(strposition):
os.mkdir(strposition)
if not os.path.exists(path):
rr = rq.get(strurl)
print(rr.status_code)
with open(path, "wb") as f:
f.write(rr.content)
except:
print("Fail!!!")
else:
print("Successfully!!!")

标签:基本,rr,框架,encoding,url,get,爬虫,kwargs,print
From: https://www.cnblogs.com/xiaoxiaobear3/p/16871230.html

相关文章

  • HDL基本语法
    1.在本模块产生,且在always下的代码使用reg在本模块产生,例化产生的使用wire(即不是always的)2.参数parameterparameter   CNT_C_W=12;一句话可以直接进行替......
  • CSS框架 --- Windin.css + vite + vue3.0 + Vscode的配置
    前沿:一款轻量级的css库类似于bootstrap的css库但是更轻量不会初始化就全量加载进来  按需加载前端开发中可以减少很多样式代码减少冗余样式代码非常nice!官网......
  • ODPS基本概念
    什么是ODPS?开发数据处理服务(OpenDataProcessingService,简称ODPS),2016年后更名MaxComputer。ODPS是一种由阿里云自主研发,针对TB/PB级数据、实时性要求不高的分布式处理服......
  • 700003 TXT 建筑工程施工图的基本知识
    根据正投影原理及建筑工程施工的规定画法,把一房屋的全貌及各个细微局部完全地表达出来,这就是房屋建筑工程施工图。建筑工程施工图是表达设计思想,指导工程施工的重要技术文......
  • Quartz-定时任务框架
    一、新建.NETFramework4控制台应用程序 ConsoleApP40二、选择ConsoleApP40右键管理NuGet程序包(N)... 输入 Quartz(为了测试方便请选择2.5.0版本)  添......
  • 7个JavaScript中的基本数组方法
    原文| https://javascript.plainenglish.io/7-essential-array-methods-in-javascript-you-need-2021-246e2f3d6052原译|杨小二如果你正在寻找从数组中添加、删除或查找......
  • C基础学习笔记——第01天 linux介绍和基本命令
    在学习C基础总结了笔记,并分享出来。01-C基础第01天(linux介绍和基本命令) 目录和路径目录和路径的含义:目录:又称为文件夹,是包含所有的文件;路径:是反映目录和文件的位置【绝对......
  • Flask框架:运用Ajax轮询动态绘图
    Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echart绘图库进行图......
  • Flask框架:运用Ajax轮询动态绘图
    Ajax是异步JavaScript和XML可用于前后端交互,在之前《Flask框架:运用Ajax实现数据交互》简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echart绘图库进行图......
  • 1.0 新建VSTO项目 并使用Excel880VSTO框架改善编程体验
    小目标:VSTO新建Excel插件项目,并使用VSTO880框架改善编码体验如何创建全新的VSTO插件项目注意项目目录尽量保持和我的教程目录一致设置在D:\VSTO880\Project注意框架版......