Python →爬虫实践

爬取研究中心的书目

现在,想要把如下网站中的书目信息爬取出来。

案例一 耶鲁

Publications | Yale Law School

分析网页,如下图所示,需要爬取的页面,标签信息是“<p>”,所以用 items=soup.find_all("p")

代码如下:

import requests
from bs4 import BeautifulSoup as bs
from openpyxl import Workbookurl="https://law.yale.edu/china-center/publications/recent-staff-publications"webfile=requests.get(url)
webfile.encoding="utf-8"
data=webfile.textsoup=bs(data,"html.parser")
soup.prettify()items=soup.find_all("p")
for i in items:print(i.get_text())

完善代码如下:

import requests
from bs4 import BeautifulSoup as bs
from openpyxl import Workbook
import rewb=Workbook()
ws=wb.activewfile=open("bool.txt","w",encoding="utf-8")url="https://law.yale.edu/china-center/publications/recent-staff-publications"webfile=requests.get(url)
webfile.encoding="utf-8"
data=webfile.textsoup=bs(data,"html.parser")
soup.prettify()items=soup.find_all("p")# 正则表达式匹配模式
pattern1 = r'([^,\n“]+), “([^”]+),”\s*([^,\n]+)'
pattern2 = r'([^,]+(?: and [^,]+)*), “([^”]+),”''''
正则表达式匹配模式:([^,]+(?: and [^,]+)*):匹配作者名。这个模式匹配一个或多个名字,由“and”连接。[^,]+匹配一个或多个非逗号字符,(?: and [^,]+)*是一个非捕获组,匹配零个或多个“and”后跟一个或多个非逗号字符的模式。
“([^”]+),”:匹配文章名。这个模式匹配引号内的任何字符,直到遇到闭合的引号和逗号。([^,\n“]+):匹配作者名。这个模式匹配一个或多个非逗号、换行符和左引号的字符序列。[^,\n“]是一个字符集,表示匹配除了逗号、换行符和左引号之外的任何字符。+表示匹配一个或多个这样的字符。
“([^”]+),”:匹配文章名。这个模式匹配以左引号开始,以右引号结束的任何字符序列,并且确保文章名后面跟着一个逗号。
([^,\n]+):匹配期刊名。这个模式匹配一个或多个非逗号和换行符的字符序列。'''for i in items:info=i.get_text()# 查找所有匹配项matches = re.findall(pattern1, info)if len(matches)>0:print(matches)for m in matches:print(m,sep=",",file=wfile)wfile.close()

将txt文本导入excel即可。原因在于正则表达式中得到的列表中的信息,有的似乎是tuptle类型,导致openpyxl无法输入xlsx表格中。所以采用了txt文本方式。

即可完成。

案例二 哈佛

爬取哈佛大学费正清中心出版书籍的信息时候,标签信息是class="article-container entry-content clear",所以用:item1=soup.find_all(attrs={"class":"article-container entry-content clear"})

所以,爬取代码如下:

 
'''
下面这段代码,爬取哈佛大学费正清中心出版书籍的信息
'''
import requests
from bs4 import BeautifulSoup as bs
from openpyxl import Workbookwb=Workbook()
ws=wb.activefor page in range(1,9):url=f'https://fairbank.fas.harvard.edu/research/publications/page/{page}/'webFile=requests.get(url)webFile.eocoding="utf-8"data=webFile.textsoup=bs(data,'html.parser')soup.prettify()##item1=soup.find_all(attrs={"class":"uagb-post__title"})#提取书本标题信息##for i in item1:##    print(i.get_text())######item2=soup.find_all(attrs={"class":"ast-excerpt-container ast-blog-single-element"})#提取书目介绍信息##for k in item2:##    print(k.get_text())item3=soup.find_all(attrs={"class":"article-container entry-content clear"})#在网络页面中,找到的整个的文本for m in item3:info=m.get_text()row1=info.split("\n")row2=list(filter(lambda x:len(x)>1,row1))#过滤掉空字符串。ws.append(row2)#worksheet中添加的是列表,然后把列表中的元素挨个放到了xlsx表格中。wb.save("bool.xlsx")

