当前位置: 首页 > news >正文

5.Python爬虫相关

爬虫

爬虫原理

  • 爬虫,又称网络爬虫,是一种自动获取网页内容的程序。
  • 它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。

HTTP请求与响应过程

  • 爬虫首先向目标网站发送HTTP请求,请求可以包含多种参数,如URL、请求方法(GET或POST)、请求头(Headers)等。
  • 服务器接收到请求后,返回相应的HTTP响应,包括状态码、响应头和响应体(网页内容)。

常用爬虫技术

名称功能
请求库如 requests、aiohttp 等
解析库如 BeautifulSoup、lxml、PyQuery 等
存储库如 pandas、SQLite 等
异步库如 asyncio、aiohttp 等

实战

  1. 爬取豆瓣电影Top250
import requests
from bs4 import BeautifulSoup
import csv
# 请求 URL
url = 'https://movie.douban.com/top250'
# 请求头部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
# 解析页面函数
def parse_html(html):soup = BeautifulSoup(html, 'lxml')movie_list = soup.find('ol', class_='grid_view').find_all('li')for movie in movie_list:title = movie.find('div', class_='hd').find('span', class_='title').get_text()rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()writer.writerow([title, rating_num, comment_num])# 保存数据函数
def save_data():f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig')global writerwriter = csv.writer(f)writer.writerow(['电影名称', '评分', '评价人数'])for i in range(10):url = 'https://movie.douban.com/top250?start=' + str(i*25) + '&filter='response = requests.get(url, headers=headers)parse_html(response.text)f.close()if __name__ == '__main__':save_data()
  1. 爬取当当网图书信息
import requests
from lxml import etree
import csvurl = 'http://search.dangdang.com/?key=Python&act=input'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}def parse_html(html):selector = etree.HTML(html)book_list = selector.xpath('//*[@id="search_nature_rg"]/ul/li')for book in book_list:title = book.xpath('a/@title')if title:title = title[0]else:title = "未知书名"link = book.xpath('a/@href')if link:link = link[0]else:link = "未知链接"price = book.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')if price:price = price[0]else:price = "未知价格"author = book.xpath('p[@class="search_book_author"]/span[1]/a/@title')if author:author = author[0]else:author = "未知作者"publish_date = book.xpath('p[@class="search_book_author"]/span[2]/text()')if publish_date:publish_date = publish_date[0]else:publish_date = "未知出版日期"publisher = book.xpath('p[@class="search_book_author"]/span[3]/a/@title')if publisher:publisher = publisher[0]else:publisher = "未知出版社"yield {'书名': title,'链接': link,'价格': price,'作者': author,'出版日期': publish_date,'出版社': publisher}def save_data():response = requests.get(url, headers=headers)if response.status_code == 200:with open('dangdang_books.csv', 'w', newline='', encoding='utf-8-sig') as f:writer = csv.writer(f)writer.writerow(['书名', '链接', '价格', '作者', '出版日期', '出版社'])for item in parse_html(response.text):writer.writerow([item['书名'], item['链接'], item['价格'], item['作者'], item['出版日期'], item['出版社']])else:print(f"请求失败,状态码:{response.status_code}")if __name__ == '__main__':save_data()

相关文章:

5.Python爬虫相关

爬虫 爬虫原理 爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。 HTTP请求与响应过程 爬虫首先向…...

Windows系统上配置eNSP环境的详细步骤

华为eNSP(Enterprise Network Simulation Platform)是一款针对华为数通网络设备的网络仿真平台,用于辅助工程师进行网络技术学习、方案验证和故障排查等工作。以下是在Windows系统上配置eNSP环境的详细步骤: 1. 准备工作 下载安…...

Database.NET——一款轻量级多数据库客户端工具

文章目录 Database.NET简介下载使用使用场景总结 Database.NET简介 Database.NET 是一个功能强大且易于使用的数据库管理工具,适用于多种数据库系统。它为开发者和数据库管理员提供了一个统一的界面,可以方便地管理和操作不同类型的数据库。 支持的数据…...

新浪微博C++面试题及参考答案

多态是什么?请详细解释其实现原理,例如通过虚函数表实现。 多态是面向对象编程中的一个重要概念,它允许不同的对象对同一消息或函数调用做出不同的响应,使得程序具有更好的可扩展性和灵活性。 在 C 中,多态主要通过虚函…...

