Python爬虫

爬虫流程

爬虫流程:获取网页内容 -->  解析网页内容 --> 储存或分析数据 

爬虫规则:

1、不要爬取公民隐私数据

2、不要爬取受著作保护的内容

3、不要爬取国家事务、国防建设、尖端科学计数领域的计算机系统等

4、请求数量和频率不能太高,否则可能无异于DDos攻击(DDos攻击就是通过给服务器发送海量高频的请求,让网站资源被耗尽,无法服务其他正常用户)

5、网站如果明显做了反爬限制,比如有些内容要登录后才能查看,或者是有验证码等限制机器的机制,就不要去强行突破

6、可以通过查看网站的robots.txt文件,了解可爬取的网页路径范围,这个文件会指明那些网页允许被爬取,哪些不允许被爬取。有些还会专门列出针对搜索引擎爬虫的许可范围

HTTP请求和响应

HTTP(Hypertext Transfer Protocol 超文本传输协议)是一种客户端和服务器之间的请求-响应协议

请求和响应格式,可以参考我之前写的博客:Http请求协议包和Http响应协议包_http请求包_丘桔的博客-CSDN博客

用Python Requests发送请求

安装Python Requests库:

pip install requests        #这句要在cmd中运行

使用 requests库:

import requests

head = {"User-Agent":"Mozilla/5.0(Windows NT 10.0; Win64; x64)"}
response = requests.get("http://books.toscrape.com/", headers = head)
if response.ok:
    print(response.text)
else:
    print("请求失败")

补充:传入headers可以帮我们把爬虫程序,伪装成正常浏览器。我们正常用浏览器访问网页时,浏览器会发送get请求,并且请求头的User-Agent会自动带有浏览器的类型、版本、电脑操作系统等,用代码发送请求的话,就不会带有这些浏览器相关信息,服务器可以通过这点判断进来的请求是来自浏览器还是程序。有些网站只想服务真正的用户,所以会根据User-Agent拒绝来自程序的请求。这种时候,可以用过篡改headers的User-Agent属性,把代码发送的请求,伪装成浏览器的请求。

运行结果:

response.text属性的返回结果是网页的源码

用Python Requests拿到豆瓣源码

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 SE 2.X MetaSr 1.0"
}
response = requests.get("https://movie.douban.com/top250", headers = headers)
print(response.text)

用Beautiful Soup解析HTML

安装Beautiful Soup:

pip install bs4

找出books.toscrape网站中所有的价格:

from bs4 import BeautifulSoup
import requests
content = requests.get("http://books.toscrape.com/").text
soup = BeautifulSoup(content,"html.parser")
all_price = soup.findAll("p",attrs={"class": "price_color"}) #找出所有class="price_color"的p标签,返回的是一个数组
for price in all_price:
    print(price.string[2:]) #从下标为2开始截取,原来的£51.77,截取之后变成51.77

找出books.toscrape网站中所有的书名:

from bs4 import BeautifulSoup
import requests
content = requests.get("http://books.toscrape.com/").text
soup = BeautifulSoup(content,"html.parser")
all_h3 = soup.findAll("h3") #找到所有的h3标签
for h3 in all_h3:
    title_a = h3.find("a") #find("a")是返回第一个a标签,因为每个h3里面只有一个a标签,就不需要用findAll()了
    print(title_a.string) #返回标签中的字符串

获取豆瓣电影top250的所有标题

from bs4 import BeautifulSoup
import requests

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 SE 2.X MetaSr 1.0"
}
for start_num in range(0,250,25):
    content = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers = header).text
    soup = BeautifulSoup(content,"html.parser")
    all_hd = soup.findAll("div",attrs={"class":"hd"})
    for hd in all_hd:
        hd_span = hd.find("span")
        print(hd_span.string)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/24066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MOTOTRBO CPS2.0安装与写频流程

一、安装MOTOTRBO CPS2.0写频软件 安装MOTOTRBO CPS2.0写频软件,选择安装软件的电脑系统必须WIN7以上 1.解压CPS2_2.21.61.0.zip至当前文件内 2. 双击MOTOTRBO_CPS_2.0.exe安装文件 3. 选择安装语言中文(简体),点击确定 4.点击下一…

「实在RPA·人社数字员工」促进人力社保数字办公战略转型

一、人力社保部门数字化转型的重要性 伴随着国家放宽人力资源市场准入条例,多次出台相关扶持政策,市场竞争加剧,后疫情时代格局的大变局,如何提高服务质量和效率,如何降本增效,成为人力资源和社会保障行业…

Educational Codeforces Round 139 (Rated for Div. 2)

Educational Codeforces Round 139 (Rated for Div. 2) Problem - 1766E - Codeforces 显然我们可以把0序列的贡献单独算: i*(n-i1) 考虑只存在1,2,3的情况. 首先通过,观察到一个重要性质: 最多只有三种序列. 含有3或纯1或纯2型.纯1或纯2型纯2或纯1型 我们每次添加…

