爬虫 Day2

resp.close()#关掉resp

一requests入门

       (一) 用到的网页:豆瓣电影分类排行榜 - 喜剧片

import requestsurl = "https://movie.douban.com/j/chart/top_list"
#参数太长,重新封装参数
param = {"type": "24","interval_id": "100:90","action":" ","start": 0,"limit": 20,
}
#根据网页设定get和postresp = requests.get(url = url, params = param)
print(resp.request.url)
#text 抓取不下来
#print(resp.text)

        抓取结果:

        (二)反爬

import requestsurl = "https://movie.douban.com/j/chart/top_list"
#参数太长,重新封装参数
param = {"type": "24","interval_id": "100:90","action":" ","start": 0,"limit": 20,
}
#根据网页设定get和post
#text 直接抓取不下来,要换headers
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
resp = requests.get(url = url, params = param,headers = headers)
print(resp.json())
# print(resp.text)
resp.close()#关掉resp

注意到每次下滑刷新榜单只有start参数改变,20递增

二从html里提取数据--数据解析

1.正则re解析--效率高

2.bs4 beautiful soup解析--效率不高

3.xpath解析--简洁

1.正则解析

. 匹配换行符之外的所有

\w 匹配数字、字母、下划线        \W非数字、字母、下划线 

\s 匹配任意空白符                       \S

\d 匹配任意数字                          \D

\n 匹配换行符

\t 匹配制表符

^ 开始

$ 结束

a | b 匹配字符a或b

[] 字符组 [a-zA-Z0-9],

[^] 非字符组

* 重复0零次或更多次

+ 重复一次或更多次

? 重复0次或1次

{n}  重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

例:你玩儿什么游戏,矿工游戏你会吗,晚上一起玩游戏吧

惰性匹配:尽可能多的匹配):玩儿.*?游戏 : 玩儿什么游戏

贪婪匹配:玩儿.*游戏 :玩儿什么游戏,矿工游戏你会吗,晚上一起玩游戏

但我们需要的只是“周杰伦”和“林俊杰”。

2.示例

import re
#findall的结果是列表
#匹配字符串中所有符合正则的内容
lst = re.findall(r"\d+","我的电话是10010,我朋友的电话是10086")
print(lst)
print("")
#finditer: 匹配字符串中的所有内容【返回的是迭代器】,从迭代器中拿内容需要.group
it = re.finditer(r"\d+","我的电话是10010,我朋友的电话是10086")
for i in it:print(i.group())

示例2:

findall

finditer

search

match

compile

import re
print("#findall的结果是列表")
#findall的结果是列表
#匹配字符串中所有符合正则的内容
lst = re.findall(r"\d+","我的电话是10010,我朋友的电话是10086")
print(lst)
print("")
print("#finditer: ")
#finditer: 匹配字符串中的所有内容【返回的是迭代器】,从迭代器中拿内容需要.group()
it = re.finditer(r"\d+","我的电话是10010,我朋友的电话是10086")
for i in it:print(i.group())
print("")
print("#serch:检索到一个就返回,检验存在性")
#serch是全文匹配返回的是match对象,拿数据需要.group(),检索到一个就返回,检验存在性
s = re.search(r"\d+","我的电话是10010,我朋友的电话是10086")
print(s.group())
print("")
print("#match是从头开始匹配")
#match是从头开始匹配
s = re.match(r"\d+","10010,我朋友的电话是10086")#"我的电话是10010,我朋友的电话是10086"
print(s.group())
print("")
print("#预加载正则表达式")
#预加载正则表达式
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话是10010,我朋友的电话是10086")
print("#这里输出的还是迭代器")#这里输出的还是迭代器
print(ret)
print("用迭代器输出:")
for i in ret:print(i.group())
print("#match:")
ans = obj.match("10010,我朋友的电话是10086")
print(ans.group())
# obj.search()
# obj.findall()

示例3:

import re
s ="""<div class='jay'><span id = '1'>周杰伦</span><div><div class='Ang'><span id = '2'>杨异或</span><div><div class='jjaa'><span id = '3'>林经济</span><div><div class='yja'><span id = '4'>周伦</span><div><div class='may'><span id = '5'>五樱桃</span><div>
"""
#def compile(pattern,flags=0) flags是状态位
# () 特殊 在引号里面
#python输出时,end=''不换行
#(?P<分组名字>正则)可以单独从正则匹配的内容中进一步提取
obj = re.compile(r"<div class='(?P<engname>.*?)'><span id = '(?P<id>\d+)'>(?P<chiname>.*?)</span><div>",re.S) #让.能匹配换行符
result = obj.finditer(s)
for i in result:print(i.group("engname"),end=' ')print(i.group("chiname"),end=' ')print(i.group("id"))

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt问题】使用QSlider创建滑块小部件无法显示

问题描述&#xff1a; 使用QSlider创建滑块小部件用于音量按钮的时候&#xff0c;无法显示&#xff0c;很奇怪&#xff0c;怎么都不显示 一直是这个效果&#xff0c;运行都没问题&#xff0c;但是就是不出现。 一直解决不了&#xff0c;最后我在无意中&#xff0c;在主程序中…

LLM 面试知识点——模型基础知识

1、主流架构 目前LLM(Large Language Model)主流结构包括三种范式,分别为Encoder-Decoder、Causal Decoder、Prefix Decode。对应的网络整体结构和Attention掩码如下图。 、 各自特点、优缺点如下: 1)Encoder-Decoder 结构特点:输入双向注意力,输出单向注意力。 代表…

MySQL中数据库表的监控