计算机视觉目标检测-1

文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制(NMS) 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyr…...

【物联网技术与应用】实验15:电位器传感器实验

实验15 电位器传感器实验 【实验介绍】 电位器可以帮助控制Arduino板上的LED闪烁的时间间隔。 【实验组件】 ● Arduino Uno主板* 1 ● 电位器模块* 1 ● USB电缆*1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 模拟电位器是模拟电子元件,模…...

java常用类(上)

笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:javase 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、包装类 1.1包装类…...

包管理工具npm、yarn、pnpm、cnpm详解

1. 包管理工具 1.1 npm # 安装 $ node 自带 npm# 基本用法 npm install package # 安装包 npm install # 安装所有依赖 npm install -g package # 全局安装 npm uninstall package # 卸载包 npm update package # 更新包 npm run script #…...

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。 持续集成 (CI):在共享存储库中自动构建、测试…...

[Java]合理封装第三方工具包(附视频)

-1.视频链接 视频版: 视频版会对本文章内容进行详细解释 [Java]合理封装第三方工具包_哔哩哔哩_bilibili 0.核心思想 对第三方工具方法进行封装,使其本地化,降低记忆和使用成本 1.背景 在我们的项目中,通常会引用一些第三方工具包,或者是使用jdk自带的一些工具类 例如: c…...

常规配置、整合IDEA

目录 Redis常规配置 tcp-keepalive security Jedis RedisTemplate 连接池技术 Lua脚本 Jedis集群 Redis应用问题&解决方案 缓存穿透 缓存击穿 缓存雪崩 分布式锁 Redis实现分布式锁 Redis新功能 ACL Redis常规配置 tcp-keepalive security redis.conf中…...

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则: 那…...

计算机的错误计算(一百九十二)

摘要 用两个大模型计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结果保留5位有效数字。两个大模型均给出了 Python代码与答案。但是,答案是错误的。 例1. 计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结…...

37 Opencv SIFT 特征检测

文章目录 Ptr<SIFT> SIFT::create示例 Ptr SIFT::create Ptr<SIFT> SIFT::create(int nfeatures 0,int nOctaveLayers 3,double contrastThreshold 0.04,double edgeThreshold 10,double sigma 1.6 );参数说明&#xff1a;nfeatures&#xff1a;类型&#x…...

Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为&#xff1a;…...

域名解析协议

一、DNS简述 ‌DNS协议是一种应用层协议&#xff0c;用于将域名转换为对应的IP地址‌&#xff0c;使得客户端可以通过域名来访问Internet上的各种资源‌ DNS的基础设施是由分层的DNS服务器实现的分布式数据库&#xff0c;它运行在UDP之上‌&#xff0c;通常使用端口号53‌ DN…...

微信小程序给外面的view设置display:flex;后为什么无法给里面的view设置宽度

如果父盒子view设置了display:flex&#xff0c;子view设置宽度值无效&#xff0c;宽度值都是随着内容多少而改变&#xff1a; 问题视图&#xff1a; 原因&#xff1a; flex布局元素的子元素&#xff0c;自动获得了flex-shrink的属性 解决方法&#xff1a; 给子view增加:fl…...

Maven怎么会出现一个dependency-reduced-pom.xml的文件

问题 今天打包时突然发现&#xff0c;多出了一个名为dependency-reduced-pom.xml的文件 解决方法 由于使用了maven-shade-plugin插件导致的&#xff0c;在 <plugin> 标签下添加 <configuration><createDependencyReducedPom>false</createDependencyR…...

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…...

自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统

在完成了HarmonyOS Camera API的开发之后&#xff0c;我开始关注更复杂的系统级功能。在浏览HarmonyOS Next文档时&#xff0c;我发现了一个非常有趣的领域&#xff1a;数字版权管理&#xff08;DRM&#xff09;。最新的DRM API 13提供了强大的工具&#xff0c;用于保护数字内容…...

台达 PLC ES 与 3 台欧姆龙 E5CC 温控器通讯程序分享

