首页 > 编程语言 >python_爬虫基础

python_爬虫基础

时间:2024-07-30 19:11:05浏览次数:12  
标签:python 基础 爬虫 url https print requests com response

python爬虫基础

1、初识爬虫

1.rebots协议

网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是互联网中的约定而已,可以不用遵守。例如:https://www.taobao.com/robots.txt

2.谷歌浏览器插件

● XPath Helper
● Web Scraper
● Toggle JavaScript
● User-Agent Switcher for Chrome
● EditThisCookie
● SwitchySharp

插件下载地址:

  1. https://extfans.com/
  2. https://chrome.zzzmh.cn/#/index
    安装步骤:
    1、在应用商店下载好插件后解压缩,直接拖进去就可以啦:

3.requests发送网络请求以及常用属性

需求:通过requests向百度首页发送请求,获取百度首页数据

import requests

url = "https://www.baidu.com"

response = requests.get(url=url)

print("---状态码如下---")
print(response.status_code)

print("---bytes类型数据:---")
print(response.content)

print("---str类型数据---")
print(response.text)

print("---str类型数据(utf-8)---")
print(response.content.decode("utf-8"))

常用属性如下:
● response.text 响应体str类型
● respones.content 响应体bytes类型
● response.status_code 响应状态码
● response.request.headers 响应对应的请求头
● response.headers 响应头
● response.request.headers.get('cookies') 响应对应请求的cookie
● response.cookies 响应的cookie(经过了set-cookie动作)
● response.url请求的URL

4、iter_content方法

如果下载一个较大的资源,例如一个视频,可能需要的下载时间较长,在这个较长的下载过程中程序是不能做别的事情的(当然可以使用多任务来解决),如果在不是多任务的情况下,想要知道下载的进度,此时就可以通过类似迭代的方式下载部分资源。

使用iter_content

r = requests.get('https://www.baidu.com', stream=True)

with open('test.html', 'wb') as f:
    for chunk in r.iter_content(chunk_size=100):
        f.write(chunk)

在获取数据时,设置属性stream=True
● 如果设置了stream=True,那么在调用iter_content方法时才会真正下载内容
● 如果没设置stream属性则调用requests.get就会耗费时间下载

5、重定向与历史请求

思考:为什么打印出来的url不是请求的url呢?
想要搞清楚这个问题,就要知道requests的重定向问题。

requersts的默认情况
默认情况下,requests发送的请求除了方式为HEAD之外,其余的请求例如GET、POST等都是能自动进行重 定向的
这也就是为什么上面明明访问的是http://www.baidu.com而打印出来之后是https://m.baidu.com/?from=844b&vit=fps的原因

取消自动重定向
在发送请求的时候,可以通过如下的设置,取消requests模块的自动重定向功能

requests.get(url, allow_redirects=False)

6、SSL证书问题

在浏览网页时,可能会遇到以下这种情况:

出现这个问题的原因是:ssl证书不安全导致的。

7、retrying模块的使用

使用超时参数能够加快我们整体的运行速度。但是在普通的生活中当我们使用浏览器访问网页时,如果发生速度很慢的情况,我们会做的选择是刷新页面。那么在代码中,我们是否也可以刷新请求呢?
在本小节中我们使用retrying模块来完成需求。

# 安装指令如下:
pip install retrying -i https://pypi.tuna.tsinghua.edu.cn/simple

作用:

  1. 使用retrying模块提供的retry模块
  2. 通过装饰器的方式使用,让被装饰的函数反复执行
  3. retry中可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行
import requests
from retrying import retry

num = 1


@retry(stop_max_attempt_number=3)
def _parse_url(url):
    global num
    print("第%d次尝试" % num)
    num += 1
    headers = {
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
    }
    # 超时的时候会报错并重试
    response = requests.get(url, headers=headers, timeout=3)
    # 状态码不是200,也会报错并重试
    assert response.status_code == 200  # 此语句是"断言",如果assert后面的条件为True则呈现继续运行,否则抛出异常
    return response


def parse_url(url):
    # 进行异常捕获
    try:
        response = _parse_url(url)
    except Exception as e:
        print("产生异常:", e)
        # 报错返回None
        response = None
    return response


if __name__ == '__main__':
    url = "https://chinasoftinc.com/owa"
    # url = "https://www.baidu.com"
    print("----开始----")
    r = parse_url(url=url)
    print("----结束----", "响应内容为:", r)

标签:python,基础,爬虫,url,https,print,requests,com,response
From: https://www.cnblogs.com/pdxt666/p/18333167

相关文章

  • Python - Creating Managed Attributes using properties
    CreatingManagedAttributesusingpropertiesPropertiescanbeusedtocreatedataattributeswithspecialfunctionality.Ifyouwantsomeextrafunctionality(liketypechecking,datavalidationortransformation)whilegettingorsettingadataattribut......
  • Python - Static Methods
    Sometimeswehavetowritemethodsthatarerelatedtotheclassbutdonotneedanyaccesstoinstanceorclassdataforperformingtheirwork.Thesemethodscouldbesomehelperorutilitymethodsthatareusedinsidetheclassbuttheycanperformthei......
  • Tensorflow基础:第一个训练模型
    模型代码:importtensorflowastffromtensorflow.keras.layersimportDense,Flatten,Conv2Dfromtensorflow.kerasimportModel#引入数据fashion_mnist=tf.keras.datasets.fashion_mnist(train_images,train_labels),(test_images,test_labels)=fashion_mnist......
  • python中列表的学习
    列表目录列表列表的定义创建列表列表的索引列表的切片内置函数列表的遍历列表的常用方法(变量.方法名())列表的定义List(列表)是Python中使用最频繁的数据类型,在其他语言中通常叫做数组专门用于存储一串信息列表用[]定义,数据之间使用﹐分隔列表的索引从О开始索引就是数据在列......
  • Python 字节串转Hex字符串(一个久远的问题点总结)
    时间:2024.07.30作者:Yuan  这是一个今天看来似乎有点久远的问题,但是值得被记录和澄清一下!  那是在2022年1月份参与的一个项目中遇到的问题,大概需求是利用SHT40-AD1B-R2芯片,读取环境温度。其实就是通过i2c与这个温度传感器建立通讯,然后读取温湿度信息,对于上位机的......
  • 学完网络安全出去能做什么工作?(非常详细)零基础入门到精通,收藏这一篇就够了
    想要了解学完网络安全工程师就业班后,出去能做什么工作,这个时候会分甲方或是乙方,看个人更偏向哪个岗位。甲方指的是政府、海关、税务机构、高校及其他国有银行、商业银行,以及移动运营商(如中国移动、中国联通、中国电信)和一些大型央企国企,如电力、石油化工、烟草、轨道交通等......
  • [附开题]flask框架的汽车零件维修管理信息平台t6rr1(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车工业的快速发展和汽车保有量的持续增长,汽车零件维修管理已成为汽车后市场的重要组成部分。传统的手工记录和管理方式已难以满足现......
  • [附开题]flask框架的汽车售后管理系统2888o(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着汽车产业的快速发展和消费者购车需求的日益增长,汽车售后服务已成为车企和经销商提升客户满意度、增强品牌忠诚度的重要环节。然而,传统......
  • [附开题]flask框架的社区服务管理系统0f6i9(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的深入和居民生活水平的提高,社区服务需求日益多样化与复杂化。传统的社区服务模式已难以满足居民对于高效、便捷、个性化服......
  • [附开题]flask框架的社区服务系统ff00q(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和居民生活水平的提高,社区作为城市的基本单元,其服务功能日益丰富和多样化。然而,传统社区服务方式在应对日益增长的居民......