Python爬虫原理以及3个小案例(源码)

一、爬虫原理

网络爬虫是一种用于自动获取网页内容的程序。它模拟用户浏览网页的过程,通过发送HTTP请求获取网页的源代码,并利用解析和提取技术来获取所需的数据。

1. HTTP请求与响应过程

爬虫向目标网站发送HTTP请求,请求包含URL、请求方法(如GET或POST)、请求头(Headers)等。服务器接收到请求后,会返回HTTP响应,其中包含状态码、响应头和响应体(网页内容)。

2. 常用爬虫技术

  • 请求库:例如requestsaiohttp,用于发送HTTP请求。
  • 解析库:例如BeautifulSouplxmlPyQuery,用于解析网页内容。
  • 存储库:例如pandasSQLite,用于存储爬取的数据。
  • 异步库:例如asyncioaiohttp,用于实现异步爬虫,提高爬取效率。

二、Python爬虫常用库

1. 请求库

  • requests:一个简洁而强大的HTTP库,支持HTTP连接保持和连接池、SSL证书验证、Cookies等。
  • aiohttp:一个基于asyncio的异步HTTP库,适合高并发的爬虫场景。

2. 解析库

  • BeautifulSoup:一个用于解析HTML和XML的库,简单易用,支持多种解析器。
  • lxml:一个高效的XML和HTML解析库,支持XPath和CSS选择器。
  • PyQuery:一个Python版的jQuery,语法与jQuery类似,易于上手。

3. 存储库

  • pandas:一个强大的数据分析库,提供数据结构和数据分析工具,支持多种文件格式。
  • SQLite:一个轻量级的数据库,支持SQL查询,适用于小型爬虫项目。

接下来,将通过7个Python爬虫的小案例,帮助大家更好地学习和理解Python爬虫的基础知识。以下是每个案例的简介和源代码:

案例1:爬取豆瓣电影Top250

这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。

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()

案例2:爬取猫眼电影Top100

这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。

import requests
import re# 请求URL
url = 'https://maoyan.com/board/4'
# 请求头部
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):pattern = re.compile('<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)items = re.findall(pattern, html)for item in items:yield {'电影名称': item[1],'主演': item[2].strip(),'上映时间': item[3]}# 保存数据函数
def save_data():f = open('maoyan_top100.txt', 'w', encoding='utf-8')for i in range(10):url = 'https://maoyan.com/board/4?offset=' + str(i * 10)response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')f.close()if __name__ == '__main__':save_data()

案例3:爬取全国高校名单

这个案例使用正则表达式和requests库爬取全国高校名单,并将这些信息保存到TXT文件中。

import requests
import re# 请求URL
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
# 请求头部
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):pattern = re.compile('<tr class="alt">.*?<td>(.*?)</td>.*?<td><div align="left">.*?<a href="(.*?)" target="_blank">(.*?)</a></div></td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>', re.S)items = re.findall(pattern, html)for item in items:yield {'排名': item[0],'学校名称': item[2],'省市': item[3],'总分': item[4]}# 保存数据函数
def save_data():f = open('university_top100.txt', 'w', encoding='utf-8')response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')f.close()if __name__ == '__main__':save_data()

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

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

相关文章

Linux内核 -- DMA控制器之dmaengine框架的注册与使用流程

Linux Kernel dmaengine 框架 简介 Linux内核的dmaengine框架是一个用于管理DMA&#xff08;Direct Memory Access&#xff09;操作的通用框架。它抽象了不同DMA控制器的实现&#xff0c;使得上层代码可以方便地进行DMA传输。 初始化流程 1. 驱动注册 每个DMA控制器驱动都…

定义变量和声明变量、定义类和声明类

一、定义变量和声明变量 在编程中&#xff0c;定义变量和声明变量是两个相关但不同的概念&#xff0c;尤其是在静态类型的编程语言中。静态类型的编程语言比如Java 1、声明变量 &#xff08;1&#xff09;定义&#xff1a;声明变量是指告诉编译器变量的名字、类型和在某些情…

Mysql:时区问题

Mysql&#xff1a;时区问题 1、时区配置 Mysql默认使用系统的时区 mysql> show global variables like %time%zone%; -------------------------- | Variable_name | Value | -------------------------- | system_time_zone | | | time_zone | SYSTEM…

Multi-Wing Optimiser风扇选型软件介绍

Multi-Wing Optimiser风扇选型软件

一、YOLO V10安装、使用、训练大全

YOLO V10安装、使用、训练大全 一、下载官方源码二、配置conda环境三、安装YOLOV10依赖四、使用官方YOLO V10模型1.下载模型2.使用模型2.1 图片案例 五、制作数据集1.数据集目录结构2.标注工具2.1 安装标注工具2.2 运行标注工具2.3 设置自动保存2.4 切换yolo模式2.5 开始标注2.…

Socket.D 开源网络应用协议,v2.5.9 发布(已有 java, py, js SDK)

Socket.D 协议&#xff1f; Socket.D 是一个基于事件和语义消息流的网络应用协议。在微服务、移动应用、物联网等场景&#xff0c;可替代 http、websocket 等。协议详情参考《官网介绍》。 支持&#xff1a; tcp, udp, ws, kcp 传输。 目前&#xff1a;java&#xff0c;kotli…