即可完成。

一日一图

代码如下:

"""
使用Python中的turtle模块绘制一个壮观的太阳系图是一个有趣且具有挑战性的任务"""import turtle
import math# 设置屏幕
screen = turtle.Screen()
screen.bgcolor("black")
screen.title("Solar System")# 创建太阳
sun = turtle.Turtle()
sun.hideturtle()
sun.penup()
sun.goto(0, -200)
sun.pendown()
sun.color("yellow")
sun.begin_fill()
sun.circle(50)
sun.end_fill()# 行星数据(名称,距离太阳的距离(单位:像素),大小(单位:像素))
planets = [("Mercury", 35, 5),("Venus", 72, 10),("Earth", 98, 10),("Mars", 152, 7),("Jupiter", 279, 30),  # 简化大小,实际应更大("Saturn", 449, 25),   # 简化大小,实际应更大# "Uranus" 和 "Neptune" 由于距离太远,在这个比例下可能无法很好地显示
]# 绘制行星和轨道
orbit_color = "gray"
planet_color = ["gray", "yellow", "blue", "red", "orange", "gold", "lightblue"]  # 对应行星的颜色,实际应根据行星选择for i, (name, distance, size) in enumerate(planets):# 绘制轨道orbit_turtle = turtle.Turtle()orbit_turtle.hideturtle()orbit_turtle.speed(0)orbit_turtle.penup()orbit_turtle.goto(0, 0)orbit_turtle.pendown()orbit_turtle.color(orbit_color)orbit_turtle.width(2)orbit_turtle.circle(distance)orbit_turtle.hideturtle()# 绘制行星planet_turtle = turtle.Turtle()planet_turtle.hideturtle()planet_turtle.speed(0)planet_turtle.penup()# 计算行星在轨道上的位置angle = 360 * i / len(planets)  # 均匀分布行星x = distance * math.cos(math.radians(angle))y = distance * math.sin(math.radians(angle)) - 200  # 减去太阳的高度planet_turtle.goto(x, y)planet_turtle.pendown()planet_turtle.color(planet_color[i % len(planet_color)])  # 循环使用颜色planet_turtle.begin_fill()planet_turtle.circle(size)planet_turtle.end_fill()planet_turtle.write(name, align="center", font=("Arial", 8, "normal"))planet_turtle.hideturtle()# 隐藏turtle光标
turtle.done()
turtle.tracer(False)

图片如下:

即可完成。

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

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

相关文章

【Linux】-学习笔记03

第十一章-管理Linux软件包和进程 1.源码下载安装软件 1.1概念 源码文件&#xff1a;程序编写者使用C或C等语言编写的原始代码文本文件 源码文件使用.tar.gz或.tar.bz2打包成压缩文件 1.2特点 源码包可移植性好&#xff0c;与待安装软件的工作环境依赖性不大 由于有编译过程…

排序算法 - 冒泡

文章目录 1. 冒泡排序1.1 简介1.2 基本步骤&#xff1a;1.3 示例代码&#xff08;C&#xff09;1.4 复杂度分析1.5 动画展示 1. 冒泡排序 1.1 简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想是通过相邻元素的比较和交换&#…

前端请求后端php接口跨域 cors问题

