python爬虫初体验(二)

news/2024/9/22 16:39:06/

Python中,每个模块都有一个内置的变量 name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。

作用

  1. 模块可被导入也可直接执行:使一个Python脚本既可以作为一个独立的程序运行,也可以被其他脚本作为模块导入。
  2. 减少全局污染:当脚本作为模块被导入时,可以避免执行不必要的代码,提高代码的整洁度和可维护性。
  3. 测试代码:可以编写一些测试代码,只在直接运行脚本时执行,而不影响作为模块导入时的行为。

使用场景

  1. 脚本和模块分离:使脚本既可以独立运行,也可以作为模块导入。
  2. 单元测试:在脚本中编写一些测试代码,只在直接运行时执行。
  3. 初始化资源:在脚本直接运行时初始化一些资源,例如数据库连接等。

示例

假设有一个Python脚本 example.py:

python">import csv
import requests
from bs4 import BeautifulSoupdef greet(name):print("Hello, {}!".format(name))def main():# 检查命令行参数数量if len(sys.argv) < 2:print("Usage: python script.py <name>")sys.exit(1) # 退出程序,返回错误码1# 获取命令行参数中的名字name = sys.argv[1]# 调用greet函数greet(name)def amazon():# 目标URLurl = 'https://www.shanghairanking.cn/rankings/bcur/2024'# 请求头,模拟浏览器行为,防止被服务器识别为爬虫headers = {'Connection': 'keep-alive','Cache-Control': 'no-store, no-cache, must-revalidate','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36','Accept': '*/*','Accept-Encoding': 'gzip, deflate, br, zstd','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Referer': 'https://www.shanghairanking.cn/rankings/bcur/2024',}# 创建一个会话对象,保持连接session = requests.session()# 先访问一次首页,模拟用户行为session.get('https://www.shanghairanking.cn')# 发送带有headers的GET请求并获取响应内容resHtml = session.get(url, headers=headers).content.decode('utf-8')# 使用BeautifulSoup解析HTML内容html_soup = BeautifulSoup(resHtml, 'html.parser')# 查找表格中的所有行all_goods_li = html_soup.find('table').find_all('tr')# 打开CSV文件准备写入with open('output.csv', 'wb') as csvfile:# 创建一个csv.writer对象csv_writer = csv.writer(csvfile)for row in all_goods_li:goods_info_list = []rank = row.find('div', class_="ranking")img_link = row.find('img')['src']name = row.find('span', class_='name-cn')tags = row.find('p', class_="tags")if name and img_link:goods_info_list.append(rank.get_text(strip=True).encode('utf-8'))goods_info_list.append(img_link)# 将name添加到列表中,并转换为UTF-8编码goods_info_list.append(name.get_text(strip=True).encode('utf-8'))goods_info_list.append(tags.get_text(strip=True).encode('utf-8'))csv_writer.writerow(goods_info_list)# 如果此脚本被直接运行,则执行amazon函数
if __name__ == '__main__':main()

如果你直接运行这个脚本:

python example.py world

控制台会输出:Hello, World!

作为模块导入如果你在另一个脚本中导入 example.py:

python">import example
example.greet("Alice")example.amazon()

则输出Hello, Alice!并执行amazon脚本。example.py 中的 if __name__ == '__main__': 块中的代码不会被执行,因为 example.py 是作为模块被导入的,其 __name__ 的值为 'example',而不是 '__main__'

注意事项

  • 命令行参数:确保在运行脚本时提供了正确的命令行参数。
  • 编码问题:确保使用正确的编码处理非ASCII字符。
  • 错误处理:可以添加异常处理逻辑来捕获并处理可能出现的错误。

http://www.ppmy.cn/news/1528917.html

相关文章

CSS概览

概述 是什么 cascading style css 层叠样式表 由W3C制定的网页元素定义规则 为什么 美化 怎么办 设置样式 布局 css 引入 内部样式表 在head标签内部使用style标签 <html><head><style>.id{width: 400px;height: 400px;border: 1px solid black;ma…

面试金典题2.1

编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入&#xff1a;[1, 2, 3, 3, 2, 1]输出&#xff1a;[1, 2, 3]示例2: 输入&#xff1a;[1, 1, 1, 1, 2]输出&#xff1a;[1, 2]提示&#xff1a; 链表长度在[0, 20000]范围内。链表元素在[0…

jQuery css() 方法

jQuery css() 方法 引言 在网页设计和开发中&#xff0c;样式是至关重要的&#xff0c;它决定了网页的视觉效果和用户体验。jQuery&#xff0c;作为一个广泛使用的JavaScript库&#xff0c;提供了强大的DOM操作能力&#xff0c;其中css()方法便是用于操作和获取元素样式的关键…

Qt优秀开源项目之二十三:QSimpleUpdater

QSimpleUpdater是开源的自动升级模块&#xff0c;用于检测、下载和安装更新。 github地址&#xff1a;https://github.com/alex-spataru/QSimpleUpdater QSimpleUpdater目前Star不多&#xff08;911个&#xff09;&#xff0c;但已在很多开源项目看到其身影&#xff0c;比如Not…

店铺所有商品API接口解析,用JSON格式的示例

以下是一个店铺所有商品接口数据的 JSON 格式示例&#xff1a; { "status": "success", "message": "获取商品列表成功", "data": [ { "product_id": "123456", "name": "商品名称1&qu…

BMC 虚拟i2c访问PCA9545(switch芯片)后面的设备,为什么找不到PCA9545?

1.说明 1.1 背景 无意中看到PCA9545(switch芯片)后面有设备&#xff0c;但是PCA9545设备本身是连接到物理设备i2c上的&#xff0c;然而扫描该物理i2c bus&#xff0c;却找不到该设备。此篇文章主要找一下该原因的。 1.2 参考代码 当前使用的是ast2600芯片&#xff0c;可参考…

Python办公自动化案例(四):将Excel数据批量保存到Word表格中

案例:将excel数据批量保存到Word表格中 要将Excel数据批量保存到Word表格中,可以使用Python的openpyxl库来读取Excel文件,以及python-docx库来创建和编辑Word文档。以下是一段示例代码,以及代码解释和一些注意事项。 准备好的Excel数据: 1.安装所需库 首先,确保你已经…

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】010 - 二号内核线程 kthreadd线程 工作流程分析

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】010 - 二号内核线程 kthreadd线程 工作流程分析 一、kthreadd 线程代码工作流程分析二、如何添加任务到 kthread_create_list 链表 中三、__kthread_create_on_node() 函数工作流程分析系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboo…