python-爬虫入门

news/2024/11/14 19:21:32/文章来源:https://www.cnblogs.com/zhoutuo/p/18425621

前言:由于个人负责的运维组,其中有个同事每回在某个项目发版更新后,需手动在k8s容器平台web界面上复制出几百个微服务的名称以及镜像版本等信息,用来更新微服务清单,个人决定抽时间写个爬虫脚本自动完成手动执行的任务。由于公司信息需保密,这里介绍个简单入门的爬虫脚本。

Python爬虫:通常指的是使用Python语言编写的网络爬虫程序。网络爬虫(Web crawler)是一种自动化的程序,用于在互联网上浏览和检索信息。爬虫可以访问网站,获取网页内容,然后从这些内容中提取有用的数据。以下是Python爬虫的一些基本概念和组成部分:

  1. 请求网页:使用HTTP库(如requests)向目标网站发送请求,获取网页内容。

  2. 解析内容:解析获取到的网页内容,通常使用HTML解析库(如BeautifulSouplxml)来提取所需的数据。

  3. 数据提取:从解析后的内容中提取有用的信息,如文本、链接、图片等。

  4. 存储数据:将提取的数据保存到文件、数据库或其他存储系统中。

  5. 遵守规则:尊重网站的robots.txt文件,遵守网站的爬虫政策,避免对网站造成不必要的负担。

  6. 用户代理:模拟浏览器行为,设置用户代理(User-Agent),以避免被网站识别为爬虫。

  7. 处理重定向:处理HTTP重定向,确保爬虫能够正确地跟踪到最终的网页地址。

  8. 错误处理:处理网络请求中可能出现的各种错误,如超时、连接错误等。

  9. 多线程/异步:使用多线程或异步IO(如asyncio库)来提高爬虫的效率。

  10. 数据清洗:对提取的数据进行清洗和格式化,以便于后续的分析和使用。

  11. 遵守法律:在进行网络爬虫操作时,遵守相关法律法规,不侵犯版权和隐私。

Python爬虫的应用非常广泛,包括但不限于:

  • 数据挖掘:从网页中提取大量数据,用于市场研究、消费者行为分析等。
  • 信息聚合:收集特定主题的信息,构建信息聚合平台。
  • 价格监控:监控电商平台的价格变化,进行价格比较。
  • 新闻监控:收集新闻网站的最新新闻,用于新闻摘要或新闻分析。

Python爬虫的开发需要考虑到效率、准确性和合法性,以确保爬虫程序能够稳定、高效地运行,同时不违反法律法规和网站政策。

抓取豆瓣前250高分电影爬虫脚本(名称、评分、评价人数):

import requests
from bs4 import BeautifulSoup
import csv# 请求头部
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()yield {'电影名称': title,'评分': rating_num,'评价人数': comment_num}# 保存数据函数
def save_data():with open('douban_movie_top250.csv', 'w', newline='', encoding='utf-8-sig') as f:writer = csv.writer(f)writer.writerow(['电影名称', '评分', '评价人数'])for i in range(10):url = 'https://movie.douban.com/top250?start=' + str(i * 25)response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')if __name__ == '__main__':save_data()

执行:

结果:

以下是Python爬虫脚本的逐条讲解:

  1. 导入必要的库:

    import requests
    from bs4 import BeautifulSoup
    import csv
    
    • requests: 用于发送HTTP请求。
    • BeautifulSoup: 从bs4库中导入,用于解析HTML文档。
    • csv: 用于写入CSV文件。
  2. 设置请求头部:

    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'
    }
    
    • 这里定义了一个字典headers,包含User-Agent,用于模拟浏览器请求,避免被网站识别为爬虫。
  3. 定义解析页面的函数:

    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()yield {'电影名称': title,'评分': rating_num,'评价人数': comment_num}
    
    • parse_html函数接收一个HTML字符串作为参数。
    • 使用BeautifulSoup解析HTML,指定lxml作为解析器。
    • 找到所有电影的列表(ol标签,类名为grid_view),然后遍历每个电影的HTML元素(li标签)。
    • 对于每个电影,提取电影名称、评分和评价人数,使用get_text()方法获取文本内容。
    • 使用yield返回一个包含电影信息的字典。
  4. 定义保存数据的函数:

    def save_data():with open('douban_movie_top250.csv', 'w', newline='', encoding='utf-8-sig') as f:writer = csv.writer(f)writer.writerow(['电影名称', '评分', '评价人数'])for i in range(10):url = 'https://movie.douban.com/top250?start='  + str(i * 25)response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')
    
    • save_data函数用于保存数据到CSV文件。
    • 使用with open(...)打开文件,确保文件在操作完成后自动关闭。
    • 创建一个csv.writer对象用于写入CSV文件。
    • 写入列标题。
    • 循环10次,每次请求豆瓣电影Top 250的不同部分(通过修改URL中的start参数)。
    • 对于每个请求,调用parse_html函数解析响应的HTML内容,并遍历返回的电影信息。
    • 将每个电影的信息转换为字符串并写入文件,每个信息后面添加换行符。
  5. 主程序入口:

    if __name__ == '__main__':save_data()
    
    • 这是Python程序的主入口点。
    • 如果这个脚本作为主程序运行,调用save_data函数开始执行。