Python不使用元类的ORM实现

不使用元类的简单ORM实现 在 Python 中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff09;是一种将对象和数据库之间的映射关系进行转换的技术&#xff0c;使得通过面向对象的方式来操作数据库更加方便。通常&#xff0c;我们使用元类&#xff08;metaclass&a…

关于go和rust语言的对比

文章目录 前言Rust 的优势&#xff1a;Go 的优势&#xff1a;总结 前言 Go 和 Rust 是两种现代的系统级编程语言&#xff0c;它们各自拥有独特的特性和应用场景。以下是它们的一些主要区别&#xff1a; Rust 的优势&#xff1a; 内存安全&#xff1a;Rust 引入了所有权和借用…

香橙派5plus上跑云手机方案二 waydroid

前言 上篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)说了怎么跑带GPU加速的redroid方案&#xff0c;这篇说下怎么在香橙派下使用Waydroid。 温馨提示 虽然能运行&#xff0c;但是体验下来只能用软件加速&#xff0c;无法使用GPU加速&#xff0c;所有会很卡。而且…

Pat乙级题解

文章目录 1~2021 ~ 4041~6061~8081~100101~125 1~20 1001 害死人不偿命的(3n1)猜想 B1002 写出这个数 (20 分) B1003 我要通过&#xff01; B1004 成绩排名 1005 继续(3n1)猜想 B1006 换个格式输出整数 B1007 素数对猜想 1008 数组元素循环右移问题 B1009 说反话 1010 一元多项…

linux磁盘分区管理

首先关机状态下&#xff0c;先配置硬盘 硬盘分区管理 识别硬盘 》分区规划 》 格式化 》 挂载使用 [rootlocalhost ~]# lsblk 查看硬盘 分区划分&#xff08;m帮助, p 查看分区, n 创建分区, d 删除分区, q 退出, w 保存&#xff0c; g gpt分区&#xff09; [roo…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出为各种应用生成类似人类文本的出色能力。然而&#xff0c;LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

快速排序算法Python实现

快速排序原理和步骤 快速排序是一种高效的排序算法&#xff0c;基于分治法&#xff08;Divide and Conquer&#xff09;来实现。其基本思想是通过一次排序将数组分成两部分&#xff0c;其中一部分的所有元素都小于另一部分&#xff0c;然后递归地对这两部分进行排序。以下是快…

前端构建工具(webpackvite)

这里写目录标题 构建工具webpack介绍配置文件简介entryoutputloaderbabel插件开发服务器&#xff08;webpack-dev-server&#xff09;soureMap vite 构建工具 当我们习惯了在node中编写代码的方式后&#xff0c;在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:…

夏季户外综合征怎么预防

以下是一些预防夏季户外综合征的有效方法&#xff1a; 做好防晒措施&#xff1a; 涂抹高倍数的防晒霜&#xff0c;每隔 2 - 3 小时重新涂抹一次。比如选择 SPF50、PA 的防晒霜。佩戴宽边帽子、太阳镜和遮阳伞&#xff0c;减少阳光直射面部和眼睛。像渔夫帽、大檐帽能有效遮挡阳…

12-阿里云单细胞处理-PBMC(by-jmzeng)

scRNA_10X/seurat-v2/sup-patient1-PBMC.Rmd at master jmzeng1314/scRNA_10X (github.com) s04-运行seurat流程处理一万个单细胞转录组数据并自动化出报告_哔哩哔哩_bilibili #section 3已更新#「生信技能树」单细胞公开课2021_哔哩哔哩_bilibili 上传读取数据 可以配置租…

模拟型题目

题目类型&#xff1a; 给定操作&#xff0c;允许操作任意次 思路收集&#xff1a; 1.暴力遍历&#xff1a;如Problem - B - Codeforces 直接让每一个不同的进行操作 2.归纳&#xff1a;根据模拟来发现规律

RTK_ROS_导航(4):ROS中空地图的生成与加载

1. 地图加载 构建空白 Map 如下,以下为python代码,生成了output_image.pgm 文件 一般你在什么地方运行该代码,这个文件就生成在什么地方 import numpy as np size = 100 # 单位:m resulition = 0.05 # 单位:mw = round(size / resulition) IMAGE_DATA = np.zeros((w

ChatGPT:Swagger 的疑问

ChatGPT&#xff1a;Swagger 的疑问 这段代码是做什么的&#xff0c;为什么每个微服务的写法都一样 springdoc:api-docs:enabled: true # 1. 是否开启 Swagger 接文档的元数据path: /v3/api-docsswagger-ui:enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面path: /sw…

音视频解封装demo:使用libmp4v2解封装(demux)出mp4文件中的h264视频数据和aac语音数据

1、README 前言 本demo是使用的mp4v2来将mp4文件解封装得到h264、aac的&#xff0c;目前demo提供的.a静态库文件是在x86_64架构的Ubuntu16.04编译得到的&#xff0c;如果想在其他环境下测试demo&#xff0c;可以自行编译mp4v2并替换相应的库文件&#xff08;libmp4v2.a&#…