hugging face开源的transformers模型可快速搭建图片分类任务

2017年,谷歌团队在论文「Attention Is All You Need」提出了创新模型,其应用于NLP领域架构Transformer模型。从模型发布至今,transformer模型风靡微软、谷歌、Meta等大型科技公司。且目前有模型大一统的趋势,现在transformer 模型不仅风靡整个NLP领域,且随着VIT SWIN等变体…

什么是高性能计算实习生?做高性能计算有前景吗?

随着大模型和算力时代的大火,高性能计算实习的岗位越来越多了,各个大厂都在码人,百度、小米、字节、华为等等,也有很多网友晒出了面试一众知名芯片企业的面经和笔试题。 但是依然有很多朋友不清楚什么是高性能计算实习生&#xf…

YOLOv5白皮书-第Y4周:common.py文件解读

目录 0.导入需要的包和基本配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要类2.1 非极大值抑制(NMS)2.2 AutoShape2.3 Detections2.4 Classify 🍨 本文为&am…

掌握了它,软件测试拿下25K轻轻松松!

了解软件测试这行的人都清楚,功能测试的天花板可能也就15k左右,而自动化的起点就在15k左右,当然两个岗位需要掌握的技能肯定是不一样的。 如果刚入门学习完软件测试,那么基本薪资会在7-8k左右,这个薪资不太高主要是因…

STM8、STM8S003F3P6 实现PWM控制电机HAS10227

背景 有个项目需要控制一台风机的转速,使用STM8S003F3P6 输出PWM控制,这里就详细记录一下调试记录 原理图 原理图比较简单,电机接口CN3 电机接口原理图 与MCU管脚连接位置如下图 首先我们要明白电机的原理 电机 简单来说就是 实现电能与…

锁的内存语义

锁的释放和获取的内存语义 操作锁的释放和获取的内存语义类比volatile对锁释放和锁获取的内存语义做个总结当线程 释放锁 时JMM会把该线程对应的本地内存中的共享变量刷新到主内存中锁释放与 volatile写 有相同的内存语义线程A释放一个锁,实质上是线程A向接下来将…

功率信号源的使用方法有哪些

功率信号源是一种常见的电子设备,主要用于产生各种功率信号,例如直流信号、正弦信号等。功率信号源广泛应用于工业、科研、医疗等领域,例如电机驱动、电子仪器仪表、医疗设备等。本文将详细介绍功率信号源的使用方法和注意事项。 图&#xff…

WMS仓储管理系统解决方案能帮助电子企业解决哪些问题

WMS仓储管理系统解决方案是一种针对仓库管理的软件系统,它能够有效地解决电子企业在仓储管理方面的问题。在电子行业,由于产品的生命周期较短,且需求变化快速,WMS仓库管理系统的应用对于电子企业的管理有着重要的意义。本文将探讨…

【MySQL】MySql的底层数据结构

文章目录 前言索引结构及查找算法不适合做MySql的数据结构及其原因 一、BTree和BTree的引出1.1 BTree数据结构2.2 BTree数据结构 二、计算m阶,即BTree该取多少合适总结 前言 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢?又是怎么去查找…

华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)

华为云HECS云服务器即云耀云服务器,类似于阿里云和腾讯云的轻量应用服务器,HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月,华为云百科分享华为云HECS云服务器租用费用及CPU性能详解: 目录 华为云…

《数据库应用系统实践》------ 包裹信息管理系统

系列文章 《数据库应用系统实践》------ 包裹信息管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明&…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝? 1.浅拷贝(浅复制) //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

解说天下之操作系统

解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn),云晶(https://www.yunjingxz.com)创始人根据多年从业经验, 从操作系统的起源,应用分类, 设计分类,以及资源使用角度对操作系统进…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

思维导图到底有多少种?

思维导图是一种非常实用的工具,它可以帮助我们更好地组织和表达我们的思想。在日常生活和工作中,我们可以使用各种不同类型的思维导图来解决不同的问题。下面,我将介绍一些常见的思维导图类型以及如何使用ProcessOn思维导图软件制作思维导图。…

ThreadLocal的应用

1. ThreadLocal 是什么 JDK 对ThreadLocal的描述为: 此类提供线程局部变量。这些变量与普通变量的不同之处在于,每个访问一个变量的线程(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal 实例通常是类中的私有…

Centos7安装Java8(在线安装避坑详细安装)

开篇语: 喜欢在一个明媚阳光的午后 坐在那夕阳斑驳的南墙下 听着风起 闻着花香 望着远山 身边是你 如此便觉得很好 1.查看目前环境 rpm -qa|grep jdk在这里我们会发现,原有系统安装有jdk,如果对于jdk有要求,我们就需要重新安装jdk…