爬虫学习1

news2024/12/23 4:23:58

爬虫网站:All products | Books to Scrape - Sandbox

豆瓣网:豆瓣电影 Top 250

我们需要安装一个第三方库来解析爬取到的html内容,终端输入pip install bs4,安装成功后引入需要的模块

 我们先爬取所有的价格

import requests
from bs4 import BeautifulSoup

response1=requests.get("http://books.toscrape.com/").text
soup =BeautifulSoup(response1,"html.parser")#需要解析html
all_price=soup.findAll("p",attrs={"class":"price_color"})#找到要提取内容的标签共同属性
for price in all_price:
    # print(price)
    print(price.string[2:])#只需要字符串第三的一个开始的内容

提取书名

import requests
from bs4 import BeautifulSoup

response1=requests.get("http://books.toscrape.com/").text
soup =BeautifulSoup(response1,"html.parser")
all_name=soup.findAll("h3")
for name in all_name:
    print(name.string)




下面是如果h3标签找不到的话,就需要先找到h3标签再找h3里面的a标签
import requests
from bs4 import BeautifulSoup

response1=requests.get("http://books.toscrape.com/").text
soup =BeautifulSoup(response1,"html.parser")
all_name=soup.findAll("h3")
for name in all_name:
    name1=name.findAll("a")
    for name2 in name1:
        print(name2.string)

爬取豆瓣网上的所有电影名 

请求豆瓣的网站,发现返回的状态码为418

HTTP状态码418是一个非标准的HTTP状态码,被定义为"I’m a teapot"(我是一个茶壶)。这个状态码源自1998年的一个愚人节笑话,被写入了RFC 2324,Hyper Text Coffee Pot Control Protocol(超文本咖啡壶控制协议)。
在实际的Web开发中,有些网站可能会使用这个状态码作为反爬虫策略的一部分。当服务器返回418状态码时,可能是因为服务器认为你的请求是一个爬虫,而不是一个正常的用户请求。

我们需要模拟正式场景下需要传的header,定义一个确定的User-Agent

那我们开始抓包

from bs4 import  BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
response=requests.get("https://movie.douban.com/top250",headers=headers).text
soup=BeautifulSoup(response,"html.parser")
all_title=soup.findAll("span",attrs={"class":"title"})
for title in all_title:
    title=title.string #将提取到的内容的string部分,赋值给一个新的title,但是会出现的是中文名和别名都打印出来
    if "/" not in title:#加个if条件,只打印出来中文名
        print(title)

这样的话就,提取到当前页面的25个电影名,无法提取全部,但是我们可以观察url里面有个值是控制页码的

from bs4 import  BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
for start_num in range(0,250,25):
    response=requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers).text
    soup=BeautifulSoup(response,"html.parser")
    all_title=soup.findAll("span",attrs={"class":"title"})
    for title in all_title:
        title=title.string
        if "/" not in title:
            print(title)

 

将爬取到的内容保存在html文件里 

from urllib.request import urlopen

url="http://www.baidu.com"
resp=urlopen(url)

with open("baidu.html",mode="w",encoding="utf-8")as f:#创建文件
    f.write(resp.read().decode("utf-8"))#保存文件
print("over!")

RE模块的使用

import re

lis = re.findall(r"\d+","我的电话号码是:1587,他的电话号码是:25896")
print(lis)#findall返回的是一个数组

it =re.finditer(r"\d+","我的电话号码是:1587,他的电话号码是:25896")#finditer返回的是一个迭代器,需要.group()
# print(it)#返回内容:
for i in it:
    # print(i)#返回内容如此:<re.Match object; span=(8, 12), match='1587'>
    # <re.Match object; span=(21, 26), match='25896'>
    print(i.group())#返回内容158725896


#search,找到一个结果就返回,返回的结果是match对象,拿数据需要.group()
ir=re.search(r"\d+","我的电话号码是:1587,他的电话号码是:25896")
print(ir.group())

#match是重头开始匹配
s=re.match(r"\d+","1587,他的电话号码是:25896")
print(s.group())


 预加载正则表达式


#预加载正则表达式,把正则表达式和内容分开
obj=re.compile(r"\d+")
rey=obj.finditer("我的电话号码是:1587,他的电话号码是:25896")
for i in rey:
    print(i.group())

 