这个脚本的目的是爬取豆瓣电影Top 250的信息,并将其保存到CSV文件中。每个电影的信息包括名称、评分和评价人数。

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

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

相关文章

C10-05-2-X-ray简单使用

一、X-ray 主流应用漏洞扫描工具,也支持部分主机扫描功能(社区版+高级版) 下载: Github: https://github.com/chaitin/xray/releases (国外) CT stack: https://stack.chaitin.com/tool/detail?id=1 (国内)官方文档说明:快速开始 - xray Documentation首次运行会在同…

C10-05-1-Nmap常用参数说明

一、Nmap免责声明 本文仅是个人对该工具的学习测试过程记录,不具有恶意引导意向。 本文工具仅面向合法授权的企业安全建设行为,如您需要测试本工具的可用性,请自行搭建靶机环境。 在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿…

Mockito提升单元测试覆盖率

简单实战1、准备工作从gitee下载一个例子工程,下面会在这个工程下补充测试用例 选择的是 Ruoyi的后台代码,gitclone之后,添加几个依赖,因为习惯用@RunWith(MockitoJUnitRunner.class) 的方式,就添加了下面的两个依赖 第一个Mockito是这篇文章的主题,第二个junit4能…

mysql安装(windows-mysql-8.1.0-winx64.zip安装)

1、官网下载,解压缩2、配置环境变量3、新增my.ini文件,根据电脑环境修改配置 # 设置mysql的安装目录 basedir # 设置mysql数据库的数据的存放目录 datadir my.ini文件内容如下: [mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\kaifa\mysql-8.1.0-winx64# …

【游记】CSP-S2024游记

寄。CSP-S2024 游记展开目录 目录CSP-S2024 游记初赛9.21 上午9.21 下午初赛 9.21 上午 关于为什么从比赛当天开始,原因是我记性太差全忘了。 早上起来水了会谷,吃完饭出发。 同车 @Vsinger_洛天依 和 @JustinXaviel. 我和洛天依都不考钩组,所以把 JustinXaviel 送到地方之后…

UML在线工具的使用

UML在线编辑网站 https://plantuml.com/zh/class-diagram 模板(类方法显示) @startuml skinparam classAttributeIconSize 0 class Config {+load() +save() } @enduml

CSP2024-24

2A 题意:给定长度为 \(n\) 的非负整数数组 \(a\),求最小的 \(r−l+1\) 满足 \(l≤r,\sum_{i = l}^ra_i\) 是合数。 考虑全是正数的情况,答案一定 \(\le 4\),考虑一下每个数的奇偶性即可。 那么就把所有正数及其位置存下来,使得 \(b_i = a_{p_i}\),暴力检查 \(b\) 中长度为…

放开那代码让我来!——Cursor帮你写代码的奇妙之旅

让我们开门见山:编程很酷,但也很折磨人。那些长时间盯着屏幕,debug无休止的日子,只有程序员懂得它的酸爽。而就在这个编程焦虑的世界中,Cursor横空出世,带着一系列魔法功能,如同你手中的一根智能魔杖,让写代码变得像煮速冻面一样简单。 Cursor,一款基于AI的编程助手,…

Mathtype公式相关:在mathtype中添加任意维数矩阵的方法以及矩阵中省略号的问题;输入空格;输入花体字母;输入空心字母;输入空心数字

一、在mathtype中添加任意维数矩阵的方法以及矩阵中省略号的问题 使用mathtype创建任意维数的矩阵: 打开mathtype后可点击矩阵工具栏,再点击右下角的图形,具体情况如下图所示。点击之后会弹出一个对话框如下图所示,可在行列处输入自己想要的行数和列数。使用此方法创建的矩…

GIS转码的秋招历程与踩坑经历

本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况~本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况。首先,这篇文章一…

树状数组浅谈

什么是树状数组 树状数组是一种码量小,常数小,支持单点修改和区间查询的数据结构。 树状数组维护的信息和运算需要满足结合律并且可差分 注意gcd和max操作虽然满足结合律,但不可差分,因此不能使用树状数组维护 其实,树状数组能做的,线段树都能做,线段树能做的,树状数组…