台达PLC ES与3台欧姆龙E5CC温控器通讯程序 程序带注释&#xff0c;并附送昆仑通态和威纶通触摸屏有接线方式&#xff0c;设置 程序温度可靠 器件&#xff1a;台达DVP ES系列的PLC&#xff0c;3台欧姆龙E5CC系列温控器&#xff0c;昆仑通态&#xff0c;威纶通触摸屏 功能&#x…...

BIOS更新全攻略:从版本检查到安全升级的实用指南

1. BIOS更新前的必要准备 每次打开电脑时&#xff0c;那个一闪而过的黑底白字界面就是BIOS&#xff08;基本输入输出系统&#xff09;&#xff0c;它就像是电脑硬件的"总指挥"。我见过太多人因为盲目刷BIOS导致主板报废的案例&#xff0c;所以更新前一定要做好这些准…...

WebGL/Three.js性能优化实战:你的3D模型为什么卡?从理解栅格化与渲染管线开始

WebGL/Three.js性能优化实战&#xff1a;从栅格化原理到渲染管线调优 当你用Three.js加载一个精致的3D模型时&#xff0c;是否遇到过页面突然卡顿、风扇狂转的情况&#xff1f;这背后往往与浏览器如何将矢量图形转换为屏幕像素的过程密切相关。今天我们就从栅格化的底层原理出发…...

光谱特征选择实战:UVE算法原理、实现与避坑指南

1. UVE算法原理&#xff1a;噪声如何帮你筛选特征&#xff1f; 第一次听说用噪声来筛选特征时&#xff0c;我也觉得不可思议——噪声不是应该干扰数据分析吗&#xff1f;但UVE算法的精妙之处恰恰在于它把噪声变成了"标尺"。想象你在超市挑选苹果&#xff0c;如果闭着…...

文心一言搜索优化,做好这件事就赢了一半

如果你在文心一言上铺了几百篇内容&#xff0c;但品牌词一问&#xff0c;AI还是引用别人——你缺的不是数量&#xff0c;是质量锚点。文心一言的算法有一套对“优质可信内容”的隐形成交系统&#xff0c;没通过质检的内容&#xff0c;发再多也是无效库存。去年我们实测过一个案…...

从GCC到Nginx:一文搞定Linux开发环境搭建(附1.13.7版本编译避坑指南)

从GCC到Nginx&#xff1a;Linux开发环境全栈配置实战 在Linux系统上搭建完整的开发环境&#xff0c;尤其是Web服务器环境&#xff0c;是每个开发者必须掌握的技能。不同于简单的软件安装&#xff0c;这涉及到工具链配置、依赖管理、编译优化等一系列复杂操作。本文将带你从零开…...

Lansium-Arduino:面向物联网终端的轻量级MQTT通信库

1. 项目概述 Lansium-Arduino 是一个面向嵌入式物联网终端的轻量级通信库&#xff0c;专为 Arduino 生态&#xff08;含 ESP32、ESP8266、Arduino Uno Ethernet/WiFi 扩展板等平台&#xff09;设计&#xff0c;用于实现设备与 Lansium Server 的可靠双向连接。其核心通信协议…...

51单片机(二) --- GPIO + 中断

一、GPIO 通用输入输出口GPIO&#xff08;General Purpose Input Output&#xff09;即通用目的输入输出口&#xff0c;是 51 单片机与外部设备进行数据交互的核心通道&#xff0c;51 单片机的 P0、P1、P2、P3 四组口均为 GPIO 口。与入门阶段仅用到的简单电平输出不同&#xf…...

AI率85%降到15%的完整操作流程,一步一步来

AI率85%&#xff0c;这不是个小问题&#xff0c;但也不是无解的问题。我把整个处理流程拆成了具体步骤&#xff0c;照着来就行&#xff0c;没什么复杂的。 在开始之前&#xff0c;明确一件事 AI率85%的论文&#xff0c;靠手动修改降到15%&#xff0c;从理论上讲是可行的&…...

SpringBoot + 本地事务表 + 定时扫描补偿:轻量级方案实现最终一致性,无中间件依赖

在分布式系统中,数据一致性是一个永恒的话题。传统的分布式事务解决方案如 Seata、XA 等往往需要引入重量级中间件,增加了系统复杂度和运维成本。 本文将介绍一种轻量级的最终一致性方案——本地事务表 + 定时扫描补偿,该方案: 零中间件依赖:不需要 MQ、Seata 等外部组件…...