(?P<分组名字>.*?)

s="""[<div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.7</span>
<span content="10.0" property="v:best"></span>
<span>3024312人评价</span>]"""

objq=re.compile("<span>(?P<star>.*?)人评价</span>",re.S)#re.S:让.能匹配换行符
result=objq.finditer(s)
for i in result:
    print(i.group("star"))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# VSTO读取Excel单元格Value、Value2

对单个单元格的值&#xff0c;需要用object 对象去接 object value (object)oneCellRange.Value; object value2 (object)oneCellRange.Value2; 对矩形范围的值&#xff0c;需要用object[,]去接 object[,] matrixValues (object[,])matrixRange.Value; object[,] matrixV…

【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)

民宿酒店预订管理系统 特色功能&#xff1a; 客户管理&#xff1a;该功能可以帮助民宿管理者更加有效地管理客户信息&#xff0c;包括客户的姓名、电话、地址、身份证号码等&#xff0c;并可以在客户的订单中了解客户的消费情况&#xff0c;从而更好地满足客户的需求&#xff…

【unity】(3) Terrain Editor

Terrain Editor 启动Terrain Editor 创建Terrain: 在Unity的Hierarchy视图中&#xff0c;右键选择 Create > 3D Object > Terrain 来创建一个新的Terrain对象。 打开Terrain Inspector: 选择Hierarchy中的Terrain对象&#xff0c;Inspector视图会显示Terrain的各种属性…

智能水抄表系统是什么?

1.概述&#xff1a;智能水抄表系统的概念与意义 智能水抄表系统是现代科技与水资源管理的完美结合&#xff0c;它利用先进的传感器技术、无线通信技术和数据分析能力&#xff0c;实现了远程、实时的水表读取和管理。这种系统不仅提高了抄表效率&#xff0c;降低了人力成本&…

Canny算子

Canny算子_百度百科 (baidu.com)https://baike.baidu.com/item/Canny%E7%AE%97%E5%AD%90/8821789?frge_ala 图像处理中最经典的边沿检测算法&#xff1a; Canny边缘检测_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1U4411277i/?spm_id_from333.1007.top_right_bar_…

【静态分析】在springboot使用太阿(Tai-e)02

参考&#xff1a;使用太阿&#xff08;Tai-e&#xff09;进行静态代码安全分析&#xff08;spring-boot篇二&#xff09; - 先知社区 本文章使用的被分析代码为GitHub - JoyChou93/java-sec-code: Java web common vulnerabilities and security code which is base on springb…

docxtemplater避坑!!! 前端导出word怎么插入本地图片或base64 有完整示例

用docxtemplater库实现前端通过模板导出word&#xff0c;遇到需求&#xff0c;要插图片并转成word并导出&#xff0c;在图片转换这块遇到了问题&#xff0c;网上查示例大多都跑不通&#xff0c;自己琢磨半天&#xff0c;总算搞明白了。 附上清晰完整示例&#xff0c;供参考。 …

医卫兰大药学试题及答案,分享几个实用搜题和学习工具 #媒体#微信

这些软件以其强大的搜索引擎和智能化的算法&#xff0c;为广大大学生提供了便捷、高效的解题方式。下面&#xff0c;让我们一起来了解几款备受大学生欢迎的搜题软件吧&#xff01; 1.彩虹搜题 这个是公众号 题库内容丰富全面&#xff0c;细致分类整理。找题再也不费力&#…

数据库|基于T-SQL添加默认约束、外键约束、内连接查询

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 前边学习了基于T-SQL48_47.基于T-SQL添加数据、CRUD操作、标识列详解&#xff1a;《数据库|基于T-SQL向数据库数据表中添加、修改、删除数据》 接下来接着学习基于T-SQL添加默认约束、外键约束、内连接查询&#xff0c…

多个文本如何一键导出二维码?在线批量生码的制作方法

当存在多条文本数据并且需要将每条数据生成单独的二维码来使用&#xff0c;很多小伙伴可能还在用一个一个来制作的方法&#xff0c;在二维码生成器上将文本转二维码。这种方式操作起来比较的繁琐&#xff0c;需要浪费大量的时间&#xff0c;那么有什么方法可以简化这个过程吗&a…