MySQL中数据库表的监控 &#xff08;1&#xff09;查看数据库中当前打开了哪些表&#xff1a;show OPEN TABLES &#xff0c;如图6-1-5所示。另外&#xff0c;还可以通过show OPEN TABLES where In_use > 0过滤出当前已经被锁定的表。 查看数据库中表的状态&#xff1a;SHO…

css3 实现html样式蛇形布局

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …

聚类分析 | Matlab实现基于NNMF+DBO+K-Medoids的数据聚类可视化

聚类分析 | Matlab实现基于NNMFDBOK-Medoids的数据聚类可视化 目录 聚类分析 | Matlab实现基于NNMFDBOK-Medoids的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 NNMFDBOK-Medoids聚类&#xff0c;蜣螂优化算法DBO优化K-Medoids 非负矩阵分解&#xff08…

【机器学习-01】机器学习基本概念与建模流程

机器学习的过程本质上是一个不断通过数据训练来提升模型在对应评估指标上表现的过程。在此过程中&#xff0c;为模型提供有效的反馈并基于这些反馈进行持续的调整是至关重要的。只有当这个过程顺利进行时&#xff0c;模型才能得到有效的训练&#xff0c;机器才能真正实现学习。…

鸿蒙4.0ArkUI快速入门(一)应用模型

ArkUI篇 应用模型Stage模型FA模型模型对比 应用模型 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。 HarmonyOS先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&…

Machine Learning ---- Gradient Descent

目录 一、The concept of gradient&#xff1a; ① In a univariate function&#xff1a; ②In multivariate functions&#xff1a; 二、Introduction of gradient descent cases&#xff1a; 三、Gradient descent formula and its simple understanding: 四、Formula o…

MATLAB教程

目录 前言一、MATLAB基本操作1.1 界面简介1.2 搜索路径1.3 交互式命令操作1.4 帮助系统 二、MATLAB语言基础2.1 数据类型2.2 MATLAB运算2.2.1 算数运算2.2.2 关系运算2.2.3 逻辑运算 2.3 常用内部函数2.4 结构数据与单元数据 三、MATLAB程序设计3.1 M文件3.2 函数文件3.3 程序控…

1、Jenkins持续集成-介绍

文章目录 1、软件开发生命周期1.1 软件开发瀑布模型 2、软件的敏捷开发2.1 什么是敏捷开发&#xff1f;2.2 敏捷开发是如何迭代&#xff1f;2.3 敏捷开发有什么好处&#xff1f; 3、什么是持续集成4、持续集成的组成要素5、持续集成的好处6、Jenkins介绍 PS&#xff1a;本篇都是…

AcWing 1510:楼梯 ← 浮点数二分

【题目来源】http://poj.org/problem?id2507https://www.acwing.com/problem/content/1512/【题目描述】 一个街道两侧有两栋楼&#xff0c;现在有如图所示两楼梯 x&#xff0c;y。 两个楼梯分别如图放置。 已知两个楼梯的长度和他们交点离地面的高度&#xff0c;求两栋楼之间…

【Qt图形界面引擎(一)】:第一个Qt程序

跨平台图形界面引擎&#xff0c;接口简单&#xff0c;易上手&#xff0c;一定程度简化内存。 Qt发展史 1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架2008年&#xff0c;Qt Company科技被诺基亚公司收购&#xff0c;Qt也因此成为诺基亚旗下的编程语言工具2012…

idea+vim+pycharm的块选择快捷键

平时开发的时候&#xff0c;有的时候我们想用矩形框住代码&#xff0c;或者想在某列上插入相同字符 例如下图所示&#xff0c;我想在22-24行的前面插入0000 1. Idea的快捷键&#xff1a;option 鼠标 2. Pycharm的快捷键&#xff1a;shift option 鼠标 2. Vim 块选择 v/V/c…

jQuery+CSS3自动轮播焦点图特效源码

jQueryCSS3自动轮播焦点图特效源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 jQueryCSS3自动轮播焦点图特效源码

firewalld 防火墙配置根据某个IP地址(只放行指定IP地址的流量)进行端口开放

# 增加针对某个IP进行端口开放 firewall-cmd --zonepublic --add-rich-rulerule family"ipv4" source address"IP地址" port port"8082" protocol"tcp" accept --permanent# 删除添加的规则(删除后也需要重启防火墙),和增加的区别是 …

【GPT-SOVITS-01】源码梳理

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

LeetCode Python - 61. 旋转链表

目录 题目描述解法运行结果 题目描述 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head…

Day68:WEB攻防-Java安全原生反序列化SpringBoot攻防heapdump提取CVE

目录 Java安全-反序列化-原生序列化类函数 原生序列化类函数 SnakeYaml XMLDecoder ObjectInputStream.readObject 工具利用 ysoserial Yakit SerializedPayloadGenerator Java安全-SpringBoot框架-泄漏&CVE SpringBoot Actuator-黑白盒发现 人工识别 BurpSui…

文献速递:深度学习乳腺癌诊断---使用深度学习改善乳腺癌诊断的MRI技术

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 使用深度学习改善乳腺癌诊断的MRI技术 01 文献速递介绍 乳腺磁共振成像&#xff08;MRI&#xff09;是一种高度敏感的检测乳腺癌的方式&#xff0c;报道的敏感性超过80%。传统上&#xff0c;其…

【Ubuntu】FTP站点搭建

配置顺序 前提条件&#xff1a;确保软件仓库可以正常使用&#xff0c;确保已正常配置IP地址 1.安装FTP服务 2.编辑FTP配置文件 3.设置开机自启 4.创建用户 5.配置用户限制名单 6.重启服务 7.查看运行状态 8.测试在同一局域网下的Windows查看文件 1.安装FTP服务 sudo apt insta…