只需要后端在网站的入口文件 一般都是 index.php 加上 这几行代码就可以了 具体的参数可以根据需要去修改 header("Access-Control-Allow-Origin: *"); header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS); header(Access-Control-Allow-Heade…

Django基础用法+Demo演示

Django快速上手 参考: Django快速上手 再写几个页面 编辑demo1/urls.py, 添加URL和视图函数映射 urlpatterns [path(index/, views.index),path(user/list/, views.user_list),path(user/add/, views.user_add), ]编辑app01/views.py&#xff0c;添加几个函数 from djang…

数据集标注txt文件读取小工具

最近在看遥感图像目标检测相关的yolo10&#xff0c;自己在网上下载了数据集跑模型&#xff0c;但是跑出来的结果与数据集出处的论文介绍分类有些不同&#xff0c;只出现了分类0的情况&#xff0c;怀疑是标注有问题&#xff0c;但是数据集太大&#xff0c;于是做了个小工具对标注…

docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

无数次的拉镜像让人崩溃&#xff1a; rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法) 一、更新并安装基础软件 #切换root用户 sudo su -#更新 apt update #升级 apt upgrade#install vim apt install vim#install net-tools apt install net-tools二、安装ssh并设置…

UDP协议和TCP协议之间有什么具体区别?

UDP&#xff08;User Datagram Protocol&#xff09;和TCP&#xff08;Transmission Control Protocol&#xff09;是两种常见的网络传输协议&#xff0c;它们在数据传输中有着显著的区别和适用场景。理解它们的区别对于网络工程师、软件开发人员以及网络安全专家都是至关重要的…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行&#xff0c;镜像是容器的只读模板&#xff0c;容器是模板的一个实例。镜像是分层结…

深度学习之卷积问题

1 卷积在图像中有什么直观作用 ​ 在卷积神经网络中&#xff0c;卷积常用来提取图像的特征&#xff0c;但不同层次的卷积操作提取到的特征类型是不相同的&#xff0c;特征类型粗分如表1所示。 ​ 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…

kafka面试题解答(四)

5、消费者组和分区数之间的关系是怎样的&#xff1f; 消费者组数小于等于分区数&#xff0c;消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费。 6、kafka如何知道哪个消费者消费哪个分区&#xff1f; 生产者把数据发送给各个分区&…

C++编程:利用环形缓冲区优化 TCP 发送流程,避免 Short Write 问题

文章目录 1. 什么是 Short Write 问题&#xff1f;2. 如何解决 Short Write 问题&#xff1f;2.1 方法 1&#xff1a;将 Socket 设置为阻塞模式2.2 方法 2&#xff1a;用户态维护发送缓冲区 3. 用户态维护发送缓冲区实现3.1 核心要点3.2 代码实现3.3 测试程序 参考文档 1. 什么…

远离生成式AI大乱斗,SAS公司揭示亚太区千亿AI市场蓝图

生成式AI正在亚太区引发AI的新一轮风暴。根据市场调查公司IDC的一份最新调研&#xff0c;43%的亚太区企业将在未来12个月增加20%的AI投资&#xff0c;其中有40%的企业期待AI能够带来3倍投资回报。在亚太区&#xff0c;中国企业一马当先&#xff0c;不仅有27%的受访企业将AI用于…

Android Studio 将项目打包成apk文件

第一步&#xff1a;选择Build -> Generate Signed APK 会出现&#xff1a; 我们选择 Create new… 然后选择你要存放密钥的地方 点击ok之后&#xff0c;则选择好了文件&#xff0c;并生成了jks文件了。 点击ok之后&#xff0c; 会出现&#xff1a; 选择release&#xf…

【面试题】发起一次网络请求,当请求>=1s,立马中断

首先这是一个大厂的面试题&#xff0c;是我一个同事跟我说的&#xff0c;具体什么业务场景面试官没说&#xff0c;但我猜测可能是以下几种业务场景&#xff1a; 表单提交&#xff1a;在用户提交表单时&#xff0c;如果请求处理时间过长&#xff0c;可以中断请求并提示用户检查…

从0开始学习Linux——文件管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…

MySQL系列之如何在Linux只安装客户端

导览 前言Q&#xff1a;如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域&#xff0c;元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心&#xff0c;他认为开放元宇宙将融合娱乐、游戏和科技产业&#xff0c;带来一个光明的未来。本文将深入探讨采访中的关键内容&#xff0c;分析元宇宙的…

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据&#xff0c;LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据&#xff0c;并通过LabVIEW上位机绘制演…

quartz

理论知识&#xff1a; 堆&#xff1a;堆是一颗安全二叉树&#xff0c;是一种特殊的树结构&#xff0c;它的每一个节点值都要比父节点要么大&#xff0c;要么小 小顶堆&#xff1a;最小的值放在最上面&#xff0c;每个子节点都比父节点大 大顶堆&#xff1a;最大的值放在最上…