【Python】 如何将列表转换为字符串

基本原理 在Python中&#xff0c;列表&#xff08;list&#xff09;和字符串&#xff08;string&#xff09;是两种不同的数据类型。列表是一个有序的元素集合&#xff0c;可以包含不同类型的元素&#xff0c;而字符串则是一个字符序列。有时&#xff0c;我们可能需要将列表中…

记录一次cnvd事件型证书漏洞挖掘

事件起因是因为要搞毕设了&#xff0c;在为这个苦恼&#xff0c;突然负责毕设的老师说得到cnvd下发的证书结合你的漏洞挖掘的过程是可以当成毕设的&#xff0c;当时又学习了一段时间的web渗透方面的知识&#xff0c;于是踏上了废寝忘食的cnvd证书漏洞挖掘的日子。 前言&#x…

卷径计算(PID输出补偿法 SCL源代码)

卷径计算有很多方法,这里我们提供另一个思路,这里我们采用的是通过速度控制间接控制张力通过线速度和系统卷径我们可以计算出我们的速度前馈量(主速度)。具体收放卷前馈量计算可以参考下面文章链接: 收放卷前馈量计算FC(梯形图+SCL代码)-CSDN博客文章浏览阅读584次。这篇博…

Hexo最新实战:(一)Hexo7.0+GitHub Pages博客搭建

前言 很多平台都能写博客还有创作激励&#xff0c;为什么我又要搭一个&#xff1f;为什么这次要选择用Hexo框架&#xff1f; 对应的原因是流量自由和省钱&#xff0c;第一个&#xff0c;很多平台能写但不是都有收益&#xff0c;而且平台有自身的规则&#xff0c;比如会屏蔽一…

鸿蒙大厂目前政策变现沉淀思考

鸿蒙引擎定制优化 鸿蒙端hotfix&#xff1a; 技术栈太大了&#xff0c;但是鸿蒙需要学习什么呢&#xff1f; 什么最有价值&#xff1f; 这就是接下来需要表达下我的观点&#xff1a; 1、APP开发 2、应用市场技术专员 【游戏、电商重型APP性能的处理 SmartPerf、构建自己的工…

如果一个开发初学者从今天开始,他们应该学习什么?

What should a beginner developer learn if they were to start today? by Scott Hanselman 如果从今天才开始学习&#xff0c;新手开发者要学习什么&#xff1f; 新的开发人员今天应该从哪里开始&#xff1f; 他们应该学习什么来为自己的职业生涯做好准备&#xff1f;Sco…

做微火全域运营服务商要注意的风险有哪些?

随着全域运营赛道日渐兴起&#xff0c;微火全域运营服务商申请人不断增多&#xff0c;逐渐成为众多新兴职业中的一大热门。 所谓微火全域运营服务商&#xff0c;顾名思义&#xff0c;就是通过操作微火全域运营系统做全域运营的一类群体&#xff0c;其业务范围为公域和私域内所有…

IC开发——Verilator

1. 简介 Verilator 是一个开源的 Verilog 和 SystemVerilog 硬件描述语言 (HDL) 仿真器。它是一个高性能的仿真器,可以将 Verilog 和 SystemVerilog 代码转换为 C/SystemC 代码,并生成可执行的仿真模型。 Verilator 的主要特点包括: 高性能:Verilator 生成的仿真模型具有非常…

Bootstrap 3.x 版本基础引入指南

Bootstrap 是一款广受欢迎的前端框架&#xff0c;它简化了网页设计与开发流程&#xff0c;帮助开发者快速创建响应式布局和美观的网页界面。本文将向您介绍如何在项目中引入 Bootstrap 3.x 版本的基本步骤&#xff0c;包括 CSS 和 JavaScript 文件的引用&#xff0c;以及必要的…

关于Java Agent的使用、工作原理、及hotspot源码 解析

说明&#xff1a; 本文很长&#xff0c;长到超出了掘金编辑器的限制字符数 10万&#xff0c;所以我在最后边只是图解&#xff0c;没有更多的文字和代码描述了&#xff0c;本文知识点较多&#xff0c;如果没接触过agent那必然大概率会懵&#xff08;大部分知识点讲解完